VBA Excel访问具有命名范围的索引

时间:2013-07-10 06:51:14

标签: excel vba

VBA Excel中的快速示例:

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

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”操作,即提供单元格的行索引

5 个答案:

答案 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