excel 2010:使用if-function设置RANGE.FORMULA-property

时间:2015-02-23 11:55:22

标签: excel-vba vba excel

我想根据条件的值设置RANGE.FORMULA属性。我需要使用IF(cond,truepart,falsepart)函数,因为我测试的条件需要一个ListObject引用。 truepart和falsepart本身也是公式。 示例原型代码如下:

Public Sub example()
    With ActiveSheet.Range("A1")
        .Formula = "=if(TRUE, ""=1"", ""=2"")"
        .Select
        .Copy
        .PasteSpecial xlPasteValues
    End With
End Sub

运行example()后,单元格A1显示字符串“= 1”。我期待公式的结果,这只是1。 如果我单击编辑行并按Enter键,公式将计算为1,但我想避免该步骤。

2 个答案:

答案 0 :(得分:1)

感谢您的评论。基于此,我改变了我的答案。我希望这次我能理解你:

Public Sub example()
    For Each rngCell In ActiveSheet.Range("A1")
        If rngCell.Formula Then
            rngCell.Formula = "=YourNewAndComplexFormulaHere(x, y, z)"
        Else
            rngCell.Formula = "=YourNewAndComplexFormulaHere(a, b, c)"
        End If
    Next rngCell
End Sub

答案 1 :(得分:1)

Sub tableColConditionalReplacement(tabName, colName)

    Set thisTable = ActiveSheet.ListObjects(tabName)
    nCol = Application.Match(colName, thisTable.HeaderRowRange.Value, 0)

    For ii = 1 To thisTable.ListRows.Count
        Set myCell = thisTable.DataBodyRange(ii, nCol)
        If myCell.Value > 13 Then
            myCell.Value = "OMFG!"
        Else
            myCell.Value = myCell.Value + 1
        End If
    Next ii
End Sub

我不确定这是否会捕获您想要做的事情,但它允许您访问表列数据,只给出列名。我确信有一些方法可以让它更通用,但我对VBA来说太新了,无法解决它们。