字符串变量引用范围未在工作簿函数SUM中计算

时间:2017-05-31 14:23:47

标签: excel-vba vba excel

我正在尝试找出正确的语法,以便我的字符串变量 colLetter 将在SUM工作簿函数中进行评估,而不是作为文字文本“colLetter”读取。

colLetter 在每个列范围的循环中存储字符串:“A:A”,然后是“B:B”,“C:C”等等......

我有一个函数Col_Letter(整数)As String,它接受一个整数并返回整数对应的excel中的列字母的String。示例:Col_Letter(3)返回“C”

现在我的循环看起来像这样:

For c = 3 To lastColumn

    Dim colLetter As String
    colLetter = Col_Letter(c) & ":" & Col_Letter(c)
    Cells(lastRow + 1, c).Formula = "=SUM(colLetter)"


Next

我希望公式返回= SUM(“A:A”),= SUM(“B:B”)等......但它返回= SUM(colLetter)而不是#Value!

我无法弄清楚需要使用总和公式的语法修复什么。任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:2)

如果使用R1C1参考,则不需要:

Cells(lastRow + 1, 3).Resize(, lastColumn - 2).FormulaR1C1 = "=SUM(R1C:R[-1]C)"

A1参考替代方案:

Cells(lastRow + 1, 3).Resize(, lastColumn - 2).Formula = "=SUM(C1:C" & lastRow & ")"

答案 1 :(得分:1)

没有必要得到列的字母,使用数字,它更快。

此外,如果您尝试将整个列与同一列中的公式相加,您将收到循环引用错误。

For c = 3 To lastColumn    
    Cells(lastRow + 1, c).Formula = "=SUM(" & Range(Cells(1,c),Cells(lastRow, c)).Address & ")"   

Next

答案 2 :(得分:0)

一种解决方案是改变你的功能:

Function Col_letter(iCol As Long) As String
    If iCol > 0 And iCol <= Columns.Count Then
        Col_letter = Evaluate("substitute(address(1, " & iCol & ", 4), ""1"", """")")
    End If
End Function