Excel vba每个循环与if语句和结构化引用

我想使用结构化的引用来改变基于同一个表中的另一列的值的表中的列的值。 到目前为止,我有这样的东西:

Sub Test For Each cell In Worksheets("FNM_DB").Range("DB_SS[Resource_Loc_Type]") If cell.Value = "TH" Then Worksheets("FNM_DB").Range("DB_SS[Resource]") = Worksheets("FNM_DB").Range("DB_SS[SOURCE_AND_SINK_NAMES]") End If Next cell End Sub 

我知道我可以做到这一点没有结构化的参考,但我希望代码更具可读性。 有没有办法循环所有的值? 我知道@是指特定的行,但我不知道如何在这个例子中使用它。

虽然可以在VBA中使用结构化引用,但是处理当前行是不同的。 @符号是指当前行,但该语法只能在工作表单元格内工作,而不能在VBA中工作。

如果您担心可读性,我不确定长语法是否有帮助。 我的build议是创build表示当前列的表列名称的偏移量的variables。 像这样的东西:

 Sub test() Dim Height As Integer, Width As Integer, Result As Integer Result = 3 Height = 1 Width = 2 For Each cel In Worksheets("Sheet1").Range("SizingTable[Colour]") If cel.Value = "red" Then cel.Offset(0, Result) = cel.Offset(0, Height) * cel.Offset(0, Width) End If Next cel End Sub 

在这里输入图像说明

以上声明

@符号是指当前行,但该语法只能在工作表单元格内工作,而不能在VBA中工作。

错误的

工作

 [tblActualsWithFacts[@1c]].Select 

这些工作也是:

 Range("tblActualsWithFacts[@1c]").Select For i = 1 to 12 Range("tblActualsWithFacts[" & i & " c]").Select Next i 

然而,上述技术的组合,即连接使用“@”的结构化引用不起作用,因此这是行不通的

 For i = 1 to 12 Range("tblActualsWithFacts[@" & i & " c]").Select Next i