• ベストアンサー

複数のシートにまたがる列の削除について

こんばんは、複数のシートを選択して特定の列を削除するVBAについて質問させてください。Sheet1とSheet2のA~C列を削除したく、以下のVBAを入力しましたが、削除されるのはSheet1のA~C列のみでSheet2に同様の処理が行われません。 手作業でやると複数のシートを選択のうえ列の削除ができるので、VBAでできないということはないと思うのですが、どのように記述すればよいのでしょうか・・・?!どなたかご教授よろしくお願いいたします! Sheets(Array("Sheet1","Sheet2")).Select Range("A:C").Delete Shift:=xlToLeft

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

Sub test02() For Each sh In ActiveWindow.SelectedSheets MsgBox sh.Name sh.Range("A:C").Delete Next End Sub でどうですか。 Sheet1とSheet2のシートタブをShiftキーを押しながら、クリックした状態で、実行してみました。 A,B,C列は消える。 SelectionはRangeをとらえられるが、シートの個々のシートの複数をとらえられない? 参考 http://www.relief.jp/docs/018455.html

osashi
質問者

お礼

あ、なるほど!Shiftボタンで手動で対象のシートをアクティブにしつつ、こういった処理でもできるんですね!しかも、メッセージボックスでどのシートの処理をしているのか表示し、分かりやすい…新しいやり方ですね!(^_^)手動で選択している対象に処理をするというやり方…URLもありがとうございます!活用させていただきたいと思います!m(_ _)m

その他の回答 (1)

回答No.1

惜しいです(笑)。 VBAは   Range("A:C").Delete と書かれると「アクティブシートにおいて」のみ処理してしまいます。   ※「指定したシート」と「アクティブなシート」の区別はお解りですか? つまりこれは   ActiveSheet.Range("A:C").Delete を略した書き方だとお考え下さい。 複数のシートに対して同じ処理を繰り返したいときは For~Nextを使用して繰り返してやるのが割と簡単です。 つまり、   Dim Sh As WorkSheet ' 変数「Sh」の宣言(要らないけど)   ' 指定された複数シートを順に変数「Sh」に格納   For Each Sh In Sheets(Array("Sheet1","Sheet2"))     Sh.Range("A:C").Delete  ' 「Sh」のA:C列を削除   Next ' 指定されたシートの数だけ繰り返し という具合です。 ちなみに、列全体削除ですので「Shift:=」は必要無いかもです。 以下、蛇足。 > VBAでできないということはないと思う VBAはほぼ常に「アクティブなモノ」に対して処理をしたがります。 シートにしても、セルにしても、オブジェクトにしても・・・です。 「グループ化」されていても「選択されている」だけであり、 アクティブではないシートでは処理されないわけです。 ここがエクセル本体の「グループ化」処理との違いで、 仰る「できないことはない」は半分正解といった感じです。 で、「グループ化」された全シートについて処理するには 前述の通り指定した(グループ化した)シート全てに対して いわゆる「繰り返し処理」をしてやろうじゃないのってことで   For Each In ~ Next 使ってやるのが手っ取り早いですよ、というお話でした。 別解(と言ってもやってることは同じですが)として※宣言省略   Sheets(Array("Sheet1","Sheet2")).Select   For Each Sh In ActiveWindow.SelectedSheets     Sh.Range("A:C").Delete   Next なんて書き方もありますが・・・まぁ、結果は一緒です(笑)。

関連するQ&A

  • Withステートメントの列指定について

    こんばんは、VBAのWithステートメントについて質問させてください! 複数のシートの複数列に処理をするために、以下のようにVBAを記述したのですが エラーコード438「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」というものが表示され、うまくいきませんでした。 記述の方法が悪かったのかと.Columnsの部分を「.Range("A:A,C:C")」に変えたりしたのですが、同様の結果でした。インターネットで見ていると、Withステートメントで複数のシート/複数の列を選択しているものを見たことがないような気がするのですが、そもそもWithステートメントは複数シート/列を選択することはできないのでしょうか…?!うまくいく方法があればご教授お願いしたいです…!よろしくお願いいたします(T_T) With Worksheets(Array("りんご", "みかん")) .Columns("A,C").Delete Shift:=xlToLeft End With

  • VBAによる列削除について教えて下さい

    VBA初心者です。いろいろと調べて見ましたが、「C列からアクティブセルの前列までを削除」する方法が分かりません。下の記述は「C列からX列」としていますが、X→「アクティブセルの前列」と読み替えるにはどうすればよろしいでしょうか。よろしくご指導下さい。 Sub 列削除() Columns("C:X").Select Selection.Delete Shift:=xlToLeft End Sub

  • ピボットテーブルのマクロでシートを指定、連続

    過去問?も確認しましたが、うまく行きません。 マクロの自動記録で作成し、TableDestination:=Sheets("Sheet1").Range("A1"),、と変更しましたが、 With ActiveSheet.PivotTables("ピボットテーブル1")のところで止まってしまいます。また、最後の行の Application.Run "'Pivot for 東京.xls'!Macro3"は、正しい記述でしょうか?  よろしくお願いします。 Workbooks.Open Filename:= _ "C:\Documents and Settings\ \デスクトップ\Access DB\Pivot for 東京.xls" Sheets("DSG").Select Columns("A:AZ").Select Range("Q1").Activate Selection.Delete Shift:=xlToLeft Range("A1").Select Sheets("GSG").Select Columns("A:AZ").Select Range("P1").Activate Selection.Delete Shift:=xlToLeft Range("A1").Select Sheets("ダート").Select Columns("A:AZ").Select Range("W1").Activate Selection.Delete Shift:=xlToLeft Range("A1").Select Sheets("芝").Select Columns("A:AZ").Select Range("AQ1").Activate Selection.Delete Shift:=xlToLeft Range("A1").Select Windows("Pivot01.xls").Activate Sheets("G").Select Range("E1").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "G!R1C5:R8594C11").CreatePivotTable TableDestination:=Sheets("Sheet1").Range("A1"), TableName _ :="ピボットテーブル1" With ActiveSheet.PivotTables("ピボットテーブル1")  '------------>ここで止まります .NullString = "0" .SmallGrid = False End With ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:="騎手名", _ ColumnFields:=Array("距離", "着順") With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("着順") .Orientation = xlDataField .Caption = "データの個数 : 着順" .Function = xlCount End With Application.CommandBars("PivotTable").Visible = False Windows("Pivot01.xls").Activate Sheets("1").Select Columns("A:DD").Select Selection.Delete Shift:=xlToLeft Sheets("D").Select Range("E1").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "D!R1C5:R9508C11").CreatePivotTable TableDestination:=Sheets("Sheet1").Range("A1"), TableName _ :="ピボットテーブル2" ActiveSheet.PivotTables("ピボットテーブル2").SmallGrid = False ActiveSheet.PivotTables("ピボットテーブル2").AddFields RowFields:="騎手名", _ ColumnFields:=Array("距離", "着順") With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("着順") .Orientation = xlDataField .Caption = "データの個数 : 着順" .Function = xlCount End With Application.CommandBars("PivotTable").Visible = False Windows("Pivot01.xls").Activate Sheets("1").Select Columns("A:DD").Select Selection.Delete Shift:=xlToLeft Sheets("GSG").Select Range("E1").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "GSG!R1C5:R81C11").CreatePivotTable TableDestination:=Sheets("Sheet1").Range("A1"), TableName _ :="ピボットテーブル3" With ActiveSheet.PivotTables("ピボットテーブル3") .NullString = "0" .SmallGrid = False End With ActiveSheet.PivotTables("ピボットテーブル3").AddFields RowFields:="騎手名", _ ColumnFields:="着順" With ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("着順") .Orientation = xlDataField .Caption = "データの個数 : 着順" .Function = xlCount End With Application.CommandBars("PivotTable").Visible = False Windows("Pivot01.xls").Activate Application.Run "'Pivot for 東京.xls'!Macro3" End Sub

  • ExcelVBAで任意のシートの任意のセル範囲を削除する方法

    http://okwave.jp/qa1222496.html こちらのページを参考にやってみたのですが、下記コードの3行目で 「アプリケーション定義またはオブジェクト定義のエラーです」となります コードは以下のとおりです ---------- X = Sheets("Sheet1").Cells(1, 1).Value  Sheets("Sheet2").Select Sheets("Sheet2").Range(Cells(X, 1), Cells(X, 7)).Select Selection.Delete shift:=xlUp ---------- Sheet1のA1には任意の数字が入り、その数字に対応したセル範囲を削除するというものです 仮に3と入っているとして、Sheet2のA3からG3までを削除して 行を詰めたいと考えています Sheet1のA1には確かに数字が入っていることは確認しております あともし可能であれば、Sheets("Sheet2").Selectをしなくても 行を削除する方法があればご教授願いたいと思います webでいろいろ調べてみましたが、Sheets("Sheet2").Select としないといけないようでした VBAはまったくの初心者ですので、そもそも調べ方が間違っているかもしれませんが・・・

  • VBA 右端列の削除

    このたび初めて質問させていただきます。 周囲にVBAを扱うひとがいないため、初歩的(たぶん?)な質問をさせてください。 以下のようなマクロを記録したのですが、一部を編集したいと考えております。 Columns("F:H").Select Selection.Insert Shift:=xlToRight Columns("A:B").Select Selection.Cut Range("F1").Select ActiveSheet.Paste Columns("J:J").Select→J列固定ではなく右端の列と設定したい。 Selection.Cut Range("H1").Select ActiveSheet.Paste Columns("A:B").Select Selection.Delete Shift:=xlToLeft Columns("J:J").SelectをJ列固定ではなく右端の列を1列設定し切り取りがしたいのです。Range("A2").End(xlToRight).Select ActiveCell.Offset(-1,0).End(xlDown).Select と書き換えてみたのですが、うまく作動しませんでした。 どなたか教えていただけませんでしょうか?

  • VBAで複数シート選択

    エクセルVBAで複数のシートを選択する場合、 Sheets(Array("AAA", "BBB", "CCC")).Select  と書くと思いますが、マクロを回してみないことにはシート名や枚数が特定できない場合、どのように記述したらいいのでしょうか? たとえば、新たに追加されたSheets(n)~Sheets(n+x)を選択するような場合です。 よろしくお願いします。

  • 同じ作業を複数のシートに実行させるにはどうしたらいいのでしょうか

    EXCELVBAであるシートに作業をさせるVBAを作成しました。 同じ作業を複数のシートに 実行させるにはどうしたらいいのでしょうか。 宜しくお願い致します。 **************作成したVBA********** Sheets("sheet1").Select ActiveWindow.SmallScroll Down:=66 Range("D2:D101").Select Selection.Cut   …50行ほどあります… *********************************** ↓ sheet1とsheet2に同じ作業をさせたい 以下のやりかただと長くなるためまとめたい    **************作成したVBA********** Sheets("sheet1").Select ActiveWindow.SmallScroll Down:=66 Range("D2:D101").Select Selection.Cut   …50行ほどあります… Sheets("sheet2").Select ActiveWindow.SmallScroll Down:=66 Range("D2:D101").Select Selection.Cut   …50行ほどあります… Sheets("sheet3").Select ActiveWindow.SmallScroll Down:=66 Range("D2:D101").Select Selection.Cut   …50行ほどあります… ***********************************

  • excel2003のマクロで全シートを選択したい場合

    初心者です、お願いします。 Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select Sheets("Sheet1").Activate Range("E1").Select Selection.NumberFormatLocal = "G/標準" ’現在文字列 ActiveCell.FormulaR1C1 = "7/1/2008" Range("F1").Select Selection.NumberFormatLocal = "G/標準"  ’現在文字列    ActiveCell.FormulaR1C1 = "5/31/2009"  上記の記述で1行目、全シートの選択を指定したいのです。 どのように変えたら良いかどなたか教えてください。

  • シートにデータがなければ削除するVBA

    こんばんは、VBAについて質問させてください(^O^) あるブックに32個のシートが入っています。 32個のシートのうち、セルA2にデータの入っているシートとそうでない シートがあります。(毎回変動します。) これを踏まえて、セルA2にデータが入っていればそのまま、 入っていなければそのシートを削除。 という作業をVBAでやろうと思って以下の通りVBAを記述したのですが、 シートが削除されるとシートの数が変わってしまうので、これではだめだと 思ったのですが、どのように記述すればいいのか分かりません(T_T) どなたかご教授いただけないでしょうか、よろしくお願いいたします。 Sub Macro1() Application.DisplayAlerts = False Dim i As Integer For i = 1 To 32 Sheets(i).Select If Range("A2").Value = "" Then Sheets(i).Delete End If Next i End Sub

  • EXCEL マクロ 列の削除に時間がかかる

    列はY列まで、行はおおよそ400~500行くらいのエクセルの表があります。 マクロで飛び飛びに行の削除を記録したのですが、処理に時間がかかっています。 もっとスムーズに早くする方法はありますか? ご教授おねがいします。 Range( _ "A:D,H:H,I:J,K:K,M:N,P:U,W:W,X:Y"). _ Select Selection.Delete Shift:=xlToLeft

専門家に質問してみよう