2

VBA を使用してシートに最後の値が含まれるまで、C列全体に「IF」式を適用する必要があります。

しかし、次のコードを使用するとエラー 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
4

2 に答える 2

1

だからあなたのシート名はSheetまたはSheet1?そして、OPが言及したシート名はSheet2です。これにより、1つのエラーが削除されます。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
于 2012-12-25T15:11:20.413 に答える
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の引用符内で引用符を2倍にする必要があります。
別のバリアント:

Sub test12()
    With Sheets("Sheet1")
        Intersect(.Range("c1").CurrentRegion, .Range("C:C")).Formula = "=IF(B1="""",TRIM(A1),TRIM(B1))"
    End With
End Sub
于 2012-12-25T15:47:47.670 に答える