Vba excel видимые строки

Студворк — интернет-сервис помощи студентам

Добрый день! Уважаемые форумчане, Нужна обработка только видимых строк значений в таблице. Вот таким циклом обрабатываю, табличку: —

Visual Basic
1
2
3
4
   For Each aCell In Selection.SpecialCells(xlCellTypeVisible)
         Z = aCell.Row
         ' действие
   Next

Выделяю несколько строк, или столбец ячеек и всё работает, на первый взгляд нормально. Но стоит выделить ОДНУ строку (ячейку)…
Z — номер строки активной (выбранной) ячейки, если выделена только одна ячейка, почему-то определяется как — 1. Т.е. Z = 1, а это не верно. Ведь я выделяю не первую строку, а например 15-ю. Можно ли справится с таким вероломством кода?

 

eonka

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

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

#1

20.11.2022 08:35:13

Добрый день,
Подскажите, в какое место правильно вставить SpecialCells(xlCellTypeVisible) чтобы макрос обрабатывал только видимые строки, игнорируя скрытые.
Вот маленький кусочек кода и источник и принимающий данные файлы. В исходнике скрыла столбцы.

Код
Sub Test()
    Dim A, Sh, i%, LastRow&
    A = Workbooks("start.xlsx").Worksheets(1).[A1].CurrentRegion
    For Each Sh In Workbooks("finish.xlsx").Worksheets
    Next Sh
    For i = 3 To UBound(A)
        A(i, 1) = Format$(0, A(i, 1))
        With Workbooks("finish.xlsx")
                If Not SheetExists(A(i, 1), Workbooks("finish.xlsx")) Then
                    With .Worksheets.Add(After:=.Worksheets(.Worksheets.Count)): .Name = A(i, 1):
                    End With
                End If
                With .Worksheets(A(i, 1))
                LastRow = .Cells(.Rows.Count, 1).SpecialCells(xlCellTypeVisible).End(xlUp).Row + 1                
                If IsEmpty(.[A1]) Then LastRow = 1
                        .Cells(LastRow, 1) = A(i, 2)
                        .Cells(LastRow, 2) = A(i, 3)
                        .Cells(LastRow, 3) = A(i, 4)
            End With
        End With
    Next i
  
End Sub
Function SheetExists(SheetName, Optional wb As Workbook) As Boolean
    If wb Is Nothing Then Set wb = ActiveWorkbook
    On Local Error Resume Next: SheetExists = wb.Worksheets(SheetName).Name = SheetName: Err.Clear
End Function

Прикрепленные файлы

  • Finish.xlsx (14.13 КБ)
  • start.xlsx (9.86 КБ)

Изменено: eonka20.11.2022 08:38:24

 

Ігор Гончаренко

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

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

#2

20.11.2022 10:36:51

Цитата
чтобы макрос обрабатывал только видимые строки

похоже SpecialCells(xlCellTypeVisible) там вообще не нужно

Код
For Each rw in ActiveSheet.UsedRange.Rows
  if not rw.Hidden then 
    ' это строка видна
  End if
Next

Изменено: Ігор Гончаренко20.11.2022 10:44:48

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

eonka

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

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

Так и не смогла прикрутить эту конструкцию к коду: выходило, что либо копирует только все скрытые строки, то копирует и видимые и скрытые. В итоге сделала свой макрос через костыль с копированием диапазона  без скрытых ячеек в другую книгу.
Но все-таки, ради общего развития, как правильно было вставить эту конструкцию в код?

И еще, чтобы новую тему не создавать: почему если я меняю Workbooks(«start.xlsx») на thisworkbook, то почему возникает type mismatch? Разве, по сути, происходит не то же самое, только в первом случае я указываю имя файла, а во втором книгу, из которой запускается макрос?

 

МатросНаЗебре

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

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

#4

21.11.2022 14:49:28

Код
Sub Test()
    Dim rA As Range
    Dim cl As Range
    Dim A, Sh, i%, LastRow&
    'A = Workbooks("start.xlsx").Worksheets(1).[A1].CurrentRegion
    'For Each Sh In Workbooks("finish.xlsx").Worksheets
        For Each cl In Workbooks("start.xlsx").Worksheets(1).[A1].CurrentRegion.Columns(1).Cells
        'For i = 3 To UBound(A)
            i = 1
            A = cl.Resize(1, 4) 'Сводим задачу к предыдущей
            If cl.Row >= 3 Then
                If Not cl.EntireRow.Hidden Then
                    A(i, 1) = Format$(0, A(i, 1))
                    With Workbooks("finish.xlsx")
                        If Not SheetExists(A(i, 1), Workbooks("finish.xlsx")) Then
                            With .Worksheets.Add(After:=.Worksheets(.Worksheets.Count)): .Name = A(i, 1): End With
                        End If
                        With .Worksheets(A(i, 1))
                            LastRow = .Cells(.Rows.Count, 1).SpecialCells(xlCellTypeVisible).End(xlUp).Row + 1
                            If IsEmpty(.[A1]) Then LastRow = 1
                            .Cells(LastRow, 1) = A(i, 2)
                            .Cells(LastRow, 2) = A(i, 3)
                            .Cells(LastRow, 3) = A(i, 4)
                        End With
                    End With
                End If
            End If
        Next
    'Next Sh
End Sub
Function SheetExists(SheetName, Optional wb As Workbook) As Boolean
    If wb Is Nothing Then Set wb = ActiveWorkbook
    On Local Error Resume Next: SheetExists = wb.Worksheets(SheetName).Name = SheetName: Err.Clear
End Function
 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#5

21.11.2022 15:00:37

Цитата
МатросНаЗебре: On Local Error Resume Next

это что за зверь такой?  :D

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

МатросНаЗебре

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

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

#6

21.11.2022 15:08:13

Цитата
написал:
это что за зверь такой?

Только сейчас заметил, что обитает в коде )

 

eonka

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

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

#7

21.11.2022 16:05:50

Спасибо огромное. Вот теперь разобралась. И с колонками скрытыми что делать тоже дошло.

А Local, я так понимаю, там не нужен)
Я видела, что resume в примерах везде без него, но убирать не рискнула т.к. он не мешал.

Изменено: eonka21.11.2022 16:07:28

Содержание

  1. Свойство Application.Rows (Excel)
  2. Синтаксис
  3. Примечания
  4. Пример
  5. Поддержка и обратная связь
  6. Vba excel количество видимых строк
  7. Как посчитать количество видимых строк в Excel
  8. В отфильтрованном списке
  9. Только с критериями
  10. Vba excel количество видимых строк
  11. Подсчитать количество видимых строк в отфильтрованном списке в Excel
  12. Как подсчитать количество видимых строк в отфильтрованном списке в Excel?
  13. Связанные функции
  14. Родственные формулы
  15. Kutools for Excel — поможет вам выделиться из толпы
  16. Как получить количество строк в EXCEL VBA
  17. 4 ответа

Свойство 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 и обратная связь.

Источник

Vba excel количество видимых строк

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Private Function GetAddresses() As Address()
Dim addrs() As Address, paralast As Integer
Dim Y As Range, firstCell As Range
ReDim addrs(0)
paralast = -1
With ActiveSheet
Set Y = .Range(«A1:A» & .Cells(.Rows.Count, «A»).End(xlUp).Row)
End With
For Each firstCell In Y.Cells.SpecialCells(xlCellTypeVisible)
With firstCell
paralast = paralast + 1
ReDim Preserve addrs(paralast)
addrs(paralast).Street = .Offset(i, 0).Value
addrs(paralast).Building = .Offset(i, 1).Value
addrs(paralast).Comments = .Offset(i, 2).Value
End With

Next
GetAddresses = addrs
End Function

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Private Function GetAddresses() As Address()
Dim addrs() As Address, paralast As Integer
Dim Y As Range, firstCell As Range
ReDim addrs(0)
paralast = -1
With ActiveSheet
Set Y = .Range(«A1:A» & .Cells(.Rows.Count, «A»).End(xlUp).Row)
End With
For Each firstCell In Y.Cells.SpecialCells(xlCellTypeVisible)
With firstCell
paralast = paralast + 1
ReDim Preserve addrs(paralast)
addrs(paralast).Street = .Offset(i, 0).Value
addrs(paralast).Building = .Offset(i, 1).Value
addrs(paralast).Comments = .Offset(i, 2).Value
End With

Next
GetAddresses = addrs
End Function

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Private Function GetAddresses() As Address()
Dim addrs() As Address, paralast As Integer
Dim Y As Range, firstCell As Range
ReDim addrs(0)
paralast = -1
With ActiveSheet
Set Y = .Range(«A1:A» & .Cells(.Rows.Count, «A»).End(xlUp).Row)
End With
For Each firstCell In Y.Cells.SpecialCells(xlCellTypeVisible)
With firstCell
paralast = paralast + 1
ReDim Preserve addrs(paralast)
addrs(paralast).Street = .Offset(i, 0).Value
addrs(paralast).Building = .Offset(i, 1).Value
addrs(paralast).Comments = .Offset(i, 2).Value
End With

Next
GetAddresses = addrs
End Function

Источник

Как посчитать количество видимых строк в Excel

В отфильтрованном списке

Если вы хотите подсчитать количество видимых элементов в отфильтрованном списке, вы можете использовать функцию ПРОМЕЖУТОЧНЫЕ.ИТОГИ, которая автоматически игнорирует строки, которые скрыты с помощью фильтра.

Функция ПРОМЕЖУТОЧНЫЕ.ИТОГИ может выполнять вычисления, как СЧЁТ, СУММ, МАКС, МИН, и многие другие.

Что делает ПРОМЕЖУТОЧНЫЕ.ИТОГИ: особенно интересным и полезным является то, что она автоматически игнорирует элементы, которые не видны в отфильтрованном списке или таблице. Это делает ее идеальной для показа того, сколько элементов видно в списке, промежуточных итогов видимых строк и т.д.

Следуя примеру, чтобы подсчитать количество не пустых строк, видимых, когда фильтр активен, используйте:

Если вы скрываете строки вручную (т.е. правой кнопкой мыши, Скрыть), а не с помощью автоматического фильтра используйте эту версию вместо той:

Только с критериями

=СУММПРОИЗВ((диапазон=критерий)*( ПРОМЕЖУТОЧНЫЕ.ИТОГИ (3; СМЕЩ (диапазон; ЧСТРОК;0;1))))

Для подсчета видимых строк только с критериями, вы можете использовать довольно сложную формулу, основанную на СУММПРОИЗВ, ПРОМЕЖУТОЧНЫЕ.ИТОГИ и СМЕЩ.

Функция ПРОМЕЖУТОЧНЫЕ.ИТОГИ может легко генерировать суммы и счетчики для скрытых и не скрытых строк. Тем не менее, она не в состоянии справиться с критериями (т.е. как СЧЁТЕСЛИ или СУММЕСЛИ).

Решение состоит в том, чтобы использовать СУММПРОИЗВ, применив с функцией ПРОМЕЖУТОЧНЫЕ.ИТОГИ (через СМЕЩ) и критерии. В показанном примере формула в С12:

=СУММПРОИЗВ ((C5:C8 = С10) * (ПРОМЕЖУТОЧНЫЕ.ИТОГИ (103;СМЕЩ(C5;СТРОКА(C5:C8) — МИН(СТРОКА(C5:C8));0))))

Суть этой формулы вычисление массива внутри СУММПРОИЗВ. Первый массив применяет критерии, а второй массив обрабатывает «проблему видимости».

Критерии применяется с частью формулы:

Который генерирует массив следующим образом:

Где ИСТИНА означает «отвечает критериям». Обратите внимание, что поскольку мы используем умножение (*) внутри первого (и только) массива, значения ИСТИНА/ЛОЖЬ будут автоматически преобразованы:

Для учета видимости применяется фильтр с использованием ПРОМЕЖУТОЧНЫЕ.ИТОГИ.

ПРОМЕЖУТОЧНЫЕ.ИТОГИ может исключить скрытые строки в различных вычислениях, поэтому мы можем использовать ее в этом случае, создав «фильтр», чтобы исключить скрытые строки внутри СУММПРОИЗВ. Проблема, однако, в том, что ПРОМЕЖУТОЧНЫЕ.ИТОГИ рассчитывает единственное число, в то время как нам нужен массив, чтобы использовать его успешно внутри СУММПРОИЗВ.

Хитрость заключается в том, чтобы использовать СМЕЩ, подающую ПРОМЕЖУТОЧНЫЕ.ИТОГИ одну ссылку на строку, так что смещение будет рассчитывать один результат для каждой строки.

Конечно, для этого требуется еще один трюк, который должен дать СМЕЩ массив, содержащий один номер для каждой строки, начиная с нуля. Мы делаем это с помощью:

Что будет генерировать массив вроде этого:

Таким образом, второй массив, который обрабатывает видимость с помощью ПРОМЕЖУТОЧНЫЕ.ИТОГИ, генерируется следующим образом:

= ПРОМЕЖУТОЧНЫЕ.ИТОГИ(103;СМЕЩ (C5;СТРОКА(C5: C8) — МИН(СТРОКА(C5: C8)); 0))

Источник

Vba excel количество видимых строк

Подсчитать количество видимых строк в отфильтрованном списке в Excel

Чтобы подсчитать количество видимых строк в отфильтрованном списке в Excel, вы можете применить функцию ПРОМЕЖУТОЧНЫЙ ИТОГ, чтобы легко это сделать.

Как подсчитать количество видимых строк в отфильтрованном списке в Excel?

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

Общая формула

=SUBTOTAL(3,range)

аргументы

Как пользоваться этой формулой?

1. Выберите пустую ячейку для вывода результата.

2. Введите в нее приведенную ниже формулу и нажмите Enter .

=SUBTOTAL(3,B3:B15)

Ноты:

=SUBTOTAL(3,B3:B15)

=SUBTOTAL(103,B3:B15)

Как работает эта формула?

=SUBTOTAL(3,B3:B15)

Функция ПРОМЕЖУТОЧНЫЙ ИТОГ полезна для игнорирования скрытых элементов в отфильтрованном списке или таблице. Его можно использовать для выполнения различных расчетов, таких как среднее значение, количество, максимум и т. Д.

Связанные функции

ПРОМЕЖУТОЧНЫЙ ИТОГ в Excel
Функция Excel ПРОМЕЖУТОЧНЫЙ ИТОГ возвращает промежуточный итог в списке или базе данных.

Родственные формулы

Подсчет уникальных значений в диапазоне
В этом руководстве объясняется, как подсчитывать только уникальные значения среди дубликатов в списке в Excel с указанными формулами.

Подсчет уникальных значений с критериями
Это пошаговое руководство помогает подсчитывать только уникальные значения на основе заданных критериев в другом столбце.

Подсчет видимых строк с критериями
В этом руководстве подробно описаны шаги, которые помогут подсчитать видимые строки по критериям.

Используйте СЧЁТЕСЛИ для несмежного диапазона
В этом пошаговом руководстве показано, как использовать функцию countif для несмежного диапазона в Excel.

Kutools for Excel — поможет вам выделиться из толпы

Хотите быстро и качественно выполнять свою повседневную работу? Kutools for Excel предлагает мощные расширенные функции 300 (объединение книг, суммирование по цвету, разделение содержимого ячеек, преобразование даты и т. д.) и экономит для вас 80% времени.

  • Разработан для 1500 рабочих сценариев, помогает решить 80% проблем с Excel.
  • Уменьшите количество нажатий на клавиатуру и мышь каждый день, избавьтесь от усталости глаз и рук.
  • Станьте экспертом по Excel за 3 минуты. Больше не нужно запоминать какие-либо болезненные формулы и коды VBA.
  • 30-дневная неограниченная бесплатная пробная версия. 60-дневная гарантия возврата денег. Бесплатное обновление и поддержка 2 года.

Источник

Как получить количество строк в EXCEL VBA

Разрабатываю дашборд в excel. И я ищу для расчета количества строк. (Сколько записей присутствует) ..

Поскольку есть несколько пустых ячеек, я решил пойти снизу вверх. Я использую следующие

После этого выполнения активная ячейка находится в A113, что означает, что количество строк равно 113.

У меня вопрос, как получить этот номер 113 из активной ячейки?

4 ответа

Вы можете использовать это:

lastrow будет содержать номер последней пустой строки в столбце A , в вашем случае 113

Вот что я обычно использую для этого:

Это вернет количество непустых ячеек в столбце «A», которое, я думаю, вам нужно. Надеюсь это поможет.

Лучший способ получить количество строк / записей (в большинстве случаев) — использовать .UsedRange.Rows.Count . Вы можете присвоить возвращаемое значение переменной следующим образом:

Если вы используете функцию, которая включает столбец (например, столбец A), как показано в других примерах, это даст вам только количество строк в этом столбце, которое может или не может быть тем, что вы собираетесь делать. Одно предостережение: если вы отформатировали строки под последней строкой со значением, он вернет этот номер строки.

Если есть небольшая вероятность, что последняя строка рабочего листа не пуста, вы должны добавить проверку IsEmpty() в решение @simoco. Следовательно; Ниже приведена функция, которая возвращает последнюю использованную строку и проверяет, пуста ли последняя строка рабочего листа:

Источник

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

Например, нас интересует массив, начиная со второй строки, шириной 5 столбцов.

Если все строки на листе — видимые, то все делается просто, одной строкой кода:

arr = Range(Range("a2"), Range("a" & Rows.Count).End(xlUp)).Resize(, 5).Value 

А если на листе включен автофильтр (некоторые строки скрыты), а нам надо получить в массиве данные только из видимых строк?

Тогда на помощь придет функция GetVisibleRowsArray:

arr = GetVisibleRowsArray(ActiveSheet, 2, 1, 5)

Код функции GetVisibleRowsArray:

Function GetVisibleRowsArray(ByRef sh As Worksheet, ByVal FirstRow&, _
                             Optional ByVal CheckColumn& = 1, Optional ByVal ColumnsCount& = 0) As Variant
    ' Функция возвращает двумерный массив с данными с листа sh
    ' В массив попадают все ВИДИМЫЕ строки, после строки номер FirstRow&,
    ' до последней строки, у которой в столбце CheckColumn& непустое значение.
    ' Ширину массива можно задать в параметре ColumnsCount&
    ' (если ширина массива не задана, она определяется автоматически)

    On Error Resume Next
    Dim ra As Range, ra2 As Range, ra3 As Range, ar As Range, rc&, ind&
    Set ra2 = sh.Range(sh.Cells(FirstRow&, CheckColumn&), sh.Cells(sh.Rows.Count, CheckColumn&).End(xlUp))
    If ra2.Row < FirstRow& Then Exit Function    ' нет ни одной видимой строки после строки FirstRow&

    If ColumnsCount& <= 0 Then ColumnsCount& = sh.UsedRange.Columns.Count
    Set ra3 = Intersect(sh.Range(FirstRow& & ":" & sh.Rows.Count), ra2.SpecialCells(xlCellTypeVisible)).EntireRow
    Set ra = Intersect(ra3, sh.Cells(1).Resize(, ColumnsCount&).EntireColumn)
 
    For Each ar In ra.Areas: rc& = rc& + ar.Rows.Count: Next    ' подсчитываем кол-во видимых строк
    ReDim arr(1 To rc&, 1 To ColumnsCount&)
 
    For Each ar In ra.Areas
        ararr = "": If ar.Columns.Count = 1 Then ararr = ar.Resize(, 2).Value Else ararr = ar.Value
        For i& = LBound(ararr) To UBound(ararr)
            ind& = ind& + 1
            For j& = 1 To ColumnsCount&: arr(ind&, j&) = ararr(i&, j&): Next j&
        Next i
    Next
 
    GetVisibleRowsArray = arr
End Function

The problem is that RowCount returns 1 instead of visible rows after filtering.

RowCount = Cells(Rows.Count, colIndex).End(xlUp).SpecialCells(xlCellTypeVisible).Row

Sub showEightmonth(ws, colName, colIndex)
Dim RowCount As Integer
    ws.Activate
    MsgBox ws.Name
    RowCount = Cells(Rows.Count, colIndex).End(xlUp).Row
    Set Rng = Range(colName & "1:" & colName & RowCount)

    If ws.AutoFilterMode = True Then
    ws.AutoFilter.ShowAllData
    End If

    Rng.Select
    Rng.NumberFormat = "mm/dd/yyyy hh:mm:ss"
    d = Format(DateAdd("m", -8, Date), "mm/dd/yyyy 07:00:00")
    Range(colName & "1").AutoFilter Field:=colIndex, Criteria1:="<" & d
    RowCount = Cells(Rows.Count, colIndex).End(xlUp).SpecialCells(xlCellTypeVisible).Row
    'Delete filtered row if RowCount > 1, as row 1 is the header row
    If RowCount > 1 Then
        delRow = colName & "2:" & colName & RowCount
        ActiveSheet.Range(delRow).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End If
    If ws.AutoFilterMode = True Then
    ws.AutoFilter.ShowAllData
    End If

End Sub

Community's user avatar

asked Jun 19, 2019 at 10:04

NordicFox's user avatar

To count the rows that are visible after applying a filter you would have to do this:

Sub countNonFiltered()

Dim sht As Worksheet
Dim colIndex As Long
Dim firstrow As Long
Dim RowCount As Long
Set sht = ThisWorkbook.Worksheets("worksheet name")
colIndex = 1    'let's assume you're interested in column A
firstrow = 2    'Let's assume your header is in row 1 and the data starts from row 2

With sht
    RowCount = .Range(.Cells(Rows.Count, 1).End(xlUp), .Cells(firstrow, colIndex)).SpecialCells(xlCellTypeVisible).Count
    Debug.Print RowCount
End With

End Sub

For demonstration purposes the code above prints the number of the visible rows in the immediate window.

Keep in mind that this:

Cells(Rows.Count, colIndex).End(xlUp)

is a range consisting of only one single cell. What you need instead is a range consisting of all the cells that belong to the rows that are still visible after applying the filter.

Also keep in mind that when you’re using variables that hold either row or column indexes, they should be declared as Long.

answered Jun 19, 2019 at 10:20

Stavros Jon's user avatar

Stavros JonStavros Jon

1,6852 gold badges6 silver badges17 bronze badges

0

Понравилась статья? Поделить с друзьями:
  • Vba excel видеокурс скачать торрент
  • Vba excel вставить скопированную ячейку
  • Vba excel вставить символ в строку
  • Vba excel вставить примечание
  • Vba excel вставить перенос строки