Excel 宏:循环遍历行

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。

答案1

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) 使用 VBA抵消函数移动到范围内的下一个单元格。

答案2

以下是我想到的解决方案:

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 和表格的文章,帮助我自己找到了答案。

相关内容