VBA Excel访问索引与命名范围
VBA Excel中的快速示例:
我已经定义了两个具有相同维度的命名范围: MyNamedRangeA
和MyNamedRangeB
。
这些是列向量。
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中的单元格。