2017-04-25 43 views
1

我努力解決這個問題,因爲有些時候,但我無法對自己的顯然。VBA .formula = If()與單元格(x,y)作爲動態參考

ThisWorkbook.Sheets("GesamteListe").Cells(X, 18).Formula = _ 
       "=If(" & Cells(X, 16) & " " = " " & Cells(X, 17) & ",""fine"",""not fine"")" 

我想比較兩個單元,它總是在列16和17,但兩者都是通過由行動前確定X動態。我不能讓他接受我最後看起來應該是這樣(示例性)的細胞(X,16)和細胞(X,17):

if(P3 = Q3;「fine」;「not fine 「)

很容易我猜,但我試過各種版本,沒有作品。

在此先感謝!

回答

3

您需要使用.Address

"=If(" & Cells(X, 16).Address & " = " & Cells(X, 17).Address & ",""fine"",""not fine"")" 

也有周圍的=

+0

對於好奇心 - 你可以得到'.Address'沒有絕對的參考?說OP想要在VBA中創建該公式,然後在工作表中向下拖動? (...忽略他可以設置範圍在代碼中具有公式)。編輯 - 是的,你可以。我只是意識到你可以做'.Address(false,false)'來保持行和列不是絕對的。 – BruceWayne

+1

@BruceWayne你的意思是'.Address(False,False)'? https://msdn.microsoft.com/zh-cn/library/office/ff837625(v=office.15).aspx – Ralph

+1

@BruceWayne或'.Address(0,0)' –

2

太多"也許這也是一個可行的替代由@ScottCraner提供的解決方案:

ThisWorkbook.Sheets("GesamteListe").Cells(x, 18).FormulaR1C1 = _ 
       "=If(RC[-2]=RC[-1],""fine"",""not fine"")" 

注意,如果是臨時噸X是以下類型的環的一部分:

Dim x As Long 

For x = 2 To 20 
    ThisWorkbook.Worksheets("GesamteListe").Cells(x, 18).FormulaR1C1 = _ 
     "=If(RC[-2]=RC[-1],""fine"",""not fine"")" 
Next x 

上述式可以短切該循環用下面的公式:

ThisWorkbook.Worksheets("GesamteListe").Range("R2:R20").FormulaR1C1 = _ 
    "=If(RC[-2]=RC[-1],""fine"",""not fine"")" 
+0

這裏總共環繞着:) – Fynn

相關問題