1

VBA Excel 中的快速示例:

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

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

如果另一个具有相同索引的单元格具有字符串值,我想MyFunction隐藏该行cellMyNamedRangeBx

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

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

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

4

5 回答 5

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

这有帮助吗?

于 2013-07-10T07:22:45.790 回答
1

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

这些需要被引用为 Range("RangeNameAsString") 所以对于你的第一个函数,你会得到..

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

我做了一个快速测试,如果你做出适当的改变,这似乎没问题。

于 2013-07-10T07:29:11.463 回答
0

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

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

这样,您将检查 MyNamedRangeB 中的单元格值,该值与 MyNamedRangeA 中的单元格从命名范围开始的向下行数和左侧列数相同。

于 2013-07-10T07:14:01.567 回答
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
于 2013-07-10T07:33:36.457 回答
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
于 2013-07-10T07:24:24.197 回答