簡體   English   中英

對於Excel VBA中的每個循環,我如何引用公式中的單元格地址?

[英]With For each loop in Excel VBA how do I reference the cell address within the formula?

我注釋掉的代碼最初要求用戶在將公式附加到單元格后向下拖動公式。 我修改了以下步驟,並For each cell循環切換了 -可以通過For each循環結構來完成此操作嗎? 利用Cell.address還是其他東西? 請假設我的變量都已定義。

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

在這種情況下,您可以改用rng2.FormulaR1C1屬性。 它允許您指定一個相對引用 ,這意味着您無需跟蹤當前行。

注釋掉的部分可以這樣寫:

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

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

為了使您的生活更輕松一點,只需將v聲明為Range ,然后IntelliSense應該向您顯示v可能屬性和方法。

盧克的答案雖然是設置相對地址的另一種好方法;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM