2015-02-23 21 views
0

我想根據條件的值設置RANGE.FORMULA屬性。我需要爲此使用IF(cond,truepart,falsepart)函數,因爲我正在測試的條件需要一個ListObject引用。 truepart和falsepart本身又是公式。 示例原型代碼如下:Excel 2010:使用if函數設置RANGE.FORMULA屬性

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

運行示例()之後,單元格A1顯示了字符串 「= 1」。我期待公式的結果,這只是1. 如果我點擊編輯行並按Enter鍵,公式將被評估爲1,但我想要避免該步驟。

回答

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 
+0

謝謝拉爾夫。顯然,我的問題還不夠嚴謹。實際上,我需要的是作爲if函數的結果的「公式」。公式「= 1」和「= 2」只是極其複雜的公式的最簡單示例。我不想通過真實公式的複雜性來掩蓋我的問題。但是,如果交互式輸入,則公式「= 1」應該在單元格中評估爲1。所以不幸的是這並不能解決我的問題。 – 2015-02-23 14:39:54

+0

再次感謝。我也想到了這個解決方案,但它並沒有導致我期望的結果。原因是我在這裏簡單描述爲TRUE的條件使用ListObject標題行「標籤」來引用數據正文範圍列(對不起,如果我不知道正確的術語)。我有一個名爲[x]的標題的ListColumn,並且我想在條件中使用[x],例如[X] <3。問題在於[x]只能用於Spreadsheet-Formula中,而不能在VBA條件中使用,正如您所建議的那樣。或者我錯了這個假設? – 2015-02-24 07:43:36

+0

如果你想引用VBA中的ListObject,你可能想看看這個答案:http://stackoverflow.com/questions/7643652/finding-active-cells-column-header-name-using-vba-in-excel – Ralph 2015-02-24 08:07:33

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來說太陌生了。