- ベストアンサー
エクセルVBAでエラーがでます。
エクセルで以下のような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
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
yon56です。 ひょっとして、 Worksheets(1).Copy before:=Worksheets(1) Worksheets(1).Select Columns("B:C").Select を、Microsoft Excel Objects のsheetに書いたんじゃないでしょうね。 Moduleに書かないと、無効ですよ。 その理由は、勉強して下さい。 右から削除するのは、削除対象の列番号を変化させないためです。
その他の回答 (4)
- fujillin
- ベストアンサー率61% (1594/2576)
ご説明の通りだとすると、マクロを実行すると、新しくコピーされたシートが作成されて、そのシートがアクティブになった状態でエラーが発生して処理が止まっていると思います。 1)その状態から、手作業でB:C列を選択することは可能でしょうか? 2)エラーの番号または表示はどのようなものでしょうか? ご質問には関係ありませんが、削除作業の順序に関しては、ANo3様に賛成です。
- 米沢 栄蔵(@YON56)
- ベストアンサー率36% (37/102)
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で エラーが出てしまいます。 なぜでしょうか?
- xls88
- ベストアンサー率56% (669/1189)
本題とは関係ありませんが、追加です。 >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行にすることができます。
- xls88
- ベストアンサー率56% (669/1189)
Worksheets(1)が「シートの保護」をされているとかはないでしょうか。 ↓で「シートの保護」が解除されます。 Worksheets(1).Unprotect
お礼
ありがとうございます。 Selection.Delete Shift:=xltoright にするということでしょうか? 試してみて、leftと結果が変わらないような気がするのですが。