重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

エクセルで以下のようなVBAをつくりましたが
Columns("B:C").Select
でエラーがでます。
初歩的なことですが教えてください。
Sub Macro3()
'
' Macro3 Macro
Worksheets(1).Copy before:=Worksheets(1)
Worksheets(1).Activate
Columns("B:C").Select
Selection.Delete Shift:=xlToLeft
Columns("C:L").Select
Selection.Delete Shift:=xlToLeft
Columns("H:H").Select

Columns("L:AA").Select
Selection.Delete Shift:=xlToLeft

End Sub

A 回答 (5件)

yon56です。


ひょっとして、
Worksheets(1).Copy before:=Worksheets(1)
Worksheets(1).Select
Columns("B:C").Select
を、Microsoft Excel Objects のsheetに書いたんじゃないでしょうね。
Moduleに書かないと、無効ですよ。
その理由は、勉強して下さい。
右から削除するのは、削除対象の列番号を変化させないためです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
Selection.Delete Shift:=xltoright
にするということでしょうか?
試してみて、leftと結果が変わらないような気がするのですが。

お礼日時:2008/09/17 15:37

ご説明の通りだとすると、マクロを実行すると、新しくコピーされたシートが作成されて、そのシートがアクティブになった状態でエラーが発生して処理が止まっていると思います。



1)その状態から、手作業でB:C列を選択することは可能でしょうか?
2)エラーの番号または表示はどのようなものでしょうか?

ご質問には関係ありませんが、削除作業の順序に関しては、ANo3様に賛成です。
    • good
    • 0

Worksheets(1).ActivateのActivateが間違いです。


ActivateをSelectにしたらOKです。
WorkbooksはActivate、WorksheetsはSelectでアクティブにします。
ついでですが、
列を削除するのに、シートの左側から削除していますが、
この方法だと列B:Cを削除すると、旧D:E列が新B:C列となり、
次の削除列指示がややこしくなるので、シートの右側から削除するようお勧めします。

この回答への補足

Worksheets(1).Copy before:=Worksheets(1)
Worksheets(1).Select
Columns("B:C").Select

上記のように書き直したのですが、
やはりColumns("B:C").Selectで
エラーが出てしまいます。
なぜでしょうか?

補足日時:2008/09/09 12:01
    • good
    • 0
この回答へのお礼

ありがとうございます。^^

>シートの右側から削除するようお勧めします。
はどういうことでしょうか?

お礼日時:2008/09/09 11:55

本題とは関係ありませんが、追加です。



>Columns("B:C").Select
>Selection.Delete Shift:=xlToLeft

Selection.Delete Shift:=xlToLeft
の、Selectionは
Columns("B:C").Select
で、Selectした実態はColumns("B:C")です。
ということで、SelectとSelectionが相殺されて
Columns("B:C").Delete Shift:=xlToLeft
と、1行にすることができます。
    • good
    • 0

Worksheets(1)が「シートの保護」をされているとかはないでしょうか。



↓で「シートの保護」が解除されます。
Worksheets(1).Unprotect
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!