Excel VBA公式与变量

4

我希望在我的代码中生成一个公式,例如:

Range("L2:L17).Formula="=SUMIF($A$2:$A$17,A2,G2:G17)"

除此之外,我希望L、G和A是由宏中早期某些因素决定的变量。同样地,我也想用两个变量来替换2和17,这两个变量的具体值在代码早期已确定。

所以大概是这样的:

Range("var1 j: var1 k).Formula="=SUMIF($ var2 $ j : $ var2 $ k, var2 j, var3 j : var3 k)"

我想我可以将这些变量转换为字符串,然后进行字符串拼接,但我还无法做到。我尝试的每一种方法都会出现错误。

Range(foldtot_add & "2:"& foldtot_add & FinalRow).Formula="=SUMIF("$"&FolderId_add & "$2:" & "$"& FolderId_add & FinalRow, FolderId_add &" 2", daycountcol2 & "2 :" & daycountcol2 & FinalRow)"

foldtot_addFolderId_adddaycountcol2 是我列的名称,FinalRow 是一行的名称。

1个回答

4

如果你需要为列使用变量,可以使用行和列号引用单元格,然后获取地址并在公式中填充。下面的示例设置了行起始、行结束和列号,然后获取每个范围的地址。

Dim rowStart as Integer
Dim rowEnd as Integer
Dim firstCol as Integer
Dim secondCol as Integer
Dim thirdCol as Integer
Dim aAddress as String
Dim gAddress as String
Dim lAddress as String
Dim aCell as String

rowStart = 2
rowEnd = 17
firstCol = 1
secondCol = 7
thirdCol = 12

' This gives you "$A$2:$A$17"
aAddress = Cells(rowStart, firstCol).Address & ":" & _
                    Cells(rowEnd, firstCol).Address

' This gives you "G2:G17"
gAddress = Cells(rowStart, secondCol).Address & ":" & _
                    Cells(rowEnd, secondCol).Address(RowAbsolute:=False, _
                                                     ColumnAbsolute:=False)

' This gives you "L2:L17"
lAddress = Cells(rowStart, thirdCol).Address & ":" & _
                    Cells(rowEnd, thirdCol).Address(RowAbsolute:=False, _
                                                     ColumnAbsolute:=False)

' This gives you "A2"
aCell = Cells(rowStart, firstCol).Address(RowAbsolute:=False, _
                                                     ColumnAbsolute:=False)

' Build the formula to insert in the cells
Range(lAddress).Formula = "=SUMIF(" & aAddress & "," & _
        aCell & "," & gAddress & ")"

从这里开始,您可以编写循环或其他递增代码来根据需要更改行/列号变量。


太好了!非常感谢。我有一个问题:你怎么写Range(M2:M17)=L2/G2?我尝试用类似于你的表达式替换范围和单元格,但是我只是陷入了错误中。 - Amatya
好的,我明白了。Range(lAddress).Formula="=" & aCell & "/" & bCell。我尝试的其中一件事是Range(lAddress).Formula=""=" & aCell & "/" & bCell"。我想我不需要外面的引号,因为当我以"="&开头时,程序会理解它要把所有内容都变成字符串。这仍然很令人困惑。谢谢。 - Amatya
1
变量(例如aCellbCell)不需要用引号括起来。根据您的示例,应编写为Range(lAddress).Formula = "=" & aCell & "/" & bCell - Jaycal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接