宏vba需要将公式应用于列,直到它在最后一行中有值

时间:2012-12-25 14:50:01

标签: vba if-statement formula

我需要在整个C列中应用“IF”公式,直到使用VBA在表格中有最后一个值。

但如果我使用以下代码,我将收到错误438。 Plz帮帮我

Sub test11()

With Sheets("Sheet")
        .Range("c1:c" & .Cells(.Rows.Count, "A").End(xlUp).Row).Formula = "=IF(B1="",TRIM(A1),TRIM(B1))"

    End With



End Sub

2 个答案:

答案 0 :(得分:1)

因此,您的工作表名称为SheetSheet1? OP提到的工作表名称为Sheet2。这消除了一个错误。其次,您需要将D列设置为.Cells(.Rows.Count,"D").End(xlUp).Row)而不是A列。

这是一个非常难看的代码:它将最后一次使用的行计入Long变量。然后相应地设置范围,以便使用formula设置AutoFill

Sub test11()
Dim l As Long    

l = Sheets(1).Range("d1:d" & Sheets(1).Cells(Sheets(1).Rows.Count, "D").End(xlUp).Row).Count
    With Sheets("Sheet1")
        .Range("d1").Formula = "=IF(IsNull(B1),TRIM(A1),TRIM(B1))"
        .Range("d1").AutoFill Destination:=Range("d1:d" & l), Type:=xlFillDefault
    End With
End Sub

答案 1 :(得分:0)

你的逻辑看起来有点奇怪,但这很有效:

Sub test11()
    With Sheets("Sheet1")
        .Range(.Range("c1"), .Range("C" & .Rows.Count).End(xlUp)) = "=IF(B1="""",TRIM(A1),TRIM(B1))"
    End With
End Sub

你需要在VBA中用引号加倍引号。
另一种变体:

Sub test12()
    With Sheets("Sheet1")
        Intersect(.Range("c1").CurrentRegion, .Range("C:C")).Formula = "=IF(B1="""",TRIM(A1),TRIM(B1))"
    End With
End Sub