2015-12-14 35 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的可能属性和方法。

卢克的回答是,虽然设置相对地址的另一种很好的方式;)

相关问题