我需要在整个 C 列中应用“IF”公式,直到使用 VBA 在工作表中具有最后一个值。
但如果我使用以下代码,我会收到错误 438。请帮帮我
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
我需要在整个 C 列中应用“IF”公式,直到使用 VBA 在工作表中具有最后一个值。
但如果我使用以下代码,我会收到错误 438。请帮帮我
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
所以你的工作表名称是Sheet
or Sheet1
?而 OP 提到的工作表名称是Sheet2
. 这消除了一个错误。其次,您需要将D
列设置为.Cells(.Rows.Count,"D").End(xlUp).Row)
而不是A
列。
这是一个非常难看的代码:它将最后使用的行计数到Long
变量中。然后相应地设置范围以设置formula
using 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
你的逻辑似乎有点奇怪,但这有效:
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