Поиск последней строки массива
Мурад
Дата: Пятница, 15.09.2023, 18:01 |
Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация:
18
±
Замечаний:
0% ±
Excel 2007
Всем добрый день! Подскажите, пожалуйста, что поправить в коде, чтобы правильно рассчитать количество строк в массиве? [vba]Код
Range("a2:b2", Range("a2:b2").End(xlDown)).Select With Selection For i = 1 To .Rows.Count
[/vba] Пример во вложении.
Всем добрый день! Подскажите, пожалуйста, что поправить в коде, чтобы правильно рассчитать количество строк в массиве? [vba]Код
Range("a2:b2", Range("a2:b2").End(xlDown)).Select With Selection For i = 1 To .Rows.Count
[/vba] Пример во вложении. Мурад
Ответить
Сообщение Всем добрый день! Подскажите, пожалуйста, что поправить в коде, чтобы правильно рассчитать количество строк в массиве? [vba]Код
Range("a2:b2", Range("a2:b2").End(xlDown)).Select With Selection For i = 1 To .Rows.Count
[/vba] Пример во вложении. Автор - Мурад Дата добавления - 15.09.2023 в 18:01
jun
Дата: Пятница, 15.09.2023, 18:53 |
Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 145
Репутация:
43
±
Замечаний:
0% ±
Мурад, приветствую! Можно, например так: [vba]Код
Sub find_last_row() Dim lr As Long, arr As Variant With ActiveSheet lr = .Cells(.Rows.Count, 2).End(xlUp).Row ' определяем последнюю ячейку 2 столбца активного листа arr = .Range("B2:B" & lr) ' загоняем второй столбец в массив, начиная со 2 строки MsgBox UBound(arr, 1) ' выводим количество строк End With End Sub
[/vba]
Мурад, приветствую! Можно, например так: [vba]Код
Sub find_last_row() Dim lr As Long, arr As Variant With ActiveSheet lr = .Cells(.Rows.Count, 2).End(xlUp).Row ' определяем последнюю ячейку 2 столбца активного листа arr = .Range("B2:B" & lr) ' загоняем второй столбец в массив, начиная со 2 строки MsgBox UBound(arr, 1) ' выводим количество строк End With End Sub
[/vba] jun
Ответить
Сообщение Мурад, приветствую! Можно, например так: [vba]Код
Sub find_last_row() Dim lr As Long, arr As Variant With ActiveSheet lr = .Cells(.Rows.Count, 2).End(xlUp).Row ' определяем последнюю ячейку 2 столбца активного листа arr = .Range("B2:B" & lr) ' загоняем второй столбец в массив, начиная со 2 строки MsgBox UBound(arr, 1) ' выводим количество строк End With End Sub
[/vba] Автор - jun Дата добавления - 15.09.2023 в 18:53
Мурад
Дата: Пятница, 15.09.2023, 19:00 |
Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация:
18
±
Замечаний:
0% ±
Excel 2007
jun , спасибо, что откликнулись! Я направил упрощенный пример. На самом деле надо попытаться определить количество строк по первой колонке, которая выступает "сложным" случаем.
jun , спасибо, что откликнулись! Я направил упрощенный пример. На самом деле надо попытаться определить количество строк по первой колонке, которая выступает "сложным" случаем.Мурад
Ответить
Сообщение jun , спасибо, что откликнулись! Я направил упрощенный пример. На самом деле надо попытаться определить количество строк по первой колонке, которая выступает "сложным" случаем.Автор - Мурад Дата добавления - 15.09.2023 в 19:00
Pelena
Дата: Пятница, 15.09.2023, 19:36 |
Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 19331
Репутация:
4482
±
Замечаний:
±
Excel 365 & Mac Excel
определить количество строк по первой колонке
замените в предложенном варианте , 2) на , 1)
определить количество строк по первой колонке
замените в предложенном варианте , 2) на , 1) Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Ответить
Сообщение определить количество строк по первой колонке
замените в предложенном варианте , 2) на , 1) Автор - Pelena Дата добавления - 15.09.2023 в 19:36
jun
Дата: Суббота, 16.09.2023, 09:07 |
Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 145
Репутация:
43
±
Замечаний:
0% ±
Еще несколько вариантов: - если нужно посчитать непустые ячейки в столбце: [vba]Код
Sub find_not_empty_rows() Dim lr As Long, arr As Variant, i As Long, iCnt As Long With ActiveSheet lr = .Cells(.Rows.Count, 2).End(xlUp).Row ' определяем последнюю ячейку 2 столбца активного листа arr = .Range("A2:B" & lr) ' загоняем таблицу в массив, начиная со 2 строки For i = LBound(arr, 1) To UBound(arr, 1) If arr(i, 1) <> "" Then iCnt = iCnt + 1 ' если в первом столбце ячейка не пустая, то увеличиваем счетчик Next i MsgBox iCnt End With End Sub
[/vba] или тот же макрос, что и выше, только в одну строку (-1 означает - заголовок) [vba]Код
Sub find_last_row_2() Dim lr As Long With ActiveSheet lr = .Cells(.Rows.Count, 1).End(xlUp).Row ' определяем последнюю ячейку 1 столбца активного листа MsgBox lr - 1 End With End Sub
[/vba]
Еще несколько вариантов: - если нужно посчитать непустые ячейки в столбце: [vba]Код
Sub find_not_empty_rows() Dim lr As Long, arr As Variant, i As Long, iCnt As Long With ActiveSheet lr = .Cells(.Rows.Count, 2).End(xlUp).Row ' определяем последнюю ячейку 2 столбца активного листа arr = .Range("A2:B" & lr) ' загоняем таблицу в массив, начиная со 2 строки For i = LBound(arr, 1) To UBound(arr, 1) If arr(i, 1) <> "" Then iCnt = iCnt + 1 ' если в первом столбце ячейка не пустая, то увеличиваем счетчик Next i MsgBox iCnt End With End Sub
[/vba] или тот же макрос, что и выше, только в одну строку (-1 означает - заголовок) [vba]Код
Sub find_last_row_2() Dim lr As Long With ActiveSheet lr = .Cells(.Rows.Count, 1).End(xlUp).Row ' определяем последнюю ячейку 1 столбца активного листа MsgBox lr - 1 End With End Sub
[/vba] jun
Сообщение отредактировал jun - Суббота, 16.09.2023, 09:09
Ответить
Сообщение Еще несколько вариантов: - если нужно посчитать непустые ячейки в столбце: [vba]Код
Sub find_not_empty_rows() Dim lr As Long, arr As Variant, i As Long, iCnt As Long With ActiveSheet lr = .Cells(.Rows.Count, 2).End(xlUp).Row ' определяем последнюю ячейку 2 столбца активного листа arr = .Range("A2:B" & lr) ' загоняем таблицу в массив, начиная со 2 строки For i = LBound(arr, 1) To UBound(arr, 1) If arr(i, 1) <> "" Then iCnt = iCnt + 1 ' если в первом столбце ячейка не пустая, то увеличиваем счетчик Next i MsgBox iCnt End With End Sub
[/vba] или тот же макрос, что и выше, только в одну строку (-1 означает - заголовок) [vba]Код
Sub find_last_row_2() Dim lr As Long With ActiveSheet lr = .Cells(.Rows.Count, 1).End(xlUp).Row ' определяем последнюю ячейку 1 столбца активного листа MsgBox lr - 1 End With End Sub
[/vba] Автор - jun Дата добавления - 16.09.2023 в 09:07
Nic70y
Дата: Понедельник, 18.09.2023, 10:48 |
Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 8937
Репутация:
2337
±
Замечаний:
0% ±
Excel 2010
[vba]Код
MsgBox Cells(Range("a2").CurrentRegion.Rows.Count + 1, 1).End(xlUp).Row - Range("a2").Row + 1
[/vba] [vba]Код
MsgBox Cells(Range("a2").CurrentRegion.Rows.Count + Range("a2").Row - 1, 1).End(xlUp).Row - Range("a2").Row + 1
[/vba] или так: [vba]Код
With Range("a2") MsgBox Cells(.CurrentRegion.Rows.Count + .Row - 1, .CurrentRegion.Column).End(xlUp).Row - .Row + 1 End With
[/vba]
[vba]Код
MsgBox Cells(Range("a2").CurrentRegion.Rows.Count + 1, 1).End(xlUp).Row - Range("a2").Row + 1
[/vba] [vba]Код
MsgBox Cells(Range("a2").CurrentRegion.Rows.Count + Range("a2").Row - 1, 1).End(xlUp).Row - Range("a2").Row + 1
[/vba] или так: [vba]Код
With Range("a2") MsgBox Cells(.CurrentRegion.Rows.Count + .Row - 1, .CurrentRegion.Column).End(xlUp).Row - .Row + 1 End With
[/vba]Nic70y
ЮMoney 41001841029809
Сообщение отредактировал Nic70y - Понедельник, 18.09.2023, 12:13
Ответить
Сообщение [vba]Код
MsgBox Cells(Range("a2").CurrentRegion.Rows.Count + 1, 1).End(xlUp).Row - Range("a2").Row + 1
[/vba] [vba]Код
MsgBox Cells(Range("a2").CurrentRegion.Rows.Count + Range("a2").Row - 1, 1).End(xlUp).Row - Range("a2").Row + 1
[/vba] или так: [vba]Код
With Range("a2") MsgBox Cells(.CurrentRegion.Rows.Count + .Row - 1, .CurrentRegion.Column).End(xlUp).Row - .Row + 1 End With
[/vba]Автор - Nic70y Дата добавления - 18.09.2023 в 10:48
Мурад
Дата: Вторник, 19.09.2023, 20:16 |
Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация:
18
±
Замечаний:
0% ±
Excel 2007
Спасибо всем за помощь! С вашей помощью подготовил такой код с целью последующего выделения массива и снятия объединения: [vba]Код
With ActiveSheet lr = .Cells(.Rows.Count, 1).End(xlUp).Row arr = .Range("a1:a" & lr - 7) End With Range("A27:DX" & arr).Select Selection.UnMerge
[/vba] Но по строке [vba]Код
Range("A27:DX" & arr).Select
[/vba] не происходит выделения массива, т.к. переменная arr почему-то не передает количество строк
Спасибо всем за помощь! С вашей помощью подготовил такой код с целью последующего выделения массива и снятия объединения: [vba]Код
With ActiveSheet lr = .Cells(.Rows.Count, 1).End(xlUp).Row arr = .Range("a1:a" & lr - 7) End With Range("A27:DX" & arr).Select Selection.UnMerge
[/vba] Но по строке [vba]Код
Range("A27:DX" & arr).Select
[/vba] не происходит выделения массива, т.к. переменная arr почему-то не передает количество строк Мурад
Сообщение отредактировал Мурад - Вторник, 19.09.2023, 20:16
Ответить
Сообщение Спасибо всем за помощь! С вашей помощью подготовил такой код с целью последующего выделения массива и снятия объединения: [vba]Код
With ActiveSheet lr = .Cells(.Rows.Count, 1).End(xlUp).Row arr = .Range("a1:a" & lr - 7) End With Range("A27:DX" & arr).Select Selection.UnMerge
[/vba] Но по строке [vba]Код
Range("A27:DX" & arr).Select
[/vba] не происходит выделения массива, т.к. переменная arr почему-то не передает количество строк Автор - Мурад Дата добавления - 19.09.2023 в 20:16
i691198
Дата: Вторник, 19.09.2023, 21:10 |
Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 274
Репутация:
95
±
Замечаний:
0% ±
не происходит выделения массива
У вас переменная arr это двухмерный массив значений, а в этой формуле требуется число. Нужно что то типа [vba]Код
Range("A27:DX" & lr).Select
[/vba] или [vba]Код
Range("A27:DX" & lr-7).Select
[/vba] И вообще здесь можно без Select. [vba]Код
Range("A27:DX" & lr-7).UnMerge
[/vba]
не происходит выделения массива
У вас переменная arr это двухмерный массив значений, а в этой формуле требуется число. Нужно что то типа [vba]Код
Range("A27:DX" & lr).Select
[/vba] или [vba]Код
Range("A27:DX" & lr-7).Select
[/vba] И вообще здесь можно без Select. [vba]Код
Range("A27:DX" & lr-7).UnMerge
[/vba]i691198
Сообщение отредактировал i691198 - Вторник, 19.09.2023, 21:12
Ответить
Сообщение не происходит выделения массива
У вас переменная arr это двухмерный массив значений, а в этой формуле требуется число. Нужно что то типа [vba]Код
Range("A27:DX" & lr).Select
[/vba] или [vba]Код
Range("A27:DX" & lr-7).Select
[/vba] И вообще здесь можно без Select. [vba]Код
Range("A27:DX" & lr-7).UnMerge
[/vba]Автор - i691198 Дата добавления - 19.09.2023 в 21:10
Мурад
Дата: Пятница, 22.09.2023, 10:18 |
Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация:
18
±
Замечаний:
0% ±
Excel 2007
Всем спасибо за помощь!
Всем спасибо за помощь! Мурад
Ответить
Сообщение Всем спасибо за помощь! Автор - Мурад Дата добавления - 22.09.2023 в 10:18