用VBA在Excel中循环查看表格中的行数(11种方法)

  • Share This
Hugh West

当我们在Excel工作簿中拥有一个大的数据集时,如果我们能在行中循环提取我们想得到的特定结果,有时会很方便。 实现 VBA 在本文中,我们将向你展示11种不同的方法,说明如何在Excel中运行任何操作,是最有效、最快速、最安全的方法。 循环浏览表格的行数 在Excel中用 VBA宏 .

下载工作手册

你可以从这里下载免费的练习Excel工作簿。

用VBA循环查看表格中的行数.xlsm

用VBA在Excel中循环查看表格行数的11种方法

在本节之后,你将学习如何 循环浏览表格的行数 有11种不同的方法,如循环浏览各行直到空白单元格,循环浏览各行直到找到一个特定的值,循环浏览各行并给一个特定的单元格上色等等。 VBA Excel中的宏。

以上是本文将遵循的例子数据集,以描述这些方法。

1.嵌入VBA,按单元格参考号循环浏览表格每一行的每个单元格

如果你想 循环浏览表格中每一行的每个单元格 在你的Excel工作表中,得到 作为返回值的单元格参考号 然后按照下面讨论的步骤进行。

步骤。

  • 在开始时,按 Alt + F11 在你的键盘上,或进入标签 开发人员 -> Visual Basic 打开 Visual Basic编辑器 .

  • 接下来,在弹出的代码窗口中,从菜单栏中,点击 插入 -> 模块 .

  • 然后。 拷贝 以下代码和 粘贴 它进入代码窗口。
 Sub LoopThroughRowsByRef() LastRow = Range("B" & Rows.Count).End(xlUp).Row FirstRow = 4 i = FirstRow FirstColumn = 2 Do Until i> LastRow LastColumn = Cells(i, Columns.Count).End(xlToLeft).Column Count = FirstColumn Do Until Count> LastColumn MsgBox "当前迭代的单元" & Chr( Count + 64) & I Count = Count + 1 Loop i = i + 1 Loop End Sub 

你的代码现在可以运行了。

  • 现在,按 F5 在你的键盘上选择"",或从菜单栏中选择 运行-> 运行Sub/UserForm 你也可以直接点击 小的播放图标 子菜单栏中的 "运行宏"。

  • 或者为了直观地见证和比较数据集和结果,你可以 保存 编码和 返回到工作表 的兴趣。
  • 从那里,你可以点击 巨集 开发商 标签。 选择宏的名称。 然后点击 运转 .

代码执行成功后,看看上面的gif图,看看结果。 会有一个弹出窗口 MsgBox 向你展示 每行每个单元格的单元格参考号 从你的Excel表格中的表格。

VBA代码解释

 LastRow = Range("B" & Rows.Count).End(xlUp).Row 

通过搜索B列获得表格中最后一行的编号。

 第一行 = 4 

设置第4行,我们的数据从这里开始。

 i = FirstRow 

要从第一行开始循环。

 第一列 = 2 

设置第2列,我们的数据从这里开始。

 Do Until i> LastRow LastColumn = Cells(i, Columns.Count).End(xlToLeft).Column 

开始在行中循环,通过评估当前行直到最后一行来获得最后的列号。

 Count = FirstColumn Do Until Count> LastColumn 

从第一行到最后一行的增量循环列。

 MsgBox "当前正在迭代的单元格" & Chr(Count + 64) & i Count = Count + 1 Loop i = i + 1 Loop 

这段代码的作用是处理,在每次迭代后增量并显示代码的结果。

阅读更多。 如何在Excel表格中自动添加新行

2.实施VBA,在每一行的每一个单元格中按值进行循环。

如果你想 循环浏览表格中每一行的每个单元格,并将单元格中的值作为返回值抛出。 那么本节将帮助你弄清如何用 VBA 丞相。

你可以用 列表对象 并与 数据体范围 财产的 VBA 我们将向你展示带有对象和属性的宏代码。

2.1. 使用ListObject

的步骤 通过ListObject在表格的每一行中按单元格值循环浏览每个单元格。 VBA 以下是Excel的数据。

步骤。

  • 与之前的方法一样,打开 Visual Basic编辑器 开发商 选项卡和 插入 a 模块 在代码窗口中。
  • 然后,在代码窗口。 拷贝 以下代码和 粘贴 它。
 Sub LoopThroughRowsByList() Dim iListRow As ListRow Dim iCol As Range For Each iListRow In ActiveSheet.ListObjects("TblStudents").ListRows For Each iCol In iListRow.Range MsgBox iCol.Value Next iCol Next iListRow End Sub 

你的代码现在可以运行了。

  • 在这之后。 运转 结果显示在下面的GIF中。

将会有一个弹出式 MsgBox 向你展示 每一行的每个单元格所携带的值 从你的Excel表格中的表格。

VBA代码解释

 Dim iListRow As ListRow Dim iCol As Range 

界定变量。

 For Each iListRow In ActiveSheet.ListObjects("TblStudents").ListRows For Each iCol In iListRow.Range MsgBox iCol.Value Next iCol Next iListRow 

这段代码首先开始循环浏览表中的行(" TblStudents "然后为每一行输入列。 之后,在MsgBox中传递单元格的值。 然后转到下一列。 在完成对一行所有列的迭代后,转到下一行,继续迭代过程,直到最后一行。

2.2. 有了DataBodyRange属性

为了更具体地处理从表中提取的数据,你可以利用 数据体范围 财产的 列表对象 . 数据体范围 属性将向你抛出包含头行和插入行之间的列表范围的结果。

关于你如何能够 通过DataBodyRange,按单元格值循环浏览表格每一行的每个单元格。 VBA 以下是Excel的数据。

步骤。

  • 正如之前所显示的,打开 Visual Basic编辑器 开发商 选项卡和 插入 a 模块 在代码窗口中。
  • 然后。 拷贝 以下代码和 粘贴 它进入代码窗口。
 Sub LoopThroughRowsByRange() Dim iRange As Range For Each iRange In ActiveSheet.ListObjects("TblStdnt").DataBodyRange MsgBox iRange.Value Next iRange End Sub 

你的代码现在可以运行了。

  • 后来。 运行 的宏,看看下面的GIF,看看输出。

将会有一个弹出式 MsgBox 向你展示 每一行的每个单元格所携带的值 从你的Excel表格中的表格。

VBA代码解释

 Dim iRange As Range 

定义变量。

 For Each iRange In ActiveSheet.ListObjects("TblStdnt").DataBodyRange MsgBox iRange.Value Next iRange 

这段代码首先开始循环浏览表中的行(" 淘宝网 "是我们的表名),并返回一个不包括表头行的数值范围。 然后在MsgBox中传递这个范围的数值。 然后它去下一行提取这个范围,继续迭代过程,直到最后一行。

3.在Excel中应用VBA宏,通过串联列来迭代行

本节将介绍如何 循环浏览表格中的行,将列与第一列连接起来。 从你在Excel中的数据集中提取。

例如,对于我们的数据集,首先,我们将遍历 B5室的约翰 细胞C5中的101 通过串联它们,然后迭代到 B5室的约翰 89在单元格D5中 通过连接它们,从 第5行 .

让我们告诉你,你可以通过以下方式做到这一点 VBA Excel中的宏。

步骤。

  • 起初,打开 Visual Basic编辑器 开发商 选项卡和 插入 a 模块 在代码窗口中。
  • 第二,在代码窗口。 拷贝 以下代码和 粘贴 它。
 Sub LoopThroughRowsByConcatenatingCol() Dim iRange As Range Dim iValue As String With ActiveSheet.ListObjects("TblConcatenate") For Each iRange In .DataBodyRange If iRange.Column = .DataBodyRange.Column Then iValue = iRange.Value Else MsgBox " Evaluating " & iValue & " : " & iRange.Value End If Next iRange End With END Sub 

你的代码现在可以运行了。

  • 第三。 运行 看看下面的GIF就知道结果了。

将会有一个弹出式 MsgBox 向你展示 第一列和第二列的单元格的连接值 ( B单元格中的约翰,来自B段 C列单元格C5中的101 ),然后是 第一列和第三列的单元格的连接值 ( B单元格中的约翰,来自B段 D列单元格D5中的89 )的 第5行 这个连接操作将一直持续下去,直到它到达表的最后一行。

VBA代码解释

 Dim iRange As Range Dim iValue As String 

定义变量。

 With ActiveSheet.ListObjects("TblConcatenate") 

然后,代码从活动工作表中选择表格(" TblConcatenate "在我们的表名中)。

 For Each iRange In .DataBodyRange If iRange.Column = .DataBodyRange.Column Then iValue = iRange.Value 

之后,开始迭代每一行,不包括列头。 如果迭代发现在列头和行之间的范围内有一个匹配,那么它就把这个值存储在 价值 变量。

 Else MsgBox "正在评估" & iValue & " & iRange.Value End If Next iRange End With 

如果上述条件没有得到满足,那么代码就会在MsgBox中抛出数值并完成条件。 之后,它继续在另一个范围内循环,并继续迭代,直到结束行。 一旦到达结束行,宏就会结束代码执行。

4.嵌入宏,通过连接Excel表中的所有列来迭代行数

在本节中,我们将学习如何 连接每一行的所有列。 在数据集中有 VBA Excel中的宏。

执行的步骤如下所示。

步骤。

  • 首先,打开 Visual Basic编辑器 开发商 选项卡和 插入 a 模块 在代码窗口中。
  • 然后。 拷贝 以下代码和 粘贴 它进入代码窗口。
 Sub LoopThroughRowsByConcatenatingAllCol() Dim iObj As Excel.ListObject Dim iSheet As Excel.Worksheet Dim iRow As Excel.ListRow Dim iCol As Excel.ListColumn Dim iResult As String Set iSheet = ThisWorkbook.Worksheets("ConcatenatingAllCol") Set iObj = iSheet.ListObjects("TblConcatenateAll") For Each iRow In iObj.ListRows For Each iCol In iObj.ListColumns iResult = iResult & " " &。Intersect(iRow.Range, iObj.ListColumns(iCol.Name).Range).Value Next iCol MsgBox iResult iResult = " " Next iRow End Sub 

你的代码现在可以运行了。

  • 下一步。 运转 宏代码。

正如你从上面的GIF中可以看到的那样,有一个弹出窗口 MsgBox 向你展示 每一行中的所有列的串联值 从你的Excel工作表的表格中。

VBA代码解释

 Dim iObj As Excel.ListObject Dim iSheet As Excel.Worksheet Dim iRow As Excel.ListRow Dim iCol As Excel.ListColumn Dim iResult As String 

界定变量。

 Set iSheet = ThisWorkbook.Worksheets("ConcatenatingAllCol") 

设置我们将使用的工作表名称(" 串联所有Col "是工作簿中的工作表名称)。

 Set iObj = iSheet.ListObjects("TblConcatenateAll") 

定义我们将使用的表名(" TblConcatenateAll "是我们数据集中的表名)。

 For Each iRow In iObj.ListRows 

开始对表的每一行进行迭代。

 For Each iCol In iObj.ListColumns 

开始迭代表的每一行的每一列。

 iResult = iResult & " " & Intersect(iRow.Range, iObj.ListColumns(iCol.Name).Range).Value Next iCol MsgBox iResult iResult = " " Next iRow 

通过对每一行的每一列的数值进行交叉来存储结果。 在扫描完每一行的所有列后,它将结果传到MsgBox中。 然后再次开始在下一行循环,继续循环直到到达表格的最后一行。

阅读更多。 如何用Excel VBA对表格的多列进行排序(2种方法)

5.用VBA宏在表的行中循环找到值时停止迭代

假设你想 循环浏览你的表格中的行,当它找到一个特定的值时停止循环。 你只需用一个简单的宏代码就可以做到这一点。

让我们学习如何做到这一点 VBA 在Excel中。

步骤。

  • 起初,打开 Visual Basic编辑器 开发商 选项卡和 插入 a 模块 在代码窗口中。
  • 然后,在代码窗口。 拷贝 以下代码和 粘贴 它。
 Sub LoopThroughRowsForValue() Dim iData As Range For Each iData In Range("1:15") If iData.Value = "Edge" Then MsgBox "Edge is found at " & iData.Address End If Next iData End Sub 

你的代码现在可以运行了。

  • 后来。 运转 宏观。
  • 它将 启动循环,并在找到特定值时停止循环 (" 边缘 ")的范围内,并抛出了 导致 MsgBox .

正如你在上图中看到的,有一个弹出的MsgBox显示你的 电池地址,$B$10 ,在这里我们找到了指定的值。 " 边缘 " .

VBA代码解释

 Dim iData As Range 

定义变量。

 For Each iData In Range("1:15") If iData.Value = "Edge" Then MsgBox "Edge is found at " & iData.Address End If Next iData 

这段代码在这里用于循环浏览从1到15的行。 如果它找到特定的词" 边缘 "它继续这样做,直到完成对第1至15行的所有数据的扫描,以寻找该词。

阅读更多:如何从Excel表中插入或删除行和列

VBA在Excel中对每一行进行循环并对特定值进行着色

如果你不想在MsgBox中抛出指定值的单元格地址怎么办? 你可能想 给携带该值的单元格着色 你正在寻找的。

让我们学习一下如何用 VBA 宏观。

步骤。

  • 与之前的方法一样,打开 Visual Basic编辑器 开发商 选项卡和 插入 a 模块 在代码窗口中。
  • 然后。 拷贝 以下代码和 粘贴 它进入代码窗口。
 Sub LoopThroughRowsAndColor() Dim iData As Range For Each iData In Range("1:15") If iData.Value = "Edge" Then iData.Interior.ColorIndex = 8 End If Next iData End Sub 

你的代码现在可以运行了。

  • 在这之后。 运行 宏观。
  • 它将 开始循环,当它找到特定的值时,停止循环(" 边缘 ") 的范围内和 给单元格着色 颜色索引 你在代码中提供的。

正如你从上面的图片所看到的。 C ell B10 ,在这里我们找到了指定的值。 " 边缘 "是彩色的 在代码执行之后。

VBA代码解释

 Dim iData As Range 

定义变量。

 For Each iData In Range("1:15") If iData.Value = "Edge" Then iData.Interior.ColorIndex = 8 End If Next iData 

这段代码在这里用于循环浏览从1到15的行。 如果它找到特定的词" 边缘 "它继续这样做,直到完成对第1至15行的所有数据的扫描,以寻找该词。

阅读更多。 如何在Excel中使用基于单元格值的VLOOKUP表阵列

类似读物

  • TABLE函数在Excel中是否存在?
  • 如何在Excel中把表格转换成列表(3种快速方法)
  • 在Excel中把范围转换为表格(5种简单方法)
  • 在Excel表格中有效地使用公式(附4个例子)
  • Excel表名:你需要知道的一切

7.实施VBA,在Excel中循环浏览每一行并为每一个奇数行着色

在上一节中,我们已经学会了如何给带有特定值的单元格着色。 在本节中,我们将学习如何 循环浏览表格的每一行,给每一个奇数行着色 VBA Excel中的宏。

执行这一过程的步骤如下。

步骤。

  • 正如之前所显示的,打开 Visual Basic编辑器 开发商 选项卡和 插入 a 模块 在代码窗口中。
  • 然后。 拷贝 以下代码和 粘贴 它进入代码窗口。
 Sub LoopThroughRowsAndColorOddRows() Dim iRow As Long With Range("B4").CurrentRegion For iRow = 2 To .Rows.Count If iRow / 2 = Int(iRow / 2) Then .Rows(iRow) .Interior.ColorIndex = 8 End If Next End With End Sub 

你的代码现在可以运行了。

  • 现在。 运行 的宏,看看下面的图片,看看输出。

所有 奇数行是彩色的 循环浏览工作表中的所有行后。

VBA代码解释

 Dim iRow As Long 

定义变量。

 With Range("B4").CurrentRegion 

定义我们将要工作的范围。

 For iRow = 2 To .Rows.Count If iRow / 2 = Int(iRow / 2) Then .Rows(iRow).Interior.ColorIndex = 8 End If Next End With 

这部分代码指的是对所有的行进行迭代,从当前行的下一行开始。 B4 如果行数除以2的模等于存储在整数类型中的返回行数,那么这段代码就会用代码中提供的颜色索引给所有被计算提取出来的行涂上颜色。 它一直在所有的行中移动,直到它到达范围的末端。

8.实施VBA,在Excel中对每条偶数行进行循环并着色

在上一节中,我们已经学会了如何给表格的每一条奇数行着色。 在本节中,我们将学习如何 循环浏览表格的每一行,为每一个偶数行着色 在Excel中使用VBA宏。

下面讨论执行该过程的步骤。

步骤。

  • 首先,打开 Visual Basic编辑器 开发商 选项卡和 插入 a 模块 在代码窗口中。
  • 然后。 拷贝 以下代码和 粘贴 它进入代码窗口。
 Sub LoopThroughRowsAndColorEvenRows() Dim iRow As Long With Range("B4").CurrentRegion For iRow = 3 To .Rows.Count Step 2 .Rows(iRow).Interior.ColorIndex = 8 Next End With 结束 Sub 

你的代码现在可以运行了。

  • 下一步。 运行 的宏,看看下面的图片就知道结果了。

所有 偶数行是彩色的 循环浏览工作表中的所有行后。

VBA代码解释

 Dim iRow As Long 

定义变量。

 With Range("B4").CurrentRegion 

定义我们将要工作的范围。

 For iRow = 3 To .Rows.Count Step 2 .Rows(iRow).Interior.ColorIndex = 8 Next End With 

这段代码开始在从当前行开始的三行之后进行迭代。 B4 它首先给它上色,然后将行数增加2,并一直给它上色,直到它到达数据集的最后一行。

9.应用宏来迭代行,直到Excel中的空白单元格为止

如果你想让你的代码像这样工作的话 循环浏览表格的所有行,当它到达一个空白单元格时停止。 你可以通过以下方式执行该任务 FOR 循环 直到循环 在Excel中 VBA .

9.1.有FOR循环

采取措施,以 循环浏览表格中的行,直到有一个空白单元格,用FOR循环。 VBA 以下是Excel的数据。

步骤。

  • 起初,打开 Visual Basic编辑器 开发商 选项卡和 插入 a 模块 在代码窗口中。
  • 在这之后。 拷贝 以下代码和 粘贴 它进入代码窗口。
 Sub ForLoopThroughRowsUntilBlank() Dim x As Integer Application.ScreenUpdating = False NumRows = Range("B4", Range("B4").End(xlDown)).Rows.Count Range("B4").Select For x = 1 To NumRows ActiveCell.Offset(1, 0).Select Next Application.ScreenUpdating = True End Sub 

你的代码现在可以运行了。

  • 然后。 运行 宏,结果显示在下面的GIF中。

运行该宏后,它 开始在所有的行中循环播放 表中,一旦它到达 空白单元格,单元格B8 ,它 停止迭代 .

VBA代码解释

 Dim x As Integer 

定义变量。

 Application.ScreenUpdating = False 

关掉屏幕更新事件。

 NumRows = Range("B4", Range("B4").End(xlDown)).Rows.Count 

存储所有的行,从 细胞B4 直到最后一个。

 Range("B4").Select 

选择 细胞B4 .

 For x = 1 To NumRows ActiveCell.Offset(1, 0).Select Next 

这段代码开始循环浏览所有的行,当它发现某行的空单元格时,就会选择它,然后继续扫描行,直到到达终点。

 Application.ScreenUpdating = True 

开启屏幕更新事件。

9.2.有Do-Until循环的情况下

采取措施,以 用Do-Until循环遍历各行,直到出现空白单元格。 VBA 下文给出了答案。

步骤。

  • 首先,打开 Visual Basic编辑器 开发商 选项卡和 插入 a 模块 在代码窗口中。
  • 然后。 拷贝 以下代码和 粘贴 它进入代码窗口。
 Sub DoUntilLoopThroughRowsUntilBlank() Range("B4").Select Do Until IsEmpty(ActiveCell) ActiveCell.Offset(1, 0) .Select Loop End Sub 

你的代码现在可以运行了。

  • 后来。 运行 结果如下图所示。

运行宏后,它开始 循环浏览所有的行 表中,一旦它到达 空白单元格,单元格B8 ,它 停止迭代 .

VBA代码解释

 Range("B4").Select 

选择我们要工作的单元格。

 直到IsEmpty(ActiveCell)。 

开始并继续循环,直到找到一个空单元。

 ActiveCell.Offset(1, 0).Select Loop 

当在一行中发现一个空单元格时,选择它并停止迭代。

10.在Excel中迭代行至多个空白单元格的VBA宏程序

在上一节中,你已经学会了如何在发现一个空单元格时停止循环。 但如果你不想在发现多个空单元格而不是只有一个空单元格时才停止迭代,怎么办?

的步骤 循环浏览各行,直到出现多个空白单元格 的表格中找到,其中有 VBA Excel显示如下。

步骤。

  • 首先,打开 Visual Basic编辑器 开发商 选项卡和 插入 a 模块 在代码窗口中。
  • 然后。 拷贝 以下代码和 粘贴 它进入代码窗口。
 Sub LoopThroughRowsUntilMultipleBlank() Range("B4").Select Do Until IsEmpty(ActiveCell) And IsEmpty(ActiveCell.Offset(1, 0)) ActiveCell.Offset(2, 0).Select Loop End Sub 

你的代码现在可以运行了。

  • 现在。 运行 该宏的输出,请看下面的GIF。

运行该宏后,它 没有在第一个空白单元格(单元格B8)上停止。 当它发现时就停止了。 细胞B16上的两个连续空白细胞 .

VBA代码解释

 Range("B4").Select 

选择我们要工作的单元格。

 直到IsEmpty(ActiveCell)和IsEmpty(ActiveCell.Offset(1, 0)) 

开始并继续循环,直到找到两个连续的空单元。

 ActiveCell.Offset(2, 0).Select Loop 

当发现有两个连续的空单元时,则选择它并停止迭代。

11.在Excel中嵌入VBA,通过串联所有列直到空白来循环浏览行。

本节将告诉你如何 循环浏览表格中的所有行,并连接所有列,直到出现一个空白单元。 被发现有 VBA 丞相。

让我们学习一下如何用 VBA Excel中的宏。

步骤。

  • 起初,打开 Visual Basic编辑器 开发商 选项卡和 插入 a 模块 在代码窗口中。
  • 然后。 拷贝 以下代码和 粘贴 它进入代码窗口。
 Sub ConcatenatingAllColUntilBlank() Dim iSheet As Worksheet Dim iValue As Variant Dim iResult As String Set iSheet = Sheets("ConcatenatingAllColUntilBlank") iValue = Range("B4").CurrentRegion For i = 2 To UBound(iValue, 1) iResult = " " For J = 1 To UBound(iValue, 2) iResult = IIf(iResult = " ", iValue(i, J), iResult & " " & iValue(i, J) ) Next J MsgBox iResult Next i End Sub 

你的代码现在可以运行了。

  • 后来。 运行 宏,结果见下面的GIF。

正如你从上面的GIF中看到的那样,有一个弹出窗口 MsgBox 向你展示 每一行中的所有列的串联值 但是,这并不意味着你的工作表就会被删除。 一旦到达空白单元格就停止 .

VBA代码解释

 Dim iSheet As Worksheet Dim iValue As Variant Dim iResult As String 

界定变量。

 Set iSheet = Sheets("ConcatenatingAllColUntilBlank") 

设置我们将使用的工作表名称(" 连接AllColUntilBlank "是工作簿中的工作表名称)。

 iValue = Range("B4").CurrentRegion 

定义我们将要工作的范围。

 For i = 2 To UBound(iValue, 1) iResult = "" For J = 1 To UBound(iValue, 2) iResult = IIf(iResult = "", iValue(i, J), iResult & " " & iValue(i, J)) Next J MsgBox iResult Next i 

这段代码从数组开始循环,一直循环到返回数组的最大下标和第一维的下限。 然后进入提取第二维下限的迭代。 之后,它将所有提取的值传递到 iResult 它继续这样做,直到找到一个空单元。

总结

最后,这篇文章向你展示了11种有效的方法,说明如何 循环浏览表格的行数 在Excel中用 VBA宏 我希望这篇文章对你非常有益。 欢迎提出任何有关该主题的问题。

Hugh West is a highly experienced Excel trainer and analyst with over 10 years of experience in the industry. He holds a Bachelor's degree in Accounting and Finance and a Master's degree in Business Administration. Hugh has a passion for teaching and has developed a unique teaching approach that is easy to follow and understand. His expert knowledge of Excel has helped thousands of students and professionals worldwide improve their skills and excel in their careers. Through his blog, Hugh shares his knowledge with the world, offering free Excel tutorials and online training to help individuals and businesses reach their full potential.