excel - 如何在 Excel 中循环行然后循环列

标签 excel vba

我有一个如下所示的表格(B1:L7) 其中 A1 是查找值,B 列是标题,C 到 L 列是数据 Picture showing the table to be searched of loop

这是我打算对宏执行的操作:

  1. 使用 A1 中的查找值循环 B 列
  2. 一旦匹配,在下面的示例中,B6 显示与 A1 匹配的值,前 10 个值(C 到 L)(即:第 6 行)的值将循环显示值

我已经按照如下方式安装了一些宏,它在步骤 1 中可以正常工作

Sub Looping_Click()
'Search columns
Dim c As Range
'Search rows
Dim r As Range
Dim i As Integer

For Each r In Range("B:B")
    If r.Value = Range("A1").Value Then
        MsgBox "Found values at " & r.Address
        
        For Each c In r.Columns
            i = 1
            Do While i <= 10
            MsgBox "Values is " & c.Value
            i = i + 1
            Loop
            
        Next c
    End If
Next r
End Sub

但到达步骤 2 后,它以某种方式重复显示 B6 值 10 次,而不是显示 C A C T C A A T C C

Error Values shows 10 times

最佳答案

这是您任务的解决方案:

Sub Looping_Click()
'Search columns
Dim c As Range
'Search rows
Dim r As Range

For Each r In Range(Range("B1"), Range("B1").End(xlDown))
    If r.Value = Range("A1").Value Then
        MsgBox "Found values at " & r.Address
        
        For Each c In Range(r.Offset(0, 1), r.Offset(0, 10))
            MsgBox "Values is " & c.Value
        Next c
    End If
Next r
End Sub

与您的版本相比,我主要更改了以下内容:

  1. For Each r In Range("B:B") 更改为 For Each r In Range(Range("B1"), Range("B1").End(xlDown) ))。像这样,循环不会对 B 列的所有行执行。
  2. For Each c In r.Columns 更改为 For Each c In Range(r.Offset(0, 1), r.Offset(0, 10)) 。这是产生意想不到的结果的关键。之前,您对找到的单元格循环十次。由于偏移,它将在所需的范围内循环。

关于excel - 如何在 Excel 中循环行然后循环列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66025736/

相关文章:

excel - 如何将 DB2 日期时间字符串转换为 Excel 日期

excel - 如何在文件夹中创建文件夹、文件和保存文件

excel - 如何保持所有工作表中的页眉(非静态页眉)相同?

mysql - VBA/ADODB 错误地将数据库视为只读

vba - Excel VBA,转换数据导致Excel崩溃

vba - 运行时错误 '13' : Type Mismatch, 从字典访问值时

C# - 以编程方式打开和关闭 excel 文件的正确方法

excel - 从单列到 3X8 表

excel - 根据单元格值返回图像(100 张图像和可变单元格)

database - 如何使用 VBA 循环 Access 某些记录、检查查询并有条件地分配字段值?