Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Поиск последней строки массива - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск последней строки массива (Макросы/Sub)
Поиск последней строки массива
Мурад Дата: Пятница, 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]

Пример во вложении.
К сообщению приложен файл: 9428045.xlsx (9.2 Kb)
 
Ответить
СообщениеВсем добрый день!
Подскажите, пожалуйста, что поправить в коде, чтобы правильно рассчитать количество строк в массиве?

[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
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 42 ±
Замечаний: 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
Дата добавления - 15.09.2023 в 18:53
Мурад Дата: Пятница, 15.09.2023, 19:00 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
jun, спасибо, что откликнулись!
Я направил упрощенный пример. На самом деле надо попытаться определить количество строк по первой колонке, которая выступает "сложным" случаем.
 
Ответить
Сообщениеjun, спасибо, что откликнулись!
Я направил упрощенный пример. На самом деле надо попытаться определить количество строк по первой колонке, которая выступает "сложным" случаем.

Автор - Мурад
Дата добавления - 15.09.2023 в 19:00
Pelena Дата: Пятница, 15.09.2023, 19:36 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 19138
Репутация: 4409 ±
Замечаний: ±

Excel 365 & Mac Excel
определить количество строк по первой колонке
замените в предложенном варианте , 2) на , 1)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
определить количество строк по первой колонке
замените в предложенном варианте , 2) на , 1)

Автор - Pelena
Дата добавления - 15.09.2023 в 19:36
jun Дата: Суббота, 16.09.2023, 09:07 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 42 ±
Замечаний: 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]


Сообщение отредактировал 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
Группа: Друзья
Ранг: Экселист
Сообщений: 8669
Репутация: 2230 ±
Замечаний: 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]


Ю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 почему-то не передает количество строк


Сообщение отредактировал Мурад - Вторник, 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
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 204
Репутация: 83 ±
Замечаний: 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]


Сообщение отредактировал 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
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск последней строки массива (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!