検索

キーワード


目次

【Excel VBA】セルの範囲を利用して繰り返し処理を行う方法

  • 公開日:2023-06-26 13:21:07
  • 最終更新日:2023-06-26 09:21:26

Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!

フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。

皆さんこんにちは、エンジニアのIMMRです。


下記のようなサンプルブックがあったとします。


図1 サンプルブック

図1 サンプルブック


パソコンの年間売上台数リストです。

この図に対して、売り上げが10台以上の場合は

わかりやすく印をつけたいです。

 10台以上は

  ・文字を青く

  ・背景色は肌色

  ・太文字


下記がその実行結果のイメージ図です。


図2 サンプルブック(イメージ図)

図2 サンプルブック(イメージ図)

もし、上記のような作業を行うとしたら皆様でしたらどうしますか?


私の場合は、2重のFor Next ステートメントで作成する方法がまずは頭に浮かびます。

プログラムとしては下記のような感じです。


サンプルプログラム1

Sub test2()

Dim i As Long, j As Long

For j = 3 To 22
    For i = 2 To 13
        If Cells(j, i).Value > 9 Then
            Cells(j, i).Font.Color = RGB(0, 0, 255)
            Cells(j, i).Interior.Color = RGB(255, 242, 204)
            Cells(j, i).Font.Bold = True
        End If
    Next i
Next j

End Sub

こんな感じで2重のFor Nextを使って作成していきます。


繰り返し処理というとFor Nextが一番イメージにありますが、

今回は他の繰り返し処理であるFor Eachについて説明をします。


1.繰り返し処理(For Each)について

For Nextでは、指定した回数だけ繰り返しを行うのに対して、

For Eachでは、指定した範囲だけ処理を行う方法になります。


そのため、For Nextでは2重におこなった作業もFor Eachではそれが必要無くなります。

イメージでいうと下記の図のような感じです。


図3 For Next説明図

図3 For Next説明図


For Nextは1~ のカウントです。

そのため、図3のようなセルの(B3)~(D6)の範囲指定をする場合、

2つのFor Nextを使う必要があり、

1つ目のFor Nextが2の時、2つ目のFor Nextが3~6

1つ目のFor Nextが3の時、2つ目のFor Nextが3~6

1つ目のFor Nextが4の時、2つ目のFor Nextが3~6

という感じで行っていきます。


図4 For Each説明図

図4 For Each説明図

For Eachはカウントではなく、範囲で設定します。

そのため、セル(B3)~(D6)という感じで範囲の設定が出来ます。

そうすると

1個目のセル(B3)、2個目のセル(C3)、3個目のセル(D3)

4個目のセル(B4)、5語目のセル(C4)、・・・12個目のセル(D6)

といった感じで、2重ループとかをしないで、行うことが出来ます。


2.繰り返し処理(For Each)の記載方法

For Eachステートメントを使用する時は、

まず、Range型のオブジェクト変数を定義する必要があります。


このオブジェクト変数にFor Eachで指定した範囲の1つ1つが格納されます。


記載例

Dim オブジェクト変数名 As Range


その次に作成したオブジェクト名と範囲を指定してFor Eachステートメントを記載します。


記載例

For Each オブジェクト変数名 In セルの範囲
	***処理***
Next


これにより、範囲指定したセルの1つ1つがオブジェクト変数に格納されるようになりました。

そしたらその1つ1つに対して、処理(文字の色を変える)などを記載していきます。

オブジェクト変数の中に1つ1つのセルの箇所が格納されているので


Cells(j, i).Font.Color = RGB(0, 0, 255)

と記載しないで、

記載例

オブジェクト変数名.Font.Color = RGB(0, 0, 255)


と省略して記載することが出来ます。


3.繰り返し処理(For Each)のサンプルプログラム

For Eachステートメントを使用したものが下記のものになります。


図1 サンプルブックを使用して、図2 サンプルブック(イメージ図)ような結果が出力されるようにします。


サンプルプログラム2

Sub test2()

    Dim r As Range

    For Each r In Range("B3:M22")
        If r.Value > 9 Then
            r.Font.Color = RGB(0, 0, 255)
            r.Interior.Color = RGB(255, 242, 204)
            r.Font.Bold = True
        End If
    Next

End Sub

”r”という名前で、オブジェクト変数名を宣言しました。

そして範囲はセル(B3~M22)です。

これにより、指定した範囲内のセルを1つ1つを見ていきます。


そして、1つ1つのセルの値が9以上なら、文字の色を変える等の処理を行うことになります。


4.繰り返し処理(For Each)のサンプルプログラム(実行結果)

上記サンプルプログラム2を実行した結果です。


図5 サンプルプログラム実行結果

図5 サンプルプログラム実行結果

範囲であるセル(B3~M22)において全て確認して、

条件に当てはまるセルについては、文字の色を変えています。

図2 サンプルブック(イメージ図)と同じ結果です。


セルの範囲を利用して繰り返し処理を行うことができました。


【著者】

Imamura

「挑戦心」を忘れずに、新しいことにチャレンジしています。 資格:VBAエキスパート Excel VBA(ベーシック/スタンダード) 等

編集した記事一覧

正社員/フリーランスの方でこのようなお悩みありませんか?

  • 自分に合う案件を定期的に紹介してもらいたい
  • 週2、リモートワークなど自由な働き方をしてみたい
  • 面倒な案件探し・契約周りは任せて仕事に集中したい

そのような方はぜひ、Workteriaサイトをご利用ください!

  • 定期的にご本人に合う高額案件を紹介

  • リモートワークなど自由な働き方ができる案件多数

  • 専属エージェントが契約や請求をトータルサポート

よく読まれている記事