VBA Excel使用命名范围访问索引
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
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”然后……
?