VBA Excel使用命名范围访问索引

VBA Excel使用命名范围访问索引,excel,vba,Excel,Vba,VBA Excel中的快速示例: 我定义了两个具有相同维度的命名范围:MyNamedRangeA和MyNamedRangeB 这些是列向量 Dim cell As Range For Each cell in .range(MyNamedRangeA) Call MyFunction(cell) Next cell 如果MyNamedRangeB中具有相同索引的另一个单元格具有字符串值x Sub MyFunction(cell As Range) index = GetIndex(cel

VBA Excel中的快速示例:

我定义了两个具有相同维度的命名范围:
MyNamedRangeA
MyNamedRangeB

这些是列向量

Dim cell As Range
For Each cell in .range(MyNamedRangeA)
   Call MyFunction(cell)
Next cell
如果
MyNamedRangeB
中具有相同索引的另一个单元格具有字符串值
x

Sub MyFunction(cell As Range)
index = GetIndex(cell)
If .range(MyNamedRangeB)(index) = "x" Then
   cell.EntireRow.Hidden = True
End If
我想在完成这个项目时得到帮助


具体来说,我需要找到一种执行“GetIndex”操作的方法,即提供单元格的行索引。请注意,工作表中的单元格有两个索引:行和列。 你可以查一下

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

通过这种方式,您将检查MyNamedRangeB中的单元格值,该值与MyNamedRangeB中的单元格在命名范围的开始处向下的行数和向左的列数相同。

注意,工作表中的单元格有两个索引,即行和列。
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
你可以查一下

 If .Range(MyNamedRangeB).Cells(cell.Row-.Range(MyNamedRangeA).Row+1, cell.Column-.Range(MyNamedRange).Column-1).Value = "x" Then ...
通过这种方式,您将检查MyNamedRangeB中的单元格值,该值和MyNamedRangeB中的单元格在命名范围的开始处向下的行数和向左的列数相同

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
这有用吗


这有帮助吗?

我会使用一些不同的逻辑,而不需要额外的函数和使用不同类型的循环。这里,如果您可以尝试将代码的一部分合并到您的解决方案中:

'...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

我会使用一点不同的逻辑,没有额外的功能和使用不同类型的循环。这里,如果您可以尝试将代码的一部分合并到您的解决方案中:

'...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

看起来这只是引用命名范围的方式的问题,而且很容易修复

这些函数需要被引用为Range(“rangenameastring”),因此对于第一个函数,您将得到

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

我已经做了一个快速测试,如果您做了适当的更改,这似乎很好。

这似乎只是您引用命名范围的方式的一个问题,很容易解决

这些函数需要被引用为Range(“rangenameastring”),因此对于第一个函数,您将得到

Dim cell As Range
For Each cell in Range("MyNamedRangeA")
   Call MyFunction(cell)
Next cell
我已经做了一个快速测试,如果您做了适当的更改,这似乎很好。

像这样的事情

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
像这样的

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

什么是
GetIndex
do?假设
cell
MyNamedRangeA
的第二个单元格。然后
GetIndex(cell)
将返回整数
2
。您需要什么帮助?你试了什么?结果如何?我需要帮助创建一个具有上述目的的程序。或者通过给出
GetIndex()
的定义来完成上述示例,如果使用index枚举单元格,则不需要
GetIndex
。参见下面的示例。
GetIndex
做什么?假设
cell
MyNamedRangeA
的第二个单元格。然后
GetIndex(cell)
将返回整数
2
。您需要什么帮助?你试了什么?结果如何?我需要帮助创建一个具有上述目的的程序。或者通过给出
GetIndex()
的定义来完成上述示例,如果使用index枚举单元格,则不需要
GetIndex
。请参见下面的示例。是否应该是:
If.Range(MyNamedRangeB)。Cells(cell.Row-.Range(MyNamedRangeA)。Row+1,cell.Column-.Range(MyNamedRangeA)。Column-1)。Value=“x”然后……
?是否应该是:
If.Range(MyNamedRangeB)。Cells(cell.Row-.Range(MyNamedRangeA)。Row+1,cell.Column-.Range(MyNamedRangeA)。Column-1)。Value=“x”然后……