CoCoのYDブログ

心に思い浮かんだことを少し掘り下げ発信します

複数のワークシートに対して処理を行う

こんにちは

今回は複数のワークシートに対して処理を行うプログラムを作成したいと思います。OkWaveを漁っていたら面白そうな質問があったため、先にやらせていただきます。まだ説明していない内容が多く含まれますご了承ください

 

ワークシートに対して処理をするVBAについて

 今回たまたまこちらの質問が目に付きまして自分なりに考えていました。この質問者さんのやりたいことは以下のとおりです。

・3シート目から最後のシートまで処理を行う

・ひとつのシートを処理したら次のシートを処理する

okwave.jp

For文を使えば可能です

For文をざっくり説明すると、For文内の処理を任意の回数実行することができるといったものです(超ザックリw)後々説明させていただきます。

自分が作るとしたらこんな感じですかね。

 

Sub test()
     Dim i As Long
     For i = 3 To Worksheets.Count
         With Worksheets(i)
             .処理
         End With
     Next i
End Sub

 

プログラムの解説

2行目、変数の宣言ですね。

3行目、For文です。

 今回は3シート目から処理を行いたいということなのでi = 3に設定しています。どこまで繰り返すのかというとWorksheets.Count つまりワークシートの数繰り返せという意味です。

 

4行目、Worksheets(i)の部分を先に説明します。

 Worksheets()のカッコ内に数字を入力することで、入力した番号のワークシートに対して処理を行うことができます。

 

例、Worksheets(1)の場合は最初のワークシートに対しての処理ですね。

 今回はカッコ内に変数iが入力されているためi番目のワークシートに対して処理を行います。変数iの範囲は3行目のFor文で3~ワークシートの数と設定しているためワークシートの3シート目~ワークシートの終わりまで処理を繰り返すことになります。

 

じゃあWithってなんぞ?

 今回の場合、複数のシートに対して処理を行うため

 Worksheets(i).セル=Worksheets(i).セルや

 Worksheets(i).命令

などごちゃごちゃしたコードになることが予想されます。

何番目のワークシートの何に対してどんな処理をするかを記入しないといけないためWorksheets(i).は絶対に必須です。

 

じゃあWithが入るとどうなるの?

Withとは主語を省略するような書き方です。

例えるなら下のような感じですね。

With CoCo

    .年齢 (CoCoの年齢)

    .好きなもの (CoCoの好きなもの)

End With

すっきりしてますよね。

注意として、With~で省略する場合は必ず.(ピリオド)をつけてください。ピリオドをつけないと~.処理として認識されません。

 

簡単に説明するとこんな感じですね。

この質問はまだ回答を受け付けているようなのでこのURLを貼り付ければベストアンサーをもらえるかもしれませんね。

(宣伝をお願いしますw自分が言いに行くのは恥ずかしくて)

今回はこんなところで失礼します。