【ループ処理でセルの値を読みとる】
1 多数のセルの行番号と列番号を直接指定して値を読みとる
2 多数のセルの行番号と列番号を変数と定数で指定して値を読みとる
3 ループ処理で多数行のセルの値を読みとる
4 ループ処理で多数列のセルの値を読みとる
5 ループ処理で多数行×多数列のセルの値を読みとる
「Excel VBA/マクロのCellsの行番号と列番号については三つの指定方法がありますが、
今回は、Cellsオブジェクトの引数となる行番号と列番号を定数で指定する方法、
それと、Cellsオブジェクトの引数となる行番号と列番号を変数で指定する方法により、
多数のセルの値を読みとってみます。
Cellsオブジェクトの値を読みとって変数に格納する構文を再び紹介します。
最後に、変数の値を別のセルの値に格納します。
変数の値を読みとってRangeオブジェクトの値に格納する構文は次のようになります。
今回も、多数のセルの値を読みとることになるので、『ループ処理で多数行×多数列のセルに書きこむ』
のときにつくったマクロ『行番号と列番号をカウントアップするループ処理2』をつかって、
あらかじめ10行×10列のセルに値を書きこんでおきましょう。」
「1行目・1列目のセル値を読み取り、いったん変数『セル値』に格納。
その後、セルA12に変数『セル値』を設定しましょう。
このとき行番号を定数『行』、列番号を定数『列』としましょう。」
「『セル値』を文字列型で変数宣言。
『行』を値『1』として定数宣言。
『列』を値『1』として定数宣言。
変数『セル値』に、定数『行』と定数『列』のセル値を格納。
最後に、セルA12に、変数『セル値』を格納します。」
Sub 変数と定数で指定して読みとり1()
Dim セル値 As String
Const 行 = 1
Const 列 = 1
セル値 = Cells(行, 列).Value
Range("A12").Value = セル値
End Sub
「それでは、そのマクロを実行してみましょう。」
「1行目・1列目のセル値『1行1列』が読みとられて、セルA12に書きこまれました。」
「列を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の値をクリアしてから、そのマクロを実行してみましょう。」
「1~3行目・1列目のセル値が読みとられて文字連結されて、セルA12に書きこまれました。
でも、セルから値がはみ出てて見えにくいな。」
「そういうときは、セル結合をつかうと良いです。まず、セルA12からセルJ12までを選択してください。」
「セルA12からセルJ12までを選択しました。」
「次に、Ctrlキーと1キーを同時に打ってください。」
「セルの書式設定という画面があらわれました。」
「そして、配置タブを選んで『文字の制御』の中の『セルを結合する』をクリックして
チェックマークがついている状態にしてからOKボタンをクリックしてください。」
「セルA12からセルJ12までが結合されて見やすくなりました。」
「このように、セルを結合すれば、値がはみ出ず見やすい表をつくることができます。」
「行を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の値をクリアしてから、そのマクロを実行してみましょう。」
「1行目・1~3列目のセル値が読みとられて文字連結されて、セルA12に書きこまれました。」
「行を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の値をクリアしてから、そのマクロを実行してみましょう。」
「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億回のプログラムコードでも一回のプログラムコードにまとめることができる
と思います。」
「その通りです。ループ処理をつかった多数行のセルの値の読みとりについては、
次回『ループ処理で多数行のセルの値を読みとる』で紹介します。」
◇もしもPython-xlwingsだったら、
2023-03-19
2021-12-20
2021-12-12