VBA Excel中的快速示例:
我定义了两个具有相同尺寸的命名范围:MyNamedRangeA
和MyNamedRangeB
这些是列向量。
Dim cell As Range
For Each cell in .range(MyNamedRangeA)
Call MyFunction(cell)
Next cell
如果MyFunction
中具有相同索引的另一个单元格具有字符串值cell
MyNamedRangeB
隐藏x
行
Sub MyFunction(cell As Range)
index = GetIndex(cell)
If .range(MyNamedRangeB)(index) = "x" Then
cell.EntireRow.Hidden = True
End If
我想获得完成此计划的帮助。
具体来说,我需要找到一种方法来执行“GetIndex”操作,即提供单元格的行索引
答案 0 :(得分:3)
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
这有帮助吗?
答案 1 :(得分:1)
看起来这只是引用命名范围和易于修复的方式的问题。
这些需要引用为Range(“RangeNameAsString”),因此对于您的第一个函数,您将获得..
Dim cell As Range
For Each cell in Range("MyNamedRangeA")
Call MyFunction(cell)
Next cell
我做了一个快速测试,如果你做了适当的改变,这似乎没问题。
答案 2 :(得分:0)
请注意,工作表中的单元格包含2个索引,行和列。 你可以检查
If .Range(MyNamedRangeB).Cells(cell.Row-.Range(MyNamedRangeA).Row+1, cell.Column-.Range(MyNamedRange).Column-1).Value = "x" Then ...
通过这种方式,您将检查MyNamedRangeB中的单元格值,该值与MyNamedRangeA中的单元格相同的行数和从命名范围的开头留下的列。
答案 3 :(得分:0)
如果没有附加功能并使用不同类型的循环,我会使用一些不同的逻辑。在这里,如果您可以尝试将部分代码合并到您的解决方案中:
'...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
答案 4 :(得分:0)
这样的东西?
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