【ループ処理でセルの値を読みとる】
1 多数のセルの行番号と列番号を直接指定して値を読みとる
2 多数のセルの行番号と列番号を変数で指定して値を読みとる
3 ループ処理で多数行のセルの値を読みとる
4 ループ処理で多数列のセルの値を読みとる
5 ダブルループ処理で多数行×多数列のセルの値を読みとる
多数のセルの行番号と列番号を変数で指定して値を読みとる
Python-xlwingsのrangeの行番号と列番号については二つの指定方法がありますが、
今回は、rangeオブジェクトの引数となる行番号と列番号を
変数で指定する方法により、多数のセルの値を読みとってみます。
rangeオブジェクトの値を読みとって変数に格納する構文を再び紹介します。
そして、変数の値を別のセルの値に格納します。
変数の値を読みとってセル番地のセルの値に格納する構文は次のようになります。
今回も、多数のセルの値を読みとることになるので、
『ループ処理で多数行×多数列のセルに値を書きこむ』のときに、
Pythonプログラムで10行×10列のセルに値を書きこんでおいたWorkbookファイル
『PythonExcel_10_10.xlsx』を読みこみます。
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プログラムを実行してみましょう。
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プログラムを実行してみましょう。
1~3行目・1列目のセル値が読みとられて文字連結されて、セルA12に書きこまれました。
でも、セルから値がはみ出てて見えにくいため、セル結合をつかってみます。
まず、セルA12からセルJ12までを選択します。
セルA12からセルJ12までを選択しました。
次に、Ctrlキーと1キーを同時に打ちます。
セルの書式設定という画面があらわれます。
そして、配置タブを選んで『文字の制御』の中の『セルを結合する』をクリックして
チェックマークがついている状態にしてからOKボタンをクリックします。
セル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プログラムを実行してみましょう。
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プログラムを実行してみましょう。
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億回のプログラムコードでも
一回のプログラムコードにまとめることができます。
ループ処理をつかった多数行のセルの値の読みとりについては、
次回『ループ処理で多数行のセルの値を読みとる』で紹介します。