【问题标题】:vba Row numbers for filtered rows过滤行的vba行号
【发布时间】:2016-04-22 03:16:13
【问题描述】:

我有这段代码来捕获过滤表中的行号,做一些事情,然后转到下一个可见行。我在第一排工作得很好。

Sub test()

Dim rn As Long
Dim cell As Range
Dim rng As Range


    Set rng = Sheets("FabricatedParts").Range("A:A").SpecialCells(xlCellTypeVisible)
        rn = Sheets("FabricatedParts").UsedRange.Offset(1, 0).SpecialCells(xlCellTypeVisible).Row
         For Each cell In rng
            With ActiveSheet
                .Range("B14").Value = [Parts].Cells(rn, [Parts[Part.]].Column)
            End With
            'rn = Next Visible Row #???.row
         Next cell

End Sub

当我将 offset(1, 0) 更改为 offset(2, 0) 时,它仍然返回第一个可见行的行号(在本例中为 10)。我正在寻找一个 VBA 语句,它将返回下一个可见行的行号并将该数字传递给 rn 变量。对于过滤范围,我正在测试下一个行号是 11、下一个 165、下一个 166 等。谢谢您的时间。

【问题讨论】:

  • 您已经将范围 (rng) 设置为仅可见单元格,因此当您循环时,您将循环到下一个可见单元格。您可以将rn 更改为cell.row 通过您的代码,看起来您正在多次更改同一个单元格,可以假设只有一个您正在寻找的实例。尝试使用 find() 而不是循环遍历整个范围。

标签: vba excel


【解决方案1】:

使用单元格循环的行号。

Sub test()

Dim rn As Long
Dim cell As Range
Dim rng As Range


    Set rng = Sheets("FabricatedParts").Range("A:A").SpecialCells(xlCellTypeVisible)
         For Each cell In rng
            rn = cell.row
            With ActiveSheet
                .Range("B14").Value = [Parts].Cells(rn, [Parts[Part.]].Column)
            End With
         Next cell

End Sub

【讨论】:

  • 非常感谢。我想我还有另一个问题。我在单元格“B14”中得到的值来自下一行而不是过滤后的数据(12 而不是 11、162 而不是 161 等)。我确定这是因为我没有更好地定义 rng。如何获取 A 列的过滤数据主体范围?
  • 您正在过滤Sheets("FabricatedParts").Range("A:A"),但从[Parts].Cells 提取数据。 Parts 是如何计算的?
  • “零件”是一个表格,显示了我们业务中制造零件的所有组件和劳动力。 A列有部分#。过滤器基于哪个客户。因此,我们的目标是为某个客户的所有零件建立一份报告。所以这小段代码就是填写报表B14单元格中的#部分。一旦我让这部分工作,Parts 表中有更多的值将用于构建报告。所以“rng”可以是显示过滤结果的任何范围。 (不包括标题)
  • 我将范围语句更改为: Set rng = Sheets("FabricatedParts").ListObjects(1).DataBodyRange.Columns(1).SpecialCells(xlCellTypeVisible) 并且效果很好。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多