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

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

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

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

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

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

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

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

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

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


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

Img4_1_1

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

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

Img4_1_2

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

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

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

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

Img4_1_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』を設定します。

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

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

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

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


 【ソースコードパネル】

import xlwings

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

st = wb.sheets[0]

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

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


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

Img4_1_6

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



2. 1~3行・1列

列を1列目に固定して、

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

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

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


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

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

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

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

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

val = st.range(2, 1).value

val = st.range(3, 1).value

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


 【ソースコードパネル】

import xlwings

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

st = wb.sheets[0]

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

val = st.range(2,1).value

val = st.range(3,1).value

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


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

Img4_1_8

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


 1行目・1列目のセル値2行目・1列目のセル値が読みとられていません。

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

 val = st.range(2, 1).value

 val = st.range(3, 1).value

 と記述したPythonプログラムを実行したとき、

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

 変数『val』に、2行目・1列目のセル値が格納され、

 変数『val』に、3行目・1列目のセル値が格納されることになり、

 結局、最後に変数『val』に格納されるのは、3行目・1列目のセル値だけになってしまいます。


 こんなときは文字連結をつかいます。

 左の文字列右の文字列結合する演算子+』をつかって、変数『val』を連結していきます。

 次のように、コードを書きかえます。

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

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

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

 こうすれば、

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

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

 変数『val』に、一つ前の変数『val』3行目・1列目のセル値文字連結されて格納されることになります。


 変数『val』文字連結するようにコードを書きかえます。 

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

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

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

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


 【ソースコードパネル】

import xlwings

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

st = wb.sheets[0]

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

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

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

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


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

Img4_1_10

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



3. 1行・1~3列

 行を1行目に固定して、

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

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

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


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

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

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

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

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

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

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

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


 【ソースコードパネル】

import xlwings

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

st = wb.sheets[0]

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

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

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

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


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

Img4_1_12

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



4. 1~3行・1~3列

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


 【ソースコードパネル】

import xlwings

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

st = wb.sheets[0]

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

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

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

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

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

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

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

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

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

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

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

Img4_1_14

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



 今回は、rangeオブジェクトの引数となる行番号列番号直接指定する方法により、

 多数のセルの値を読みとる順次処理を紹介しました。

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

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

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

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


 でも、セルの行番号と列番号を指定するとき、

 st.rangeオブジェクトの引数:行番号と列番号を直接記述するという手法は、

 マジックナンバーと呼ばれるやり方で、プログラムのメンテナンス上あまりお勧めできません。


 では、st.rangeオブジェクトの引数となる行番号列番号間接的に指定する方法により、

 多数のセルの値を読みとるにはどうしたらよいのでしょうか。

 これについては、次回『多数のセルの行番号と列番号を変数で指定して値を読みとる』で紹介します。