Here’s a completely over the top answer — will give you the details of all separate regions in your workbook (a region being separated by a blank row and column).
You didn’t state if there’d be more than one table on a sheet — so this gives it all.
Sub Test()
Dim aLists As Variant
Dim x As Long
Dim rng As Range
'//Find lists in the this workbook.
aLists = FindRegionsInWorkbook(ThisWorkbook)
For x = LBound(aLists) To UBound(aLists)
Set rng = Range(aLists(x))
Debug.Print rng.Parent.Name & "!" & rng.Address & _
" | FirstCol: " & rng.Column & _
" | LastCol: " & rng.Column + rng.Columns.Count - 1 & _
" | TopRow: " & rng.Row & _
" | BottomRow: " & rng.Row + rng.Rows.Count - 1 & _
" | TotalRows: " & rng.Rows.Count & _
" | TotalColumns: " & rng.Columns.Count
Next x
Debug.Assert False
End Sub
'---------------------------------------------------------------------------------------
' Procedure : FindRegionsInWorkbook
' Author : Zack Barresse (MVP), Oregon, USA. (http://www.mrexcel.com/forum/showthread.php?t=309052)
' Date : 20/03/2008
' Purpose : Returns each region in each worksheet within the workbook in the 'sRegion' variable.
'---------------------------------------------------------------------------------------
Public Function FindRegionsInWorkbook(wrkBk As Workbook) As Variant
Dim ws As Worksheet, rRegion As Range, sRegion As String, sCheck As String
Dim sAddys As String, arrAddys() As String, aRegions() As Variant
Dim iCnt As Long, i As Long, j As Long
'//Cycle through each worksheet in workbook.
j = 0
For Each ws In wrkBk.Worksheets
sAddys = vbNullString
sRegion = vbNullString
On Error Resume Next
'//Find all ranges of constant & formula valies in worksheet.
sAddys = ws.Cells.SpecialCells(xlCellTypeConstants, 23).Address(0, 0) & ","
sAddys = sAddys & ws.Cells.SpecialCells(xlCellTypeFormulas, 23).Address(0, 0)
If Right(sAddys, 1) = "," Then sAddys = Left(sAddys, Len(sAddys) - 1)
On Error GoTo 0
If sAddys = vbNullString Then GoTo SkipWs
'//Put each seperate range into an array.
If InStr(1, sAddys, ",") = 0 Then
ReDim arrAddys(0 To 0)
arrAddys(0) = "'" & ws.Name & "'!" & sAddys
Else
arrAddys = Split(sAddys, ",")
For i = LBound(arrAddys) To UBound(arrAddys)
arrAddys(i) = "'" & ws.Name & "'!" & arrAddys(i)
Next i
End If
'//Place region that range sits in into sRegion (if not already in there).
For i = LBound(arrAddys) To UBound(arrAddys)
If InStr(1, sRegion, ws.Range(arrAddys(i)).CurrentRegion.Address(0, 0)) = 0 Then
sRegion = sRegion & ws.Range(arrAddys(i)).CurrentRegion.Address(0, 0) & "," '*** no sheet
sCheck = Right(arrAddys(i), Len(arrAddys(i)) - InStr(1, arrAddys(i), "!"))
ReDim Preserve aRegions(0 To j)
aRegions(j) = Left(arrAddys(i), InStr(1, arrAddys(i), "!") - 1) & "!" & ws.Range(sCheck).CurrentRegion.Address(0, 0)
j = j + 1
End If
Next i
SkipWs:
Next ws
On Error GoTo ErrHandle
FindRegionsInWorkbook = aRegions
Exit Function
ErrHandle:
'things you might want done if no lists were found...
End Function
How do I find the number of used columns in an Excel sheet using VBA?
Dim lastRow As Long
lastRow = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
MsgBox lastRow
Using the above VBA I’m able to find the number of rows. But how do I find the number of columns in my given excel file?
asked Aug 1, 2011 at 10:48
2
Your example code gets the row number of the last non-blank cell in the current column, and can be rewritten as follows:
Dim lastRow As Long
lastRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
MsgBox lastRow
It is then easy to see that the equivalent code to get the column number of the last non-blank cell in the current row is:
Dim lastColumn As Long
lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox lastColumn
This may also be of use to you:
With Sheet1.UsedRange
MsgBox .Rows.Count & " rows and " & .Columns.Count & " columns"
End With
but be aware that if column A and/or row 1 are blank, then this will not yield the same result as the other examples above. For more, read up on the UsedRange
property.
answered Aug 1, 2011 at 11:42
2
Jean-François Corbett’s answer is perfect. To be exhaustive I would just like to add that with some restrictons you could also use UsedRange.Columns.Count
or UsedRange.Rows.Count
.
The problem is that UsedRange is not always updated when deleting rows/columns (at least until you reopen the workbook).
answered Aug 1, 2011 at 11:51
iDevlopiDevlop
24.6k11 gold badges89 silver badges147 bronze badges
1
It’s possible you forgot a sheet1
each time somewhere before the columns.count
, or it will count the activesheet
columns and not the sheet1
‘s.
Also, shouldn’t it be xltoleft instead of xltoright? (Ok it is very late here, but I think I know my right from left) I checked it, you must write xltoleft.
lastColumn = Sheet1.Cells(1, sheet1.Columns.Count).End(xlToleft).Column
seaotternerd
6,2782 gold badges45 silver badges58 bronze badges
answered Dec 20, 2013 at 1:58
Result is shown in the following code as column number (8,9 etc.):
Dim lastColumn As Long
lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox lastColumn
Result is shown in the following code as letter (H,I etc.):
Dim lastColumn As Long
lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox Split(Sheet1.Cells(1, lastColumn).Address, "$")(1)
answered Oct 10, 2016 at 20:27
kadrleynkadrleyn
3341 silver badge5 bronze badges
- Count Columns in VBA
- Count Column in Range in VBA
- Use the
Range().End
Method in VBA - Use the
Cells.Find()
Method in VBA
This article will discuss two ways to easily count columns with data using VBA in Excel.
Count Columns in VBA
When we have a small data table with a few columns, we can easily count them, but it’s quite tough for a large data table to count all the columns without any error. Besides that, some columns may contain data, whereas some columns may be completely blank.
Thus counting all the columns with data in case of a large data table is quite difficult. Now, let’s create a sheet with some sample data to work with.
We can see the three columns in the following data table. To control the number of used columns in a single Excel worksheet, We will use VBA codes.
First, we open the VBA editor by pressing the ALT + F11 key. After that, create a new module from Insert > Module
.
Then, create a new sub, usedColumns()
. Inside our new sub, we will use a with
loop to get the used range using the method UsedRange
.
After that, we use the count method of columns
to output the number of used columns.
Example Code:
# VBA
Sub usedColumns()
With Sheet1.UsedRange
MsgBox "The Used Columns are: "& .Columns.Count
End With
End Sub
Save the macro and run it by pressing F5 or clicking on the run. The Macro
dialog box will appear as shown below.
Output:
Count Column in Range in VBA
The following VBA code counts all the columns with data in a given range.
Let’s create a new sub ColumnsInRange()
. Inside this sub, we will use the range function to select and count the number of columns in that range.
Example Code:
# VBA
Sub ColumnsInRange()
Dim newRange As Worksheet
Set newRange = Worksheets("Sheet1")
MsgBox "The Used Columns are: " & newRange.Range("A15:D15").Columns.Count
End Sub
Output:
Use the Range().End
Method in VBA
We can use the Range().End
method to get the last column used in that range.
Create a new sub, findLastColumn()
, and inside that sub, we will use the End
method of range to find the last column used towards the right side of the sheet.
# VBA
Sub findLastColumn()
Dim newRange As Integer
newRange = Range("A2").End(xlToRight).Column
MsgBox newRange
End Sub
Output:
We get the last column number in a pop-up dialog box, as in the picture shown above.
Use the Cells.Find()
Method in VBA
We can also use the Range.Find
method to get the last used column from the sheet using the VBA code.
Check the following code. In the LastColumnByFind()
sub, we use the Cells.Find()
method to find the last used column.
Example Code:
# VBA
Sub LastColumnByFind()
Dim newRange As Long
newRange = Cells.Find(What:="*", _
After:=Range("A1"), _
LookAt:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Column
MsgBox "Last Used Column Number by Find Method: " & newRange
End Sub
Output:
Содержание
- Свойство Range.Columns (Excel)
- Синтаксис
- Замечания
- Пример
- Поддержка и обратная связь
- VBA Excel. Методы Count, CountA и CountBlank
- Метод WorksheetFunction.Count
- Определение
- Синтаксис
- Параметры
- Примечания
- Метод WorksheetFunction.CountA
- Определение
- Синтаксис
- Параметры
- Примечания
- Метод WorksheetFunction.CountBlank
- Определение
- Синтаксис
- Параметры
- Примечания
- Примеры
- Как посчитать количество столбцов excel vba
Свойство Range.Columns (Excel)
Возвращает объект Range , представляющий столбцы в указанном диапазоне.
Синтаксис
expression. Столбцы
выражение: переменная, представляющая объект Range.
Замечания
Чтобы вернуть один столбец, используйте свойство Item или аналогично включите индекс в круглые скобки. Например, и Selection.Columns(1) возвращают Selection.Columns.Item(1) первый столбец выделенного фрагмента.
При применении к объекту Range , который является выделенным с несколькими областями, это свойство возвращает столбцы только из первой области диапазона. Например, если объект Range имеет две области — A1:B2 и C3:D4, возвращает Selection.Columns.Count значение 2, а не 4. Чтобы использовать это свойство в диапазоне, который может содержать выбор из нескольких областей, проверьте Areas.Count , содержит ли диапазон несколько областей. Если это так, выполните цикл по каждой области в диапазоне.
Возвращаемый диапазон может находиться за пределами указанного диапазона. Например, Range(«A1:B2»).Columns(5).Select возвращает ячейки E1:E2.
Если буква используется в качестве индекса, она эквивалентна числу. Например, Range(«B1:C10»).Columns(«B»).Select возвращает ячейки C1:C10, а не ячейки B1:B10. В примере «B» эквивалентно 2.
Использование свойства Columns без квалификатора объекта эквивалентно использованию ActiveSheet.Columns . Дополнительные сведения см. в свойстве Worksheet.Columns .
Пример
В этом примере для каждой ячейки в столбце один в диапазоне с именем myRange задается значение 0 (ноль).
В этом примере отображается количество столбцов в выделенном фрагменте на листе Sheet1. Если выбрано несколько областей, в примере выполняется цикл по каждой области.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
VBA Excel. Методы Count, CountA и CountBlank
Подсчет количества ячеек в диапазоне в зависимости от их содержимого методами Count, CountA и CountBlank объекта WorksheetFunction из кода VBA Excel.
Метод WorksheetFunction.Count
Определение
Определение метода Count объекта WorksheetFunction в VBA Excel:
Синтаксис
Синтаксис метода Count объекта WorksheetFunction:
Параметры
Параметры метода Count объекта WorksheetFunction:
Параметр | Описание |
---|---|
Arg1-Arg30 | От 1 до 30 аргументов, которые могут содержать различные типы данных или ссылаться на них. |
Примечания
- Метод WorksheetFunction.Count позволяет получить количество числовых значений в диапазоне ячеек или в массиве.
- При подсчете учитываются аргументы, которые являются числами, датами или текстовым представлением чисел.
- Логические значения учитываются при подсчете только в том случае, если они введены непосредственно в список аргументов.
Метод WorksheetFunction.CountA
Определение
Определение метода CountA объекта WorksheetFunction в VBA Excel:
Синтаксис
Синтаксис метода CountA объекта WorksheetFunction:
Параметры
Параметры метода CountA объекта WorksheetFunction:
Параметр | Описание |
---|---|
Arg1-Arg30 | От 1 до 30 аргументов, которые могут содержать различные типы данных или ссылаться на них. |
Примечания
- Метод WorksheetFunction.CountA позволяет получить количество непустых ячеек в заданном диапазоне.
- Непустыми являются ячейки, которые содержат любые данные, включая значения ошибок и пустые строки ( «» ).
- Тесты показывают, что метод WorksheetFunction.CountA в массиве, созданном путем присвоения ему значений диапазона, содержащего пустые ячейки, все равно считает все элементы массива, как содержащие значения.
Метод WorksheetFunction.CountBlank
Определение
Определение метода CountBlank объекта WorksheetFunction в VBA Excel:
Синтаксис
Синтаксис метода CountBlank объекта WorksheetFunction:
Параметры
Параметры метода CountBlank объекта WorksheetFunction:
Параметр | Описание |
---|---|
Arg1 | Диапазон, в котором необходимо подсчитать количество пустых ячеек. |
Примечания
- Метод WorksheetFunction.CountBlank позволяет получить количество пустых ячеек в заданном диапазоне.
- Пустыми являются ячейки, которые не содержат никаких данных.
- Также подсчитываются, как пустые, ячейки с формулами, которые возвращают пустые строки ( «» ).
- Ячейки с нулевыми значениями в подсчете не участвуют.
Примеры
Таблица для строк кода VBA Excel со ссылками на диапазон «A1:C5» , а также с массивом его значений в качестве аргументов:
Источник
Как посчитать количество столбцов excel vba
Добрый день ! Сразу скажу что я только начинаю изучать VBA и сам понимаю что вопрос детский , но ответа так и не смог найти.
Мне нужно узнать количество записей в колонке (насколько я понимаю это Rows в Columns)
В колонке чего? Какой контрол?
Ответить
Номер ответа: 1 Автор ответа: Padre Вопросов: 25 |
Web-сайт: localhost Профиль | | #1 |
Добавлено: 19.10.03 04:20 |
эээ . насколько я понимаю это WorkSheet в Экселе
Ответить
Номер ответа: 2 Автор ответа: Spin Вопросов: 4 |
Профиль | | #2 | Добавлено: 19.10.03 13:24 |
Вопрос еще такой
Ни у кого нет кода как из Ворда вызывать Ексель
то есть я знаю что надо делать
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Но потом начинается путанница . Не совсем ясно как связать xlBook с WorkBook и xlSheet с WorkSheet . обычно в примерах все заново создают.
Ответить
Номер ответа: 3 Автор ответа: Spin Вопросов: 4 |
Профиль | | #3 | Добавлено: 19.10.03 13:28 |
по поводу количества записей в колонке что-то типа этого. проверяется i количество ячеек. может есть какой-нибудь более изящный способ, но мне он в голову не приходит.
это всё работает только если записи идут без пустых ячеек в середине
Public Sub checkColumn()
Dim i As Integer
Dim n As Integer
For i = 1 To 100
If ActiveSheet.Cells(n, 1) = vbNullString Then
ActiveSheet.Cells(n, 2) = «Всего записей: » & (n — 1)
Ответить
Номер ответа: 4 Автор ответа: Padre Вопросов: 25 |
Web-сайт: localhost Профиль | | #4 |
Добавлено: 19.10.03 15:15 |
Private sub ExcelByWord
dim x1 as excel.application
Ответить
Номер ответа: 5 Автор ответа: Padre Вопросов: 25 |
Web-сайт: localhost Профиль | | #5 |
Добавлено: 19.10.03 15:23 |
Начинает проясняться понемногу.
Вот мне бы узнать количество использованных ячеек , ведь пользователи если захотят могут и пустую строку поставить.
Может есть красивый способ ? Property или метод специальный.
Ответить
Номер ответа: 6 Автор ответа: Spin Вопросов: 4 |
Профиль | | #6 | Добавлено: 19.10.03 18:23 |
Да всё точно также. Берёшь диапазон проверяемых ячеек, ставишь счётчик непустых ячеек и вперёд.
Public Sub checkColumn()
Dim i As Integer
Dim n As Integer
Dim count As Integer
For i = 1 To 100
If ActiveSheet.Cells(n, 1) <> vbNullString Then
count = count + 1
ActiveSheet.Cells(1, 2) = «Всего записей: » & count
Ответить
Номер ответа: 7 Автор ответа: Padre Вопросов: 25 |
Web-сайт: localhost Профиль | | #7 |
Добавлено: 19.10.03 18:53 |
Sub LastCell_1() ‘Определение последних строк, столбцов
‘Sheets(«лист1») — имя листа [можно порядковый номерSheets(n)]
‘с которым работаем (если с активным, то можно не указывать)
‘Cells(2, 4)- любая ячейка в заголовке таблицы,
‘где первая цифра — номер строки, а вторая — номер столбца
‘CurrentRegion — текущая область, т.е. интервал ячеек
‘ограниченный пустыми столбцами и пустыми строками
‘проверим, с чем работаем (выделим итервал), потом удалите
Sheets(«лист1»).Cells(2, 4).CurrentRegion.Select
‘адрес интервала ячеек
adr = Sheets(«лист1»).Cells(2, 4).CurrentRegion.Address
‘начальная строка интервала ячеек
RowBegin = Sheets(«лист1»).Cells(2, 4).CurrentRegion.Row
‘количество строк в интервале ячеек
RowsCount = Sheets(«лист1»).Cells(2, 4).CurrentRegion.Rows.Count
‘начальный столбец интервала ячеек
ColumnBegin = Sheets(«лист1»).Cells(2, 4).CurrentRegion.Column
‘количество столбцов в интервала ячеек
ColumnsCount = Sheets(«лист1»).Cells(2, 4).CurrentRegion.Columns.Count
‘массив, в котором хранятся значения ячеек итевала
ArrayValueCells = Sheets(«лист1»).Cells(2, 4).CurrentRegion
‘значение элемента массива
ValueCells = ArrayValueCells(строка, столбец)
‘строка- номер стоки в массиве (не обязательно совпадает с номером
‘строки рабочего листа), столбец — аналогично
‘объектная переменная, в которой содержится абсолютно все
Set Rng = Sheets(«лист1»).Cells(2, 4).CurrentRegion
‘ValueCells и Rng лучше просмотреть в окне локальных переменных
‘ViewLocals Window пошаговом режиме (клавиша F8)
End Sub
Sub LastRow_1() ‘последняя заполненная строка
With Sheets(«лист1»).Cells(2, 4).CurrentRegion
LastRow = .Row + .Rows.Count — 1
End With
Ответить
Номер ответа: 8 Автор ответа: valentinvb Вопросов: 0 |
Профиль | | #8 | Добавлено: 26.10.03 12:53 |
Может я не совсем правильно поняла, вот только сегодня сталкивалась с подобной проблемой.
Источник
Adblock
detector
Номер ответа: 9 Автор ответа: A n t o n i n a Вопросов: 6 |
Профиль | | #9 | Добавлено: 19.11.03 18:40 |
Как узнать количество используемых столбцов на листе Excel с помощью VBA?
Dim lastRow As Long
lastRow = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
MsgBox lastRow
Используя приведенный выше VBA, я могу найти количество строк. Но как мне узнать количество столбцов в моем файле Excel?
5 ответов
Лучший ответ
Ваш примерный код получает номер строки последней непустой ячейки в текущем столбце и может быть переписан следующим образом:
Dim lastRow As Long
lastRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
MsgBox lastRow
Тогда легко увидеть, что эквивалентный код для получения номера столбца последней непустой ячейки в текущей строке:
Dim lastColumn As Long
lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox lastColumn
Это также может быть полезно для вас:
With Sheet1.UsedRange
MsgBox .Rows.Count & " rows and " & .Columns.Count & " columns"
End With
Но имейте в виду, что если столбец A и / или строка 1 пусты, это не даст такого же результата, как в других примерах выше. Чтобы узнать больше, прочтите о свойстве UsedRange
.
47
Jean-François Corbett
1 Авг 2011 в 16:36
Ответ Жана-Франсуа Корбетта идеален. Чтобы быть исчерпывающим, я просто хотел бы добавить, что с некоторыми ограничениями вы также можете использовать UsedRange.Columns.Count
или UsedRange.Rows.Count
.
Проблема в том, что UsedRange не всегда обновляется при удалении строк / столбцов (по крайней мере, пока вы снова не откроете книгу).
8
Patrick Honorez
1 Авг 2011 в 15:51
Возможно, вы забыли sheet1
каждый раз где-то перед columns.count
, или он будет считать столбцы activesheet
, а не sheet1
.
Кроме того, не следует ли использовать xltoleft вместо xltoright? (Хорошо, здесь уже очень поздно, но я думаю, что знаю, что справа налево). Я проверил, вы должны написать xltoleft.
lastColumn = Sheet1.Cells(1, sheet1.Columns.Count).End(xlToleft).Column
2
seaotternerd
20 Дек 2013 в 06:40
Результат показан в следующем коде как номер столбца (8,9 и т. Д.):
Dim lastColumn As Long
lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox lastColumn
Результат показан в следующем коде как буква (H, I и т. Д.):
Dim lastColumn As Long
lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox Split(Sheet1.Cells(1, lastColumn).Address, "$")(1)
0
Martijn Pieters
7 Апр 2017 в 12:08
Как определить количество строк и колонок диапазона?
Сообщений: 5
• Страница 1 из 1
- wap
- Начинающий
- Сообщения: 6
- Зарегистрирован: 13.08.2007 (Пн) 14:14
Как определить количество строк и колонок диапазона?
wap » 17.08.2007 (Пт) 15:40
Как в VBA определить число строк и число колонок в выделенном диапазоне ячеек?
Заодно, подскажите пожалуйста, как в массив данные из этих ячеек загнать, а то вдруг еще проблемы появятся, придется топик заводить
- Genyaa
- Обычный пользователь
- Сообщения: 59
- Зарегистрирован: 17.10.2006 (Вт) 13:46
-
- Сайт
Genyaa » 17.08.2007 (Пт) 16:37
Всякое решение плодит новые проблемы.
- dormouse
- Продвинутый пользователь
- Сообщения: 140
- Зарегистрирован: 10.01.2007 (Ср) 21:58
- Откуда: Волжский
-
- ICQ
dormouse » 17.08.2007 (Пт) 17:19
Dim x As Byte, y As Byte
Dim i As Byte, j As Byte, a As Byte, b As Byte
Dim ar() As Integer
y = Selection.Rows.Count
x = Selection.Columns.Count
ReDim ar(x — 1, y — 1) As Integer
For i = Selection.Row To Selection.Row + y — 1
For j = Selection.Column To Selection.Column + x — 1
ar(a, b) = ActiveSheet.Cells(i, j).Value
a = a + 1
Next j
a = 0
b = b + 1
Next i
Stop
VBA, MSA97
- KL
- Microsoft MVP
- Сообщения: 483
- Зарегистрирован: 30.10.2005 (Вс) 0:31
- Откуда: Madrid
KL » 17.08.2007 (Пт) 17:40
dormouse писал(а):
- Код: Выделить всё
Dim x As Byte, y As Byte
Dim i As Byte, j As Byte, a As Byte, b As Byte
Dim ar() As Integer
y = Selection.Rows.Count
x = Selection.Columns.Count
ReDim ar(x - 1, y - 1) As Integer
For i = Selection.Row To Selection.Row + y - 1
For j = Selection.Column To Selection.Column + x - 1
ar(a, b) = ActiveSheet.Cells(i, j).Value
a = a + 1
Next j
a = 0
b = b + 1
Next i
Stop
Ага, или так:
- Код: Выделить всё
Dim ar As Variant
ar=Selection.Value
Привет,
KL
- dormouse
- Продвинутый пользователь
- Сообщения: 140
- Зарегистрирован: 10.01.2007 (Ср) 21:58
- Откуда: Волжский
-
- ICQ
dormouse » 17.08.2007 (Пт) 18:44
VBA, MSA97
Сообщений: 5
• Страница 1 из 1
Вернуться в VBA
Кто сейчас на конференции
Сейчас этот форум просматривают: Yandex-бот и гости: 2