VBA Excel访问索引与命名范围

VBA Excel中的快速示例:

我已经定义了两个具有相同维度的命名范围: MyNamedRangeAMyNamedRangeB
这些是列向量。

 Dim cell As Range For Each cell in .range(MyNamedRangeA) Call MyFunction(cell) Next cell 

如果MyNamedRangeB具有相同索引的另一个单元格的string值为x我希望MyFunction隐藏cell的行

 Sub MyFunction(cell As Range) index = GetIndex(cell) If .range(MyNamedRangeB)(index) = "x" Then cell.EntireRow.Hidden = True End If 

我想获得帮助完成这个程序。

具体来说,我需要find一种方法来执行“GetIndex”操作,即提供单元格的行索引

 dim i as Integer dim myRangeA as Range dim myRangeB as Range dim MyNamedRangeA as String dim MyNamedRangeB as String With MySheetReference set myRangeA = .Range(MyNamedRangeA) set myRangeB = .Range(MyNamedRangeB) For i = 1 to myRangeA.Cells.Count If myRangeB.Cells(i).Value = "x" Then myRangeA.Cells(i).EntireRow.Hidden = True End If Next End With 

这有帮助吗?

看起来这只是您引用命名范围的方式的一个问题,并且易于修复。

这些需要引用作为范围(“RangeNameAsString”),所以你的第一个function,你会得到..

 Dim cell As Range For Each cell in Range("MyNamedRangeA") Call MyFunction(cell) Next cell 

我已经做了一个快速的testing,如果你做了适当的改变,这似乎是好的。

我会使用一点不同的逻辑,没有额外的function,并使用不同types的循环。 在这里,如果您可以尝试将代码的一部分并入您的解决scheme:

 '...your code here Dim i As Long For i = 1 To .Range(MyNamedRangeA).Cells.Count If .Range(MyNamedRangeA).Cells(i).Value = .Range(MyNamedRangeB).Cells(i).Value Then .Range(MyNamedRangeA).Cells(i).EntireRow.Hidden = True End If Next i '...rest of your code here 

像这样的东西?

 Dim cell As Range For Each cell in Range("MyNamedRangeA") Call MyFunction(cell) Next cell Sub MyFunction(cell As Range) index = Range("MyNamedRangeA").Cells(1,1).row - cell.row If range(MyNamedRangeB)(index,1) = "x" Then cell.EntireRow.Hidden = True End If End Sub 

注意工作表中的单元格有2个索引,行和列。 你可以检查

  If .Range(MyNamedRangeB).Cells(cell.Row-.Range(MyNamedRangeA).Row+1, cell.Column-.Range(MyNamedRange).Column-1).Value = "x" Then ... 

这样你将在MyNamedRangeB中检查单元格的值,这个单元格的值是相同的行数和从命名区域开始的列作为MyNamedRangeA中的单元格。