複数のシートを一括処理したいけど、手作業はめんどくさい
マクロでできる気はするけど、コードがいまいちわからない
Excelの複数シートに同じ処理をしたい場面って、意外と多いのではないでしょうか。
複数シートの同じ場所からコピペしたり、すべてのシートに日付を入れたり、複数シートの処理はいろいろな場面で発生します。ただ手作業が面倒で、あきらめることも多いのではないでしょうか。
そんなときに役立つのが、VBAを使った「シートのループ処理」です。VBAを使えば、簡単に一括処理をすることができます。
今回は、初心者でも簡単に使える「コピペで動く」シートループ処理のコードを解説します。この記事を参考に、シートを一括処理して効率化を進めてみてください!
コピペで使える:シートを一括処理するコード
まずはシートを一括処理する基本コードを紹介します。基本的にこのコードをコピペして、処理を入力すれば、すべてのシートをループ処理できるようになります。
Dim i As Long
For i = 1 To Worksheets.Count
If Worksheets(i).Name = "Sheet1" Then
'スキップするシート名の設定( 初期値は「Sheet1」)
Pass
Else
' 必要な処理を記述
Worksheets(i).Range("A1").Value = "処理済み"
End If
Next
このコードであれば、シートが増減しても動作させることができ、処理を適用したくないシート名を入れることもできるため、多くの場面で使うことができます。
必要な処理については、基礎コードやChatGPTを使いながら作っていく必要があります。基礎コードについては、以下の記事を参考にしてください。
基礎の部分や細かな処理は個別になりますが、シートの一括処理は、コードをコピペすることで使用することができます。そしてここからは、VBAでのシート指定を紹介します。
コピペコードでも使用している2種類と汎用性の高い1種類、合計3種類の方法を解説します。
VBAでシートを指定する方法
シートの名称で指定
シートの名前を直接指定する方法です。コピペで使えるコードでは、スキップするシート名を選択するときに使っています。
Worksheets("Sheet1").Range("A1").Value = "名前指定"
Sheets("Sheet1").Range("A1").Value = "名前指定"
WorksheetsでもSheetsでも、どちらでも問題はありません。この方法はシート名が確定している場合にわかりやすく便利です。
ただ、名前を変更するとエラーになるため注意が必要です。
シートのインデックス番号で指定
シートの順番を基準に指定する方法です。
コピペで使えるコードでは、ループ処理をするときに使っています。
Worksheets(1).Range("A1").Value = "インデックス指定"
Worksheetsの後ろのカッコの数字を変えることで、シートの指定をすることができます。この数字は、1番左のシートから順に番号が割り当てられます。
この指定方法の場合、順番が変わると処理する場所が変わってしまうので注意が必要です。シートを新たに作成したり、削除したりすると順番が入れ替わって動作がうまくいかないことがあるので注意してください。
また非表示のシートも数に含まれるので気を付けましょう。
シートのオブジェクト名で指定
VBAのプロジェクトウィンドウに表示されているオブジェクト名を使って、シートの指定を行います。あまりメジャーではないですが、一番安定するのがこの方法です。
そもそもプロジェクトウィンドウは、VBE(VBAの管理画面)の「表示」から「プロジェクトエクスプローラー」を選択することで確認することができる画面です。
そこに表示されている「○○(シート名)」の○○の部分を使うことで、シートの指定をすることができます。
Sheet1.Range("A1").Value = "オブジェクト指定"
この方法は名前変更や順番の影響を受けないので、安定して動作します。確認するのが少し面倒ですが、慣れると一番トラブルが少ない方法となります。
なおVBEのような基本的な用語についても別記事で解説していますので、ぜひ参考にしてみてください。
まとめ
VBAでシートを一括処理する方法と、VBAでのシート指定の方法を解説しました。
今回のコードはコピペするだけで動作する便利なコードです。基礎的な知識やChatGPTでの肉付けは必要となりますが、こういったコピペで動く基本構文を組み合わせることで、コーディングのスピードは格段に速くなります。
これらのコードは日々の業務効率化に大きく貢献しますので、ぜひ活用してみてください!
コメント