在VBA中使用“sumif”和“.formula”以及变量

时间:2018-05-17 17:20:58

标签: excel vba

我需要在公式“sumif”中迭代“条件”。变量类型是“字符串”但我的代码不起作用。我无法保持变量字符串的条件。如果我能用“变量”解决问题,代码就是一个例子。我只需要简单地迭代该变量。代码是:

Private Sub cmd_psps_Click()

Dim prueba As Integer
Dim var As String
prueba = Sheets("PRUEBAS").Index

var = "a"
Sheets(prueba).Cells(5, 16).Formula = "=sumif(" & Range(Cells(4, 13), 
Cells(8, 13)).Address() & "," & var & "," & Range(Cells(4, 14), Cells(8, 
14)).Address() & ")"
End Sub

问题在于“& var&”,使用该代码,工作表中的单元格如下所示:

=SUMAR.SI($M$4:$M$8;a;$N$4:$N$8)

但我需要:

=SUMAR.SI($M$4:$M$8;"a";$N$4:$N$8)

我可以使用带有简单文本的条件,例如“a”。但我需要用变量迭代条件。

1 个答案:

答案 0 :(得分:0)

不是严格的答案,但是对于代码可读性,当使用手动Excel的公式构造时,最好有一个方便的函数来连接字符串:

Function FormatString(s As String, ParamArray args() As Variant)
    Dim x%
    For x = LBound(args) To UBound(args)
        s = Replace$(s, "{" & x & "}", args(x))
    Next
    FormatString = s
End Function

用法:

Sub G()
    MsgBox FormatString("I have {0} apples and {1} oranges", 10, 20)
End Sub

您可以使用占位符{0}{1}等参数。这就像C#的String.Format所做的那样。

因此,您的公式将如下所示:

Sub G()

    Dim sFormula$
    Dim var$
    var = "A1"

    sFormula = FormatString( _
        "=SUM({0},{1},{2})", _
        Range(Cells(4, 13), Cells(8, 13)).Address(), _
        var, _
        Range(Cells(4, 14), Cells(8, 14)).Address())

End Sub

现在代码看起来更具可读性。