【ループ処理でセルの値を読みとる】

 1 多数のセルの行番号と列番号を直接指定して値を読みとる

 2 多数のセルの行番号と列番号を変数と定数で指定して値を読みとる

 3 ループ処理で多数行のセルの値を読みとる

 4 ループ処理で多数列のセルの値を読みとる

 5 ダブルループ処理で多数行×多数列のセルの値を読みとる

多数のセルの行番号と列番号を変数と定数で指定して
値を読みとる

パイさん

Excel VBA/マクロのCells行番号列番号については三つの指定方法がありますが、

 今回は、Cellsオブジェクトの引数となる行番号列番号定数で指定する方法、

 それと、Cellsオブジェクトの引数となる行番号列番号変数で指定する方法により、

 多数のセルの値を読みとってみます。


 Cellsオブジェクトの値を読みとって変数に格納する構文を再び紹介します。

Img4_2_1

 最後に、変数の値を別のセルの値に格納します。

 変数の値を読みとってRangeオブジェクトの値に格納する構文は次のようになります。

Img4_2_2

 今回も、多数のセルの値を読みとることになるので、『ループ処理で多数行×多数列のセルに書きこむ』

 のときにつくったマクロ『行番号と列番号をカウントアップするループ処理2』をつかって、

 あらかじめ10行×10のセルに値を書きこんでおきましょう。」

Img4_2_4

1. 1行・1列

パイさん

1行目・1列目のセル値を読み取り、いったん変数『セル値』に格納。

 その後、セルA12変数『セル値』を設定しましょう。

 このとき行番号定数『列番号定数『としましょう。」

ソンくん

セル値』を文字列型で変数宣言

 』を値『1』として定数宣言

 』を値『1』として定数宣言

 

 変数『セル値』に、定数『定数『のセル値を格納

 最後に、セルA12に、変数『セル値』を格納します。」

Sub 変数と定数で指定して読みとり1()

 Dim セル値 As String

 Const = 1

 Const = 1

 セル値 = Cells(, ).Value

 Range("A12").Value = セル値

End Sub

パイさん

「それでは、そのマクロを実行してみましょう。」

Img4_2_6

ソンくん

1行目・1列目のセル値『1行1列』が読みとられて、セルA12に書きこまれました。」


2. 1~3行・1列

パイさん

列を1列目に固定して、行を1行目から3行目まで1行ずつカウントアップしていきながら、

 そのつどセル値を読みとり文字連結変数『セル値』に格納。

 その後、セルA12変数『セル値』を設定しましょう。」

 このとき行番号変数『列番号定数『としましょう。」

ソンくん

セル値』を文字列型として変数宣言

 』を整数型として変数宣言

 』を値『1』として定数宣言

 

 』に値『1』を格納

 変数『セル値』に、1行目・1列目のセル値を格納

 』に値『2』を格納

 変数『セル値』に、一つ前の変数『セル値』2行目・1列目のセル値文字連結し格納

 』に値『3』を格納

 変数『セル値』に、一つ前の変数『セル値』3行目・1列目のセル値文字連結し格納

 最後に、セルA12変数『セル値』を格納します。」

Sub 変数と定数で指定して読みとり2()

 Dim セル値 As String

 Dim As Integer

 Const = 1

  = 1

 セル値 = Cells(, ).Value

  = 2

 セル値 = セル値 & Cells(, ).Value

  = 3

 セル値 = セル値 & Cells(, ).Value

 Range("A12").Value = セル値

End Sub

パイさん

3に係る順次処理が記述されました。

 それでは、セルA12の値をクリアしてから、そのマクロを実行してみましょう。」

Img4_2_8

ソンくん

1~3行目・1列目のセル値が読みとられて文字連結されて、セルA12に書きこまれました。

 でも、セルから値がはみ出てて見えにくいな。」

パイさん

「そういうときは、セル結合をつかうと良いです。まず、セルA12からセルJ12までを選択してください。」

Img4_2_9

ソンくん

セルA12からセルJ12までを選択しました。」

パイさん

「次に、Ctrlキーと1キーを同時に打ってください。」

ソンくん

「セルの書式設定という画面があらわれました。」

Img4_2_10

パイさん

「そして、配置タブを選んで『文字の制御』の中の『セルを結合する』をクリックして

 チェックマークがついている状態にしてからOKボタンをクリックしてください。」

Img4_2_11

ソンくん

セルA12からセルJ12までが結合されて見やすくなりました。」

パイさん

「このように、セルを結合すれば、値がはみ出ず見やすい表をつくることができます。」


3. 1行・1~3列

パイさん

行を1行目に固定して、列を1列目から3列目まで1列ずつカウントアップしていきながら、

 そのつどセル値を読みとり文字連結変数『セル値』に格納。

 その後、セルA12変数『セル値』を設定しましょう。

 このとき行番号定数『列番号変数『としましょう。」

ソンくん

セル値』を文字列型として変数宣言

 』を値『1』として定数宣言

 』を整数型として変数宣言

 

 』に値『1』を格納

 変数『セル値』に、1行目・1列目のセル値を格納

 』に値『2』を格納

 変数『セル値』に、一つ前の変数『セル値』1行目・2列目のセル値文字連結し格納

 』に値『3』を格納

 変数『セル値』に、一つ前の変数『セル値』1行目・3列目のセル値文字連結し格納

 最後に、セルA12変数『セル値』を格納します。」

Sub 変数と定数で指定して読みとり3()

 Dim セル値 As String

 Const = 1

 Dim As Integer

  = 1

 セル値 = Cells(, ).Value

  = 2

 セル値 = セル値 & Cells(, ).Value

  = 3

 セル値 = セル値 & Cells(, ).Value

 Range("A12").Value = セル値

End Sub

パイさん

3に係る順次処理が記述されました。

 それでは、セルA12の値をクリアしてから、そのマクロを実行してみましょう。」

Img4_2_13

ソンくん

1行目・1~3列目のセル値が読みとられて文字連結されて、セルA12に書きこまれました。」


4. 1~3行・1~3列

パイさん

行を1行目から3行目まで1行ずつカウントアップしていきながら、

 列も1列目から3列目まで1列ずつカウントアップしていき、

 そのつどセル値を読みとり文字連結変数『セル値』に格納。

 その後、セルA12変数『セル値』を設定しましょう。

 このとき行番号変数『列番号変数『としましょう。」

ソンくん

セル値』を文字列型として変数宣言

 』を整数型として変数宣言

 』を整数型として変数宣言

 

 』に値『1』を格納

 』に値『1』を格納

 変数『セル値』に、1行目・1列目のセル値を格納

 』に値『2』を格納

 変数『セル値』に、一つ前の変数『セル値』1行目・2列目のセル値文字連結し格納

 』に値『3』を格納

 変数『セル値』に、一つ前の変数『セル値』1行目・3列目のセル値文字連結し格納

 

 』に値『2』を格納

 』に値『1』を格納

 変数『セル値』に、一つ前の変数『セル値』2行目・1列目のセル値文字連結し格納

 』に値『2』を格納

 変数『セル値』に、一つ前の変数『セル値』2行目・2列目のセル値文字連結し格納

 』に値『3』を格納

 変数『セル値』に、一つ前の変数『セル値』2行目・3列目のセル値文字連結し格納

 

 』に値『3』を格納

 』に値『1』を格納

 変数『セル値』に、一つ前の変数『セル値』3行目・1列目のセル値文字連結し格納

 』に値『2』を格納

 変数『セル値』に、一つ前の変数『セル値』3行目・2列目のセル値文字連結し格納

 』に値『3』を格納

 変数『セル値』に、一つ前の変数『セル値』3行目・3列目のセル値文字連結し格納

 

 最後に、セルA12変数『セル値』を格納します。」

Sub 変数と定数で指定して読みとり4()

 Dim セル値 As String

 Dim As Integer

 Dim As Integer

  = 1

    = 1

   セル値 = Cells(, ).Value

    = 2

   セル値 = セル値 & Cells(, ).Value

    = 3

   セル値 = セル値 & Cells(, ).Value

  = 2

    = 1

   セル値 = セル値 & Cells(, ).Value

    = 2

   セル値 = セル値 & Cells(, ).Value

    = 3

   セル値 = セル値 & Cells(, ).Value

  = 3

    = 1

   セル値 = セル値 & Cells(, ).Value

    = 2

   セル値 = セル値 & Cells(, ).Value

    = 3

   セル値 = セル値 & Cells(, ).Value

 Range("A12").Value = セル値

End Sub

パイさん

3行×3に係る順次処理が記述されました。

 それでは、セルA12の値をクリアしてから、そのマクロを実行してみましょう。」

Img4_2_15

ソンくん

1~3行目・1~3列目のセル値が読みとられて文字連結されて、セルA12に書きこまれました。」


パイさん

「今回は、あえて同じような順次処理を何回も記述してもらいました。」

ソンくん

「そういえば、セルの値を読みとる順次処理を何回も書きました。

 1. 1行・1では1回のセルの値を読みとる順次処理

 2. 1~3行・1では3回のセルの値を読みとる順次処理

 3. 1行・1~3では3回のセルの値を読みとる順次処理

 4. 1~3行・1~3では9回のセルの値を読みとる順次処理、を記述しました。

 

 これって行数列数が増えれば増えるほど同じような順次処理を書く回数も増えていくってことですよね。

 もし、10000行×10000列だったら、同じような順次処理を1億回も書くということですよね。」

パイさん

「その通りです。プログラムには3つの基本構造があります。一つ目の基本構造順次処理です。

 順次処理だけでプログラムを組もうとするならば、仮に、10000行×10000列の処理を実行するときには、

 1億回の順次処理を記述することになります。こんなときは、どうしたらよいのでしょうか。」

ソンくん

二つ目の基本構造であるループ処理の出番ですね。

 ループ処理をつかえば、例え1億回のプログラムコードでも一回のプログラムコードにまとめることができる

 と思います。」

パイさん

「その通りです。ループ処理をつかった多数行のセルの値の読みとりについては、

 次回『ループ処理で多数行のセルの値を読みとる』で紹介します。」