具有参考RC范围的VBA IF和公式

时间:2016-04-07 09:44:55

标签: vba excel-formula

我有以下代码但是当我尝试运行宏时出现错误  根据我的宏,根据标准有一个移动列。因此我添加了代码来获取列号。见ColRef1
我遇到的问题是当我尝试将其添加到我的IF AND公式中时。问题在于公式的第一部分,也许我写错了。 IF(AND(RC&ColRef1&>0,U2>0)

Sub Test()
    Dim GetRow1 As Integer
    Dim GetRow2 As Integer
    Dim GetRow3 As Integer
    Dim GetCol1 As Range
    Dim GetCol2 As Range
    Dim ColRef1 As Integer

    'finds last row on Client Options tab
    Sheets("Client Options").Select
    GetRow1 = ActiveSheet.Cells(Rows.Count, "G").End(xlUp).Row

    'finds last row on Client Response tab
    Sheets("Client Response").Select
    GetRow2 = ActiveSheet.Cells(Rows.Count, "E").End(xlUp).Row

    'finds last row on Recon tab
    Sheets("Recon").Select
    GetRow3 = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row

    'finds Column that contains Client Options since this is a moving column depending on number of brokers on recon
    Sheets("Recon").Select
    Set GetCol1 = ActiveSheet.UsedRange.Find("Client Options", , xlValues, xlWhole)
    ColRef1 = GetCol1.Column

    Sheets("Recon").Select
    Range("B2").Value = "=IF(AND(RC&ColRef1&>0,U2>0),""FALSE"",IF(T2>0,(VLOOKUP(A2,'Client Options'!G$2:L$" & GetRow1 & ",6,FALSE)),IF(U2>0,(VLOOKUP(A2,'Client Response'!E$2:G$" & GetRow2 & ",3,FALSE)))))"


End Sub

1 个答案:

答案 0 :(得分:1)

  • 您在公式中将R1C1样式与A1样式相结合。
  • ColRef1在字符串中,因此它尝试引用RC&ColRef1而不是RC5(例如)。
  • 旁注 - 您无需选择要使用的工作表。

试试此代码(请注意 - U2等地址应为R2C21)。

Sub Test()

    Dim GetRow1 As Long
    Dim GetRow2 As Long
    Dim GetRow3 As Long
    Dim GetCol1 As Range
    Dim ColRef1 As Long

    'finds last row on Client Options tab
    GetRow1 = Sheets("Client Options").Cells(Rows.Count, "G").End(xlUp).Row

    'finds last row on Client Response tab
    GetRow2 = Sheets("Client Response").Cells(Rows.Count, "E").End(xlUp).Row

    'finds last row on Recon tab
    GetRow3 = Sheets("Recon").Cells(Rows.Count, "A").End(xlUp).Row

    'finds Column that contains Client Options since this is a moving column depending on number of brokers on recon
    Set GetCol1 = Sheets("Recon").UsedRange.Find("Client Options", , xlValues, xlWhole)
    If Not GetCol1 Is Nothing Then
        ColRef1 = GetCol1.Column

        Sheets("Recon").Range("B2").FormulaR1C1 = "=IF(AND(RC" & ColRef1 & " >0,R2C21>0),FALSE,IF(R2C20>0,(VLOOKUP(R2C1,'Client Options'!R2C7:R" & GetRow1 & "C12,6,FALSE)),IF(R2C21>0,(VLOOKUP(R2C1,'Client Response'!R2C5:R" & GetRow2 & "C7,3,FALSE)))))"
    End If

End Sub