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

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

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

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

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

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

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

 Python-xlwingsrange行番号列番号については二つの指定方法がありますが、

 今回は、rangeオブジェクトの引数となる行番号列番号

 変数で指定する方法により、多数のセルの値を読みとってみます。


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

Img4_2_1

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

 変数の値を読みとってセル番地のセルの値に格納する構文は次のようになります。

Img4_2_2

 今回も、多数のセルの値を読みとることになるので、

 『ループ処理で多数行×多数列のセルに値を書きこむ』のときに、

 Pythonプログラムで10行×10列のセルに値を書きこんでおいたWorkbookファイル

 『PythonExcel_10_10.xlsx』を読みこみます。

Img4_2_4

 xlwingsをつかいPythonで既存Excelを読みこみ操作するときは、

 Workbookファイルをメモリ上に読みこむと同時にWorkbookオブジェクトを生成、

 ( 『xlwingsをつかい既存Workbookを読みこみファイル保存』参照 )

 更に、sheetオブジェクトを生成して、そのsheetを操作します。

 Workbookオブジェクト名を『wb』、sheetオブジェクト名を『st』としておきます。

 予め、ソースコードパネルに

import xlwings

wb = xlwings.Book(‘PythonExcel_10_10.xlsx')

st = wb.sheets[0]

 と記述しておきます。



1. 1行・1列

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

 その後、セルA12変数『val』を設定します。

 このとき行番号変数『列番号変数『とします。

 変数『値『1

 変数『値『1

 変数『val』変数『』と変数『』のセル値

 セルA12変数『val』を設定します。

= 1

= 1

val = st.range(, ).value

st.range('A12').value = val


 【ソースコードパネル】

import xlwings

wb = xlwings.Book(‘PythonExcel_10_10.xlsx’)

st = wb.sheets[0]

行 = 1

列 = 1

val = st.range(行,列).value

st.range('A12').value = val


 それでは、そのPythonプログラムを実行してみましょう。

Img4_2_6

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



2. 1~3行・1列

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

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

その後、セルA12変数『val』を設定します。

 このとき行番号変数『列番号定数『とします。

 変数『値『1を格納

 変数『値『1を格納

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

 変数『値『2を格納

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

 変数『値『3を格納

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

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

= 1

= 1

val = st.range(, ).value

= 2

val = val + st.range(, ).value

= 3

val = val + st.range(, ).value

st.range('A12').value = val


 【ソースコードパネル】

import xlwings

wb = xlwings.Book(‘PythonExcel_10_10.xlsx’)

st = wb.sheets[0]

列 = 1

行 = 1

val = st.range(行,列).value

行 = 2

val = val + st.range(行,列).value

行 = 3

val = val + st.range(行,列).value

st.range('A12').value = val


 それでは、そのPythonプログラムを実行してみましょう。

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列ずつカウントアップしていきながら、

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

 その後、セルA12変数『val』を設定します。

 このとき行番号変数『列番号変数『とします。


 変数『値『1を格納

 変数『値『1を格納

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

 変数『値『2を格納

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

 変数『値『3を格納

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

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

= 1

= 1

val = st.range(, ).value

= 2

val = val + st.range(, ).value

= 3

val = val + st.range(, ).value

st.range('A12').value = val


 【ソースコードパネル】

import xlwings

wb = xlwings.Book(‘PythonExcel_10_10.xlsx’)

st = wb.sheets[0]

行 = 1

列 = 1

val = st.range(行,列).value

列 = 2

val = val + st.range(行,列).value

列 = 3

val = val + st.range(行,列).value

st.range('A12').value = val


 それでは、そのPythonプログラムを実行してみましょう。

Img4_2_13

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



4. 1~3行・1~3列

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

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

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

 その後、セルA12変数『val』を設定します。

 このとき行番号変数『列番号変数『とします。


 変数『に値『1』を格納

  変数『に値『1』を格納

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

  変数『に値『2』を格納

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

  変数『に値『3』を格納

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

 変数『に値『2』を格納

  変数『に値『1』を格納

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

  変数『に値『2』を格納

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

  変数『に値『3』を格納

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

 変数『に値『3』を格納

  変数『に値『1』を格納

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

  変数『に値『2』を格納

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

  変数『に値『3』を格納

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

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


【ソースコードパネル】

import xlwings

wb = xlwings.Book(‘PythonExcel_10_10.xlsx’)

st = wb.sheets[0]

行 = 1

列 = 1

val = st.range(行,列).value

列 = 2

val = val + st.range(行,列).value

列 = 3

val = val + st.range(行,列).value

行 = 2

列 = 1

val = val + st.range(行,列).value

列 = 2

val = val + st.range(行,列).value

列 = 3

val = val + st.range(行,列).value

行 = 3

列 = 1

val = val + st.range(行,列).value

列 = 2

val = val + st.range(行,列).value

列 = 3

val = val + st.range(行,列).value

st.range('A12').value = val


 それでは、そのPythonプログラムを実行してみましょう。

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億回の順次処理を記述することになります。

 こんなときは、どうしたらよいのでしょうか。

 ループ処理をつかえば、例え1億回のプログラムコードでも

 一回のプログラムコードにまとめることができます。

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

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