2015-12-14 32 views
0

我最初註釋掉的代碼需要用戶在公式添加到單元格後將公式拖入公式。我修改了下面的程序和我switched from a For each cell loop - 這可以通過For each循環結構完成嗎?利用Cell.address或其他方法?請假設我的變量都已定義。With對於Excel VBA中的每個循環,我如何引用公式中的單元格地址?

Dim client_row As Long 
'Dim v As Long 
Dim v As Variant 
Dim i As Integer 
i = 2 
client_row = 0 

    LASTROW2 = Range("B" & Rows.Count).End(xlUp).Row 
    Set rng2 = Range("N2:N" & LASTROW2) 
' For Each cell In rng2 
'  If cell.Offset(0, -13) <> "" Then 
'  cell.Formula = "=IFERROR(TEXT(IF(F2=""GBP"",($H2-(IF(LEN($C2)=7,BDH($C2&"" ""&""SEDOL"",""PX_LAST"",TODAY()),BDH($C2&"" ""&""CUSIP"",""PX_LAST"",TODAY()))))/$H2/100,IF(E2=""EQ"",($H2-(IF(LEN($C2)=7,BDH($C2&"" ""&""SEDOL"",""PX_LAST"",TODAY()),BDH($C2&"" ""&""CUSIP"",""PX_LAST"",TODAY()))))/$H2,($H2-(IF(LEN($C2)=7,BDH($C2&"" ""&""SEDOL"",""PX_LAST"",TODAY()),BDH($C2&"" ""&""CUSIP"",""PX_LAST"",TODAY()))))/$H2*100)),""0.00""),""PLEASE REVIEW"")" 
'  Debug.Print cell 
'  End If 
'  Next cell 

    For Each v In rng2 
      If v.Offset(0, -13) <> "" Then 
     v.Formula = "=IFERROR(TEXT(IF($F" & i & "=""GBP"",($H2-(IF(LEN($C2)=7,BDH($C2&"" ""&""SEDOL"",""PX_LAST"",TODAY()),BDH($C2&"" ""&""CUSIP"",""PX_LAST"",TODAY()))))/$H2/100,IF(E2=""EQ"",($H2-(IF(LEN($C2)=7,BDH($C2&"" ""&""SEDOL"",""PX_LAST"",TODAY()),BDH($C2&"" ""&""CUSIP"",""PX_LAST"",TODAY()))))/$H2,($H2-(IF(LEN($C2)=7,BDH($C2&"" ""&""SEDOL"",""PX_LAST"",TODAY()),BDH($C2&"" ""&""CUSIP"",""PX_LAST"",TODAY()))))/$H2*100)),""0.00""),""PLEASE REVIEW"")" 
     i = i + 1 
     Debug.Print i 
     End If 
    Next v 
+0

您可以使用specialcells獲得非空白單元格,然後抵消它插入formulas.'Columns(「A:A」)SpecialCells(。 xlCellTypeConstants,23).Offset(,13).Formula =「=」「MyFormula」「」'會這樣工作,因爲範圍應該自動遞增 – Davesexcel

+0

@Davesexcel您能舉個例子嗎? – phillipsK

回答

1

在這種情況下,您可以使用rng2.FormulaR1C1屬性代替。它允許你指定一個relative reference這意味着你不需要跟蹤當前行。

註釋掉部分可以寫成如下:

Set rng2 = Range("N2:N" & LASTROW2) 
For Each cell In rng2 
    If cell.Offset(0, -13) <> "" Then 
     cell.FormulaR1C1 = "=IFERROR(TEXT(IF(RC[-8]=""GBP"",(RC[-6]-(IF(LEN(RC[-11])=7,BDH(RC[-11]&"" ""&""SEDOL"",""PX_LAST"",TODAY()),BDH(RC[-11]&"" ""&""CUSIP"",""PX_LAST"",TODAY()))))/RC[-6]/100,IF(RC[-9]=""EQ"",(RC[-6]-(IF(LEN(RC[-11])=7,BDH(RC[-11]&"" ""&""SEDOL"",""PX_LAST"",TODAY()),BDH(RC[-11]&"" ""&""CUSIP"",""PX_LAST"",TODAY()))))/RC[-6],(RC[-6]-(IF(LEN(RC[-11])=7,BDH(RC[-11]&"" ""&""SEDOL"",""PX_LAST"",TODAY()),BDH(RC[-11]&"" ""&""CUSIP"",""PX_LAST"",TODAY()))))/RC[-6]*100)),""0.00""),""PLEASE REVIEW"")" 
     Debug.Print cell 
    End If 
Next cell 
0

如前所述在你的鏈接問題here,你也可以使用v.Column獲得在循環當前單元格的列。沒有像For Each cell In range這樣的特殊結構。 cell在這種情況下只是一個指向單元格的對象變量,就像您示例中的v一樣。

爲了讓您的生活變得輕鬆一些,只需將v標爲Range,然後智能感知應該會顯示v的可能屬性和方法。

盧克的回答是,雖然設置相對地址的另一種很好的方式;)

相關問題