• ベストアンサー

エクセル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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

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

milkldap
質問者

お礼

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

その他の回答 (4)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.5

ご説明の通りだとすると、マクロを実行すると、新しくコピーされたシートが作成されて、そのシートがアクティブになった状態でエラーが発生して処理が止まっていると思います。 1)その状態から、手作業でB:C列を選択することは可能でしょうか? 2)エラーの番号または表示はどのようなものでしょうか? ご質問には関係ありませんが、削除作業の順序に関しては、ANo3様に賛成です。

回答No.3

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

milkldap
質問者

お礼

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

milkldap
質問者

補足

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

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

本題とは関係ありませんが、追加です。 >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)
回答No.1

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

関連するQ&A