Excel vba число строк на листе

I am developing a dashboard in excel. And I am looking for calculating row count. (How many records are present) ..

Since there are some blank cells I thought to go from bottom to up. I use the following

   Range("A1048576").Select
Selection.End(xlUp).Select

After this execution the active cell is at A113 which means the row count is 113.

My question is how to get this number 113 from the active cell?

Community's user avatar

asked Feb 4, 2014 at 13:37

Alwyn Miranda's user avatar

You can use this:

Dim lastrow as Long
lastrow = Cells(Rows.Count,"A").End(xlUp).Row

lastrow will contain number of last empty row in column A, in your case 113

answered Feb 4, 2014 at 13:38

Dmitry Pavliv's user avatar

Dmitry PavlivDmitry Pavliv

35.2k13 gold badges79 silver badges80 bronze badges

1

Here is what I usually use for that:

lastrow = WorksheetFunction.CountA(Columns("A:A"))

This will return the number of non-empty cells in Column «A» which is what I think you’re after. Hope this helps.

answered Feb 4, 2014 at 13:49

Jim Simson's user avatar

Jim SimsonJim Simson

2,7663 gold badges21 silver badges30 bronze badges

2

The best way to get the count of rows/records (in most cases) is to use .UsedRange.Rows.Count. You can assign the return value to a variable like this:

lastRow = Sheets(1).UsedRange.Rows.Count

If you use a function that includes a column (such as column A) as shown in other examples, that will only get you the count of rows in that column, which may or may not be what you’re going for. One caveat: if you have formatted rows below your last row with a value then it will return that row number.

answered Mar 3, 2021 at 0:28

SendETHToThisAddress's user avatar

If there is a slight chance that the last row of the worksheet is not empty, you should add an IsEmpty() check to @simoco ‘s solution. Therefore; following is a function that returns the last used row and check if the last row of the worksheet is empty:

Function lastRow(WS As Worksheet, iColumn As String) As Long

    If Not IsEmpty(WS.Range(iColumn & WS.Rows.Count)) Then
        lastRow = WS.Rows.Count
    Else
        lastRow = WS.Range(iColumn & WS.Rows.Count).End(xlUp).Row
    End If

End Function

answered Feb 4, 2014 at 14:22

simpLE MAn's user avatar

simpLE MAnsimpLE MAn

1,56213 silver badges22 bronze badges

 

Подскажите ф-цию для того чтою узнать побыренькому(не переберая все строки), в скольких строках на листе есть информация.    

  Или (И) функцию, возвращающюю неомер последней строки содержащей информацию.  

  Спасибо.

 

Есть много вариантов, но ни один из них не является абсолютно точным. Я обычно использую такой вариант  

  Sub Макрос1()  
Dim iLastRow As Long  
   iLastRow = Cells(Rows.Count, 1).End(xlUp).Row  
   MsgBox «Последний ряд таблицы в столбец А: » & iLastRow, , «»  
End Sub

 

Для общего развития можешь почитать эту тему.    

http://www.sql.ru/forum/actualthread.aspx?tid=463148#4535898  

  Там участник с ником KL(XL) объясняет, недостатки всех приёмов нахождения последней заполненной (или пустой) строки на листе Excel.  

  P.S. KL(XL) является «Microsoft MVP» по Excel (т.е. признанный компанией Microsoft профессионал по Excel)

 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

{quote}{login=Человек}{date=09.07.2008 11:26}{thema=VBA. Количество заполненых строк на листе}{post}Подскажите ф-цию для того чтою узнать побыренькому(не переберая все строки), в скольких строках на листе есть информация.    
Или (И) функцию, возвращающюю неомер последней строки содержащей информацию.  
Спасибо.{/post}{/quote}  
—  
В Вашем вопросе фигурирует коварное слово «информация». Информацией ячеек могут быть:  значения, формулы, формат, шрифт, цвет, размеры, объединения, и проч., включая сочетания свойств.  
Наберите в VBA Range(«A1») и поставьте точку — всплывет длинный список свойств и методов ячейки. Все свойства — это элементы информации.  

  Если же Вас интересуют только ячейки со значениями и формулами, то:  

  Последняя строка:  
LastRow = ActiveSheet.Cells.Find(What:=»*», _  
SearchDirection:=xlPrevious, _  
SearchOrder:=xlByRows).Row  

  Последняя колонка:  
LastCol = ActiveSheet.Cells.Find(What:=»*», _  
SearchDirection:=xlPrevious, _  
SearchOrder:=xlByColumns).Column  

  Последняя ячейка — в пересечении:  
Set LastCell = ActiveSheet.Cells(LastRow, LastCol)  
—  
ZVI

 

{quote}{login=Pavel55}{date=09.07.2008 11:49}{thema=}{post}Для общего развития можешь почитать эту тему…{/post}{/quote}  
я бы добавил :)(несмотря на признанность)  

  метод end(xldown) лучше не применять вообще, так как он дает ошибку гораздо чаще, чем метод cells(rows.count,n).end(xlup)(догадайтесь какую)  

  но и последний надо применять с осторожностью, а именно  

  для пессимистов — проверить, пуста ли ячейка cells(rows.count,n)  

  для всех остальных — проверить не пуста ли ячейка cells(rows.count,n).end(xlup) перед тем, как применять к ней offset(1,0)  

    да, мы что-то сразу на VBA перешли, а человек просил «функцию»  

  так вот:  

  =макс(если(диапазон<>»»;строка(диапазон);1) даст последнюю строку вашего «диапазона». (словие можно менять под различные надобности)

 

не знаю почему, но я тут не нашол примера который приводится в справке майкрософта:  

  ThisWorkbook.Worksheets(«имя листа»).Activate  
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate  
k = ActiveCell.Row ‘номер последней заполненной строки  

  мне этот способ очень понравился, прошу спецов дать коменты по его целесообразности — или я о чем то не о том?:)

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

:-) «не нашол» — круто!  
Вопрос — «Количество заполненных строк на листе»  
См. Файл. Заполнена всего одна ячейка.

Я сам — дурнее всякого примера! …

 

Гы-гы — прикольненько, но почему же вы не объяснили природу этого дивного явления? почему ексель думает что в 31й строке тоже есть данные? Раз формул нет то наверное вы в этой ячейке поменяли цвет заливки или границу? Если да то флаг пользователю в ж — есть хорошая поговорка: «Почему солнце всходит и заходит? — Работает? — Да — Вот и не трогайте настройки что б не сломалось!»:) — в нашем случае не красьте облака, или там не меняйте вес луны, что бы солнце не поменяло орбиту:)  

  Буду очень признателен если мне и другим ученикам раскроете тайну даного некорректного поведения екселя.  

  Заранее спасибо.

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

#9

26.05.2012 23:07:27

божитымой :))  
ну где ж пытливость ума и жажда эксперимента?  
что за философия существования — жить на всём готовом, разжёванном и положенном в рот?  
ай, беда-беда-огорчение…  

  впрочем, хватит патетики :)))  

  идите хоть на 178-ю строчку, закрасьте ячейку в любой цвет. а потом для этой же ячейки выберите «нет заливки».  
и опять запустите макрос. ;)

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

Home / VBA / Count Rows using VBA in Excel

To count rows using VBA, you need to define the range from which you want to count the rows and then use the count and rows property to get the count of the row from that range. You can also use a loop to count rows where you have data only.

Use VBA to Count Rows

  1. First, you need to define the range for which you want to count the rows.
  2. After that, use a dot (.) to open the list of properties and methods.
  3. Next, type or select the “Rows” property.
  4. In the end, use the “Count” property.
vba-to-count-rows

Now when you run this code, it will return the count of the rows, and to get the count you can use a message box or directly enter that value into a cell as well.

Sub vba_count_rows()
Range("A1:A10").Rows.Count
End Sub

Count Rows for the Used Range

Sub vba_count_rows2()
   MsgBox Worksheets("Sheet1").UsedRange.Rows.Count
End Sub

Count Rows with Data using VBA

You can also count rows where you have data by ignoring the blank rows.

count-rows-with-data-using-vba

The following code will take the used range as the range to loop up at and loop through each row one by one and check if there’s a non-empty cell there, and if it is there it will consider it as a row with data, and in the end, show a message box with the total count of rows.

Sub vba_count_rows_with_data()

Dim counter As Long
Dim iRange As Range

With ActiveSheet.UsedRange

    'loop through each row from the used range
    For Each iRange In .Rows

        'check if the row contains a cell with a value
        If Application.CountA(iRange) > 0 Then

            'counts the number of rows non-empty Cells
            counter = counter + 1

        End If

    Next

End With

MsgBox "Number of used rows is " & counter
End Sub

More Tutorials

    • Excel VBA Font (Color, Size, Type, and Bold)
    • Excel VBA Hide and Unhide a Column or a Row
    • Excel VBA Range – Working with Range and Cells in VBA
    • Apply Borders on a Cell using VBA in Excel
    • Find Last Row, Column, and Cell using VBA in Excel
    • Insert a Row using VBA in Excel
    • Merge Cells in Excel using a VBA Code
    • Select a Range/Cell using VBA in Excel
    • SELECT ALL the Cells in a Worksheet using a VBA Code
    • ActiveCell in VBA in Excel
    • Special Cells Method in VBA in Excel
    • UsedRange Property in VBA in Excel
    • VBA AutoFit (Rows, Column, or the Entire Worksheet)
    • VBA ClearContents (from a Cell, Range, or Entire Worksheet)
    • VBA Copy Range to Another Sheet + Workbook
    • VBA Enter Value in a Cell (Set, Get and Change)
    • VBA Insert Column (Single and Multiple)
    • VBA Named Range | (Static + from Selection + Dynamic)
    • VBA Range Offset
    • VBA Sort Range | (Descending, Multiple Columns, Sort Orientation
    • VBA Wrap Text (Cell, Range, and Entire Worksheet)
    • VBA Check IF a Cell is Empty + Multiple Cells

    ⇠ Back to What is VBA in Excel

    Helpful Links – Developer Tab – Visual Basic Editor – Run a Macro – Personal Macro Workbook – Excel Macro Recorder – VBA Interview Questions – VBA Codes

    Excel VBA Row Count

    In VBA programming, referring to rows is most important as well, and counting them is one thing you must be aware of when it comes to VBA coding. We can get a lot of value if we understand the importance of counting rows with data in the worksheet. This article will show you how to count rows using VBA coding.

    VBA Row Count

    Table of contents
    • Excel VBA Row Count
      • How to Count Rows in VBA?
        • Example #1
        • Example #2
        • Example #3 – Find Last Used Row
      • Things to Remember
      • Recommended Articles

    How to Count Rows in VBA?

    You can download this VBA Row Count Excel Template here – VBA Row Count Excel Template

    Example #1

    To count rowsThere are numerous ways to count rows in Excel using the appropriate formula, whether they are data rows, empty rows, or rows containing numerical/text values. Depending on the circumstance, you can use the COUNTA, COUNT, COUNTBLANK, or COUNTIF functions.read more, we need to use the RANGE object. In this object, we need to use the ROWS object. In this, we need to use the COUNT property.

    Look at the below data in Excel.

    VBA Row Count Example 1

    From the above data, we need to identify how many rows are there from the range A1 to A8. So first, define the variable as an Integer to store the number of rows.

    Code:

    Sub Count_Rows_Example1()
    
    Dim No_Of_Rows As Integer
    
    End Sub

    VBA Row Count Example 1-1

    We will assign row numbers for this variable, so enter the variable name and the equal sign.

    Code:

    Sub Count_Rows_Example1()
    
    Dim No_Of_Rows As Integer
    
    No_Of_Rows =
    
    End Sub

    VBA Row Count Example 1-2

    We need to provide a range of cells, so open the RANGE objectRange is a property in VBA that helps specify a particular cell, a range of cells, a row, a column, or a three-dimensional range. In the context of the Excel worksheet, the VBA range object includes a single cell or multiple cells spread across various rows and columns.read more and supply the range as “A1:A8”. 

    Code:

    Sub Count_Rows_Example1()
    
    Dim No_Of_Rows As Integer
    
    No_Of_Rows = Range("A1:A8")
    
    End Sub

    VBA Row Count Example 1-3

    Once we supply the range, we need to count the number of rows, so choose the ROWS property of the RANGE object.

    VBA Row Count Example 1-4

    We are counting several rows in the RANGE object’s ROWS property, so choose the “COUNT” property now.

    VBA Row Count Example 1-7

    Now in the message box, show the value of the variable.

    Code:

    Sub Count_Rows_Example1()
    
    Dim No_Of_Rows As Integer
    
    No_Of_Rows = Range("A1:A8").Rows.Count
    
    MsgBox No_Of_Rows
    
    End Sub

    VBA Row Count Example 1-5

    Now, run the code and see the count of rows of the supplied range of cells.

    VBA Row Count Example 1-6

    There are 8 rows supplied for the range, so the row count is 8 in the message box.

    Example #2

    We have other ways of counting rows as well. For the above method, we need to supply a range of cells, showing the number of rows selected.

    But imagine the scenario where we need to find the last use of any column. For example, take the same data as seen above.

    VBA Row Count Example 1

    To move to the last used cell from cell A1, we press the shortcut excel keyAn Excel shortcut is a technique of performing a manual task in a quicker way.read more “Ctrl + Down Arrow,” so it will take you to the last cell before the empty cell.

    First, supply the cell as A1 using the RANGE object.

    Code:

    Sub Count_Rows_Example2()
    
    Dim No_Of_Rows As Integer
    
    No_Of_Rows = Range("A1")
    
    MsgBox No_Of_Rows
    
    End Sub

    VBA Row Count Example 2

    From this cell, we need to move down. We use Ctrl + Down Arrow in the worksheet, but in VBA, we use the END propertyEnd is a VBA statement that can be used in a variety of ways in VBA applications. Anywhere in the code, a simple End statement can be used to instantly end the execution of the code. In procedures, the end statement is used to end a subprocedure or any loop function, such as ‘End if’.read more. Choose this property and open the bracket to see options.

    Example 2-1

    Look there with the END key. We can see all the arrow keys like “xlDown, xlToLeft, xlToRight, and xlUp” since we need to move down and use the “xlDown” option.

    Code:

    Sub Count_Rows_Example2()
    
    Dim No_Of_Rows As Integer
    
    No_Of_Rows = Range("A1").End(xlDown)
    
    MsgBox No_Of_Rows
    
    End Sub

    Example 2-2

    It will take you to the last cell before any break. We need the row number in the active cellThe active cell is the currently selected cell in a worksheet. Active cell in VBA can be used as a reference to move to another cell or change the properties of the same active cell or the cell’s reference provided from the active cell.read more so use the ROW property.

    Code:

    Sub Count_Rows_Example2()
    
    Dim No_Of_Rows As Integer
    
    No_Of_Rows = Range("A1").End(xlDown).Row
    
    MsgBox No_Of_Rows
    
    End Sub

    Example 2-3

    Now, this will show the last row numberThe End(XLDown) method is the most commonly used method in VBA to find the last row, but there are other methods, such as finding the last value in VBA using the find function (XLDown).read more, which will be the count of the number of rows.

    VBA Row Count Example 2-4

    So in rows, we have data.

    Example #3 – Find Last Used Row

    Finding the last used row is important to decide how many times the loop has to run. Also, in the above method, the last row stops to select if there is any breakpoint cell. So in this method, we can find the last used row without any problems.

    Open CELL propertyCells are cells of the worksheet, and in VBA, when we refer to cells as a range property, we refer to the same cells. In VBA concepts, cells are also the same, no different from normal excel cells.read more.

    Code:

    Sub Count_Rows_Example3()
    
    Dim No_Of_Rows As Integer
    
    No_Of_Rows = Cells(
    
    MsgBox No_Of_Rows
    
    End Sub

    VBA Row Count Example 3

    Now, we need to mention the row number to start with. The problem here is we are not sure how many rows of data we have so that we can go straight to the last row of the worksheet, for this mention, ROWS.COUNT property.

    Code:

    Sub Count_Rows_Example3()
    
    Dim No_Of_Rows As Integer
    
    No_Of_Rows = Cells(Rows.Count,
    
    MsgBox No_Of_Rows
    
    End Sub

    Example 3-1

    Next, we need to mention in which column we are finding the last used row, so in this case, we are finding it in the first column, so mention 1.

    Code:

    Sub Count_Rows_Example3()
    
    Dim No_Of_Rows As Integer
    
    No_Of_Rows = Cells(Rows.Count, 1)
    
    MsgBox No_Of_Rows
    
    End Sub

    Example 3-2

    At this moment, it will take you to the last cell of the first column. We need to move upwards to the last used cell from there onwards, so use the End(xlUp) property.

    Code:

    Sub Count_Rows_Example3()
    
    Dim No_Of_Rows As Integer
    
    No_Of_Rows = Cells(Rows.Count, 1).End(xlUp)
    
    MsgBox No_Of_Rows
    
    End Sub

    Example 3-3

    So, this will take you to the last used cell of column 1, and in this cell, we need the row number, so use the ROW property to get the row number.

    Code:

    Sub Count_Rows_Example3()
    
    Dim No_Of_Rows As Integer
    
    No_Of_Rows = Cells(Rows.Count, 1).End(xlUp).Row
    
    MsgBox No_Of_Rows
    
    End Sub

    VBA Row Count Example 3-4

    Things to Remember

    • The COUNT will give several rows in the worksheet.
    • If you have a range, then it will give several rows selected in the range.
    • The ROW property will return the active cell row number.

    Recommended Articles

    This article has been a guide to VBA Row Count. Here, we discuss how to count used rows in Excel using VBA coding, practical examples, and a downloadable Excel template. You may learn more about Excel from the following articles: –

    • VBA Insert Row
    • VBA Delete Row
    • VBA StatusBar
    • VBA Variable Range

    Содержание

    1. Свойство Application.Rows (Excel)
    2. Синтаксис
    3. Примечания
    4. Пример
    5. Поддержка и обратная связь
    6. Свойство Range.Rows (Excel)
    7. Синтаксис
    8. Замечания
    9. Пример
    10. Поддержка и обратная связь
    11. Count Rows using VBA in Excel
    12. Use VBA to Count Rows
    13. Count Rows for the Used Range
    14. Count Rows with Data using VBA
    15. Функции рабочих листов Excel при программировании на VBA
    16. Получение информации о форматировании ячейки
    17. Беседа с рабочим листом
    18. Отображение даты сохранения файла или вывода файла на печать
    19. Основы иерархии объектов
    20. Подсчет количества ячеек между двумя значениями
    21. Определение последней непустой ячейки в столбце или в строке
    22. Соответствует ли строка шаблону
    23. Возвращение из строки n-го элемента
    24. Преобразование чисел в текст
    25. Универсальная функция
    26. Функция SheetOffset

    Свойство Application.Rows (Excel)

    Возвращает объект Range , представляющий все строки на активном листе. Если активный документ не является листом, свойство Rows завершается ошибкой . Объект Range предназначен только для чтения.

    Синтаксис

    expression. Строк

    выражение: переменная, представляющая объект Application.

    Примечания

    Использование этого свойства без квалификатора объекта эквивалентно использованию ActiveSheet.Rows.

    При применении к объекту Range , который является множественным выделением, это свойство возвращает строки только из первой области диапазона. Например, если объект Range имеет две области — A1:B2 и C3:D4, selection.Rows.Count возвращает 2, а не 4.

    Чтобы использовать это свойство в диапазоне, который может содержать несколько выделенных элементов, проверьте Areas.Count, чтобы определить, является ли диапазон множественным выбором. Если это так, выполните цикл по каждой области диапазона, как показано в третьем примере.

    Пример

    В этом примере удаляется третья строка на листе Sheet1.

    В этом примере удаляются строки в текущем регионе на листе, где значение одной ячейки в строке совпадает со значением в ячейке в предыдущей строке.

    В этом примере отображается количество строк в выделенном фрагменте на листе Sheet1. Если выбрано несколько областей, в примере выполняется цикл по каждой области.

    Поддержка и обратная связь

    Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

    Источник

    Свойство Range.Rows (Excel)

    Возвращает объект Range , представляющий строки в указанном диапазоне.

    Синтаксис

    expression. Строк

    выражение: переменная, представляющая объект Range.

    Замечания

    Чтобы вернуть одну строку, используйте свойство Item или аналогично включите индекс в круглые скобки. Например, и Selection.Rows(1) Selection.Rows.Item(1) возвращают первую строку выделенного фрагмента.

    При применении к объекту Range , который является множественным выделением, это свойство возвращает строки только из первой области диапазона. Например, если объект someRange Range имеет две области — A1:B2 и C3:D4, someRange.Rows.Count возвращает значение 2, а не 4. Чтобы использовать это свойство в диапазоне, который может содержать несколько выделенных элементов, проверьте Areas.Count , чтобы определить, является ли диапазон множественным выбором. Если это так, выполните цикл по каждой области диапазона, как показано в третьем примере.

    Возвращаемый диапазон может находиться за пределами указанного диапазона. Например, Range(«A1:B2»).Rows(5) возвращает ячейки A5:B5. Дополнительные сведения см. в разделе Свойство Item .

    Использование свойства Rows без квалификатора объекта эквивалентно использованию ActiveSheet.Rows. Дополнительные сведения см. в свойстве Worksheet.Rows .

    Пример

    В этом примере удаляется диапазон B5:Z5 на листе 1 активной книги.

    В этом примере строки в текущем регионе удаляются на листе одной из активных книг, где значение ячейки в строке совпадает со значением ячейки в предыдущей строке.

    В этом примере отображается количество строк в выделенном фрагменте на листе Sheet1. Если выбрано несколько областей, в примере выполняется цикл по каждой области.

    Поддержка и обратная связь

    Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

    Источник

    Count Rows using VBA in Excel

    To count rows using VBA, you need to define the range from which you want to count the rows and then use the count and rows property to get the count of the row from that range. You can also use a loop to count rows where you have data only.

    Use VBA to Count Rows

    1. First, you need to define the range for which you want to count the rows.
    2. After that, use a dot (.) to open the list of properties and methods.
    3. Next, type or select the “Rows” property.
    4. In the end, use the “Count” property.

    Now when you run this code, it will return the count of the rows, and to get the count you can use a message box or directly enter that value into a cell as well.

    Count Rows for the Used Range

    Count Rows with Data using VBA

    You can also count rows where you have data by ignoring the blank rows.

    The following code will take the used range as the range to loop up at and loop through each row one by one and check if there’s a non-empty cell there, and if it is there it will consider it as a row with data, and in the end, show a message box with the total count of rows.

    Источник

    Функции рабочих листов Excel при программировании на VBA

    Настоящая заметка продолжает знакомство с VBA. В ней представлены некоторые пользовательские функции, которые можно применять в формулах рабочего листа.[1] Помните, что эти процедуры функций необходимо определить в модуле VBA, а не в модуле кода соответствующей рабочей книги, листа или пользовательской формы.

    Рис. 1. Активная ячейка имеет полужирное начертание, выполненное с помощью условного форматирования

    Скачать заметку в формате Word или pdf, примеры в формате Excel (файл содержит макросы)

    Получение информации о форматировании ячейки

    Можно написать пользовательскую функцию, возвращающую информацию о форматировании ячейки. Такие функции используются при сортировке данных на основе форматирования (например, в случае, когда ячейки, выделенные полужирным шрифтом, должны располагаться рядом).

    Предупреждение. Эти функции не всегда обновляются автоматически — изменение форматирования не приводит к пересчету формул Excel. Чтобы вызвать глобальный пересчет формул (и обновить все пользовательские функции), нажмите клавиши . В функцию можно также добавить следующий оператор: Application.Volatile. При наличии этого оператора пересчет функции производится после нажатия клавиши .

    Следующая функция возвращает ИСТИНА, если аргумент, состоящий из одной ячейки, выделен полужирным шрифтом. Если диапазон передается в качестве аргумента, функция использует его верхнюю левую ячейку.

    Эта функция работает только с явно заданным форматированием (не может применяться с условным форматированием). В Excel 2010 появился новый объект – DisplayFormat. Он учитывает наличие условного форматирования. Функция IsBold2 может обрабатывать полужирный формат, являющийся результатом условного форматирования. Свойство DisplayFormat возвращает ошибку #ЗНАЧ! при использовании в пользовательских функциях. Однако свойство работает в процедурах, вызываемых из VBA. Если выбрать в качестве активной ячейку А3, отформатированную с помощью условного форматирования, и вызвать процедуру CI, появится окно, подтверждающее, что активная ячейка имеет полужирное начертание (рис. 1).

    Следующая функция возвращает ИСТИНА, если используемая в качестве аргумента ячейка выделена курсивом.

    Обе предыдущие функции возвращают ошибку, если ячейка имеет смешанное форматирование. Функция, приведенная ниже, возвращает ИСТИНА только тогда, когда все символы в ячейке выделены полужирным шрифтом.

    Следующая функция возвращает целое число, соответствующее индексу цвета заливки ячейки. Если ячейка не имеет заливки, то функция возвращает значение 4142. Эта функция не может использоваться для определения цветов заливки таблиц (которые создаются с помощью команды Ctrl+T) или сводных таблиц. В подобных случаях воспользуйтесь объектом DisplayFormat.

    Беседа с рабочим листом

    Функция Saylt применяет синтезатор речи Excel для озвучивания аргумента.

    Эта функция носит развлекательный характер, но может использоваться и в серьезных целях. Например, ее можно включить в следующую формулу:

    =ЕСЛИ(СУММ(А:А)>25000;Saylt( » Цель достигнута » ))

    Если сумма значений в столбце А превышает 25 000, вы услышите синтезированный голос, сообщающий о том, что цель достигнута. Метод Speak можно также включить в конец длинной процедуры, и компьютер известит вас о том, что выполнение процедуры завершено.

    Отображение даты сохранения файла или вывода файла на печать

    Рабочая книга Excel содержит несколько встроенных свойств документа, к которым можно получить доступ с помощью свойства BuiltinDocumentProperties объекта Workbook. Следующая функция возвращает дату и время последнего сохранения рабочей книги.

    К свойствам можно обратиться по номеру, например, BuiltinDocumentProperties(5), или по имени, как в примере выше. Получить перечень свойств можно с помощью процедуры BDPNames(), код которой приведен в приложенном Excel-файле.

    Значения, возвращаемые этой функцией, совпадают со значениями даты и времени, которые отображаются в разделе Связанные даты после выбора команды Файл –> Сведения (рис. 2). Обратите внимание, что на значения даты и времени оказывает влияние свойство AutoSave. Поэтому время последнего сохранения необязательно имеет отношение ко времени сохранения файла пользователем.

    Рис. 2. Сведения о рабочей книге; чтобы увеличить изображение кликните на нем правой кнопкой мыши и выберите Открыть картинку в новой вкладке

    Следующая функция возвращает дату и время последнего вывода рабочей книги на печать или предварительного просмотра рабочей книги. Если рабочая книга никогда не печаталась и не просматривалась, функция возвращает ошибку #ЗНАЧ. При использовании двух последних функций, чтобы получить текущие значения данных свойств (чтобы обновить значения в ячейках), нажмите F9.

    Не ко всем свойствам можно получить доступ с помощью BuiltinDocumentProperties. Например, при попытке получить доступ к свойству Number of Bytes, указывающему размер файла, будет генерироваться ошибка.

    Основы иерархии объектов

    Объектная модель Excel представляет собой определенную структуру: одни объекты содержатся в других объектах. На вершине этой иерархии находится объект Application. Excel содержит другие объекты, в которые, в свою очередь, вложены более низкоуровневые объекты и т.д. Следующая иерархия показывает, как в этой структуре представлен объект Range.

    Объект Application
    Объект Workbook
    Объект Worksheet
    Объект Range

    Следующая функция получает один аргумент (диапазон) и возвращает имя рабочего листа, который содержит указанный диапазон. При этом используется свойство Parent объекта Range. Свойство Parent возвращает объект, содержащий объект Range.

    Следующая функция возвращает название рабочей книги для конкретной ячейки. Обратите внимание, что эта функция использует свойство Parent дважды. Первое свойство Parent возвращает объект Worksheet, а второе свойство Parent возвращает объект Workbook.

    Следующая функция переносит это упражнение на следующий логический уровень, обращаясь к свойству Parent трижды. Такая функция возвращает имя объекта Application для заданной ячейки. Указанная функция всегда будет возвращать значение Microsoft Excel.

    Подсчет количества ячеек между двумя значениями

    Следующая функция возвращает количество значений в диапазоне (первый аргумент), которые попадают в область, заданную вторым и третьим аргументами.

    Обратите внимание, что эта функция вызывает функцию Excel СЧЁТЕСЛИ (COUNTIFS). По сути, функция CountBetween является «оболочкой», которая может упростить формулы. (Но, наверное, не в этом учебном примере, для которого вполне достаточно стандартной функции Excel =СЧЁТЕСЛИМН(A17:A27; » » ;A17:A27; » >=2 » ) Поскольку функция СЧЁТЕСЛИ появилась в Excel 2007, приведенный код не будет работать с более ранними версиями Excel.

    Определение последней непустой ячейки в столбце или в строке

    Функция LastInColumn возвращает содержимое последней непустой ячейки в столбце, а LastlnRow – содержимое последней непустой ячейки в строке. В качестве единственного аргумента эти функции используют диапазон. Причем в качестве диапазона может использоваться, как весь столбец, так и вся строка. Если же в качестве аргумента не используется вся строка либо весь столбец, задействуется строка или столбец, в котором находится верхняя левая ячейка диапазона. Например, следующая формула возвращает последнее значение в столбце В: =LastInColumn(В5). Следующая формула возвращает последнее значение в строке 7: =LastInRow (С7 :D9).

    Оператор Application.Volatile вызывает выполнение функции всякий раз, когда пересчитываются формулы на рабочем листе. Оператор Rows.Count возвращает количество строк на рабочем листе (используется именно он, а не жестко заданное значение, из соображений совместимости; новые версии Excel могут включать большее количество строк на рабочем листе). Ссылка rng.Column возвращает номер столбца левой верхней ячейки в аргументе rng. Благодаря ссылке rng.Parent функция работает корректно, даже если аргумент rng ссылается на другой лист или рабочую книгу. Метод End (с аргументом xlUp) эквивалентен переходу к последней ячейке столбца и нажатию и . Функция IsEmpty проверяет, пуста ли ячейка. Если ячейка пуста, функция возвращает пустую строку. Без этого оператора пустой ячейке соответствовал бы результат 0.

    Код функции LastlnRow можно найти в модуле VBA приложенного Excel-файла.

    Соответствует ли строка шаблону

    Следующая функция возвращает значение ИСТИНА, если строка соответствует заданному шаблону. Функция представляет собой «оболочку», позволяющую использовать в формулах оператор VBA Like.

    Функция IsLike принимает два аргумента: text — текстовая строка или ссылка на ячейку, содержащую текстовую строку; pattern — строка, содержащая групповые символы согласно таблице (рис. 3).

    Рис. 3. Групповые символы

    Представленная ниже формула возвращает ИСТИНА, так как * соответствует любому количеству символов. Она возвращает ИСТИНА, если первый аргумент — любой текст, начинающийся с g.

    =IsLike( » guitar » , » g* » )

    Следующая формула возвращает ИСТИНА, так как ? соответствует любому отдельному символу. Если бы первым аргументом функции был «Unit12», то функция возвращала бы ЛОЖЬ.

    =IsLike( » Unit1 » , » Unit? » )

    Следующая формула возвращает ИСТИНА, так как первый аргумент является одним из символов списка во втором аргументе.

    =IsLike( » а » , » [aeiou] » )

    Следующая формула возвращает ИСТИНА, если ячейка А1 содержит один из символов: а, е, i, о, u, А, Е, I, О, U. При использовании функции ПРОПИСН (UPPER) в аргументе функция становится нечувствительной к регистру.

    =IsLike(ПРОПИСН(А1), ПРОПИСН( » [aeiou] » ))

    Следующая формула возвращает ИСТИНА, если в ячейке А1 находится значение, начинающееся с 1 и состоящее ровно из трех цифр (т.е. любое целое число от 100 до 199).

    Возвращение из строки n-го элемента

    ExtractElement — специальная функция рабочего листа, которая извлекает элемент из текстовой строки.

    В этой процедуре используется VBA-функция Split, возвращающая массив констант, из которого состоит текстовая строка. Массив начинается с нулевого элемента (а не с первого), поэтому текущий элемент имеет индекс n – 1.

    Например, если ячейка содержит следующий текст » 123-456-789-0133-8844 » , вы можете использовать функцию ExtractElement для извлечения любых подстрок между дефисами. Следующая формула возвращает 0133, т.е. четвертый элемент в строке.

    =ExtractElement( » 123-456-789-0133-8844 » ,4, » — » )

    Функция ExtractElement принимает три аргумента:

    • txt — текстовая строка, из которой извлекается подстрока (символьная строка или ссылка на ячейку);
    • n — целое число, представляющее номер извлекаемого элемента;
    • Separator — отдельный символ, используемый как разделитель.

    Если в качестве символа-разделителя задать пробел, то несколько пробелов подряд будут рассматриваться как один, что не всегда соответствует требованиям. Если n превышает количество элементов в строке, функция возвращает пустую строку.

    Преобразование чисел в текст

    Функция SpellDollars возвращает текст, в который преобразуется исходное число – сумма в долларах и центах. Например, формула =SpellDollars(23,45) возвращает строку » двадцать три и 45/100 доллара » (рис. 4). Обратите внимание, что отрицательные числа заключаются в круглые скобки. Код функции SpellDollars приведен в приложенном Excel-файле.

    Рис. 4. Примеры использования функции SpellDollars

    Универсальная функция

    Можно сделать так, чтобы одна функция рабочего листа работала как несколько функций. StatFunction имеет два аргумента: диапазон (rng) и операция (ор). В зависимости от значения аргумента ор функция возвращает значение, вычисленное с помощью одной из следующих функций Excel: СУММ, СРЗНАЧ, МЕДИАНА, МОДА, СЧЁТ, МАКС, МИН, ДИСП, СТАНДОТКЛОН. Например, результат формулы =StatFunction($A$33:$A$37;C36) зависит от содержимого ячейки С36, в которой должна быть текстовая строка с именем одной из допустимых функций. В нашем случае – СЧЁТ. Код функции StatFunction приведен в модуле VBA приложенного Excel-файла.

    Рис. 5. Примеры использования функции StatFunction

    Функция SheetOffset

    В Excel ограничена поддержка «трехмерных рабочих книг». Например, чтобы сослаться на другой рабочий лист в книге, включите в формулу имя рабочего листа. Данная проблема будет оставаться незначительной до тех пор, пока вы не попытаетесь скопировать формулу из одного листа в другой. Скопированные формулы продолжают ссылаться на первоначальное имя рабочего листа, и ссылки на листы не изменяются, как это происходит в реальной трехмерной рабочей книге.

    Функция VBA SheetOffset обеспечивает установку относительных ссылок на рабочие листы. Например (рис. 6), можно сослаться на ячейку А1 следующего рабочего листа с помощью такой формулы: =SheetOffset(1; А1). Первый аргумент представляет лист и может быть положительным, отрицательным или нулевым. Второй аргумент должен быть ссылкой на одну ячейку. Можете скопировать эту формулу в другие листы, и в скопированных формулах будет использована относительная ссылка.

    Рис. 6. Пример использования функции SheetOffset

    Источник

    Понравилась статья? Поделить с друзьями:
  • Excel vba цикл по объединенным ячейкам
  • Excel vba цикл по всему массиву
  • Excel vba цикл по всем ячейкам
  • Excel vba цикл по всем листам
  • Excel vba цикл до первой пустой строки