Макросы Excel цикл по строкам

Я работаю над другим проектом Excel, и на этот раз я впервые окунул ноги в макросы VBA. У меня были очень базовые знания VB, но прошло более десяти лет с тех пор, как я использовал язык, поэтому я довольно потерян.

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

Sub setRecord()
    If [K2].Value <> "" Then
        appendToRecord "RecordsTable", [E2:K2].Value
    End If
    If [K3].Value <> "" Then
        appendToRecord "RecordsTable", [E3:K3].Value
    End If
    If [K4].Value <> "" Then
        appendToRecord "RecordsTable", [E4:K4].Value
    End If
    If [K5].Value <> "" Then
        appendToRecord "RecordsTable", [E5:K5].Value
    End If
    If [K6].Value <> "" Then
        appendToRecord "RecordsTable", [E6:K6].Value
    End If
End Sub

Я уверен, я не единственный, кто чувствует то же самое путь...

У меня есть фиксированное количество строк прямо сейчас. Однако это может измениться в будущем, и я хотел бы, чтобы мой код был готов к этому без необходимости добавлять или удалять оператор IF.

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

Итак, мой вопрос в том, есть ли способ зациклить диапазон строк, таких как цикл For или ForEach, в то время как проверка значения в определенном столбце по пути, чтобы я мог сделать этот кусок кода короче / эффективнее в VBA? Любые указатели будут высоко оценены. Кстати, я использую Office 365.

9
задан DeVilFisCh
06.01.2023 6:52 Количество просмотров материала 3233
Распечатать страницу

2 ответа

VBA FOR конструкция выглядит так:

FOR counter = start TO end [Step increment]
 {...statements...}
NEXT [counter];

пример использования:

Dim myCount As Integer
For myCount = 1 to 5
  MsgBox (myCount)
Next myCount

для вашей проблемы, вы можете начать в определенной ячейке, а затем настроить цикл

a) проверьте Активная Ячейка, потом

b)используйтесмещение функция для перехода к следующей ячейке диапазона.

1
отвечен mcalex 2023-01-07 14:40

вот решение, которое я придумал:

Dim RecordRange As ListObject
Set RecordRange = Worksheets("Set Record").ListObjects("NewRecord")

For i = 1 To RecordRange.DataBodyRange.Rows.Count
    If RecordRange.DataBodyRange.Cells(i, RecordRange.ListColumns("N").Index) <> "" Then
        appendToRecord "RecordsTable", RecordRange.DataBodyRange.Rows(i)
    End If
Next i

Я попытался использовать ресурсы в ответе, который предоставил @mcalex, но я не мог заставить его работать - это в основном из-за моего отсутствия опыта. К счастью, я нашел несколько статей о VBA и таблицах, которые помогли мне найти ответ для себя.

0
отвечен DeVilFisCh 2023-01-07 16:57

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

macros
microsoft-excel
office365
vba
Вверх