For ~ Next で繰返し処理を実行します

 「乱数割当」は短くて簡単なマクロですが、「 For ~ Next」と「 For Each ~ Next 」の2種類の繰返し処理ステートメントで「 IF ~ End If 」条件分枝を挟んでいるので、入門編としては少し難しいかもしれません。できるだけ丁寧に解説します。いきなりですが、「乱数割当」マクロの全文を載せてしまいます:

  Sub 乱数割当()

   Dim i As Integer
   Dim c As Range

   Randomize

   For i = 1 To 4

    For Each c In Worksheets(i).Range("c1:c1000")
    If c.Value <> "" Then
    c.Offset(0, -1).Value = Rnd
    End If
    Next

   Next

  End Sub

 

For ~ Next ステートメント

 For ~ Next ステートメントを使うと、同じ処理を繰り返すことができます。
 For のあとの i は予め宣言しておいた整数型の変数です。その後ろの「 = 1 To 4」という記述は、「 i に 1 から 4 の値を順番に格納していきますよ」というステートメントです。1つ値を入れるごとに Next までの作業を 1 回行います。Next は「次の i さんどうぞ」というステートメントで、1 の次は 2 、2 の次は 3 を呼び出します。こうして計 4 回同じ処理を行うわけです。具体的に書くと次のような処理の流れになります。

 i に 1 を格納
  <i = 1 に関する処理を実行>
 i に 2 を格納
  <i = 2 に関する処理を実行>
 i に 3 を格納
  <i = 3 に関する処理を実行>
 i に 4 を格納
  <i = 4 に関する処理を実行>
 処理を終了

 この 4 つの整数は「いつ」、「どこ」、「誰」、「何」の 4 つのワークシートオブジェクトに付される番号です。つまり各シートに対して同じ処理を繰り返すステートメントです。 Worksheets("いつ") の代わりに Worksheets(1) のように番号指定することで、For ~ Next で一気に処理させるような記述にしてマクロを短く簡潔にしています。
 

For Each ~ Next

 For ~ Next の中にもう1つ For Each ~ Next という記述が入れ子になっています。For ~ Next は番号を割り振って繰返し作業を処理しましたが、 For Each ~ Next は指定したオブジェクト全てに対して繰り返し処理を実行します。

For Each c In Worksheets(i).Range("c1:c1000")

 Worksheets(i) は Worksheets プロパティを用いて Worksheets コレクションの中から i 番目の Worksheet オブジェクトを参照しています。先程お話したように i には 1 から 4 の整数が入ることになっています。

 .Range("c1:c1000") はそのシートからセル c1 からセル c1000 までの範囲のセルを取得しています。 今は c 列には 5 つのデータが入っているのですが将来的にデータが増えることを想定して多めにとってあります。 1000 個のセルを取得しているのですが、実はこのように複数まとめて取得したセルも1つの Range オブジェクトとして扱われます。しかし Range オブジェクト型変数 c にはあくまで1つのセルしか格納できません。したがって「左から i 番目のシートにおいて、まとめて指定したセル c1 からセル c1000 までの範囲のセル1つ1つごとに処理を実行します」という意味の記述になっています。その下の記述は IF を使った条件分枝です。次回はこの部分について説明します。
 

Let's play the Itsu-Doco Game!(いつどこゲームで遊びましょ!)

ふてくされるピカソさん

・小春日和に、ウランバートルでピカソがふてくされていた。それから三角関数が嫌いになった。

・大航海時代に。アブダビで悪運が強い女が暖房を止めた。その後、悪い仲間と付き合いをやめた。

・葬式の日に、屋根裏部屋で宿老が殴られた。その後、青大将にぱくりと噛みつかれた。(踏んだり蹴ったりだよ ...... かわいそう)

・始業式の日に、廃屋で薄幸な少女がしゃがんだ。その後、冷蔵庫の中をのぞいた。(薄幸でもお腹は空くから、仕方ないよね)

・去年、荒野で小板橋雄哉さんが悪者に因縁をつけられた。そのあと野菜を切っていた。
 

将門さんがパソコンに四苦八苦しています

・にゃんこ記念日に、空港でゲーム中毒の男が「うーむ」と考え込んだ。それからポテトチップスを食べた。(「このままゲームばかりやっていていいのか」とか思っているのかな? こばともゲームは大好きですよ)

・こばとたちが山登りをした日に、親戚の家で将門が青ざめていた。その後、ソフトをインストールしようとして失敗した。(将門さん、パソコンの使い方がわからないようですね。仕方ないですよ。昔の人ですもん)

・首相が任命されたときに、隠れ家で我を忘れた人がおばさんに「いい加減にしなさい」と叱った。そのあと沙希さんに怒られた。(人のこと怒る前に、まず自分を顧みないとね)

・紀元前1万年に、売店でギャルが家路を急いだ。そして、あまり好い顔をしなかった。

・仕事中に池袋で召使が彼女を説き伏せた。そのあとこばとを連れてきた。(召使:「お嬢様、今日からこばとさんに家庭教師を頼みました。しっかりお勉強するんですよ」)

・夜、アムステルダムで友里ちゃんがじっと腕時計を眺めていた。そしてお見舞いのメールを送った。(時差を考えていたんですか?)

スポンサードリンク
末尾大型広告
末尾大型広告

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)