【ループ処理でセルに値を書きこむ】

 1 多数のセルの行番号と列番号を直接指定して値を書きこむ

 2 多数のセルの行番号と列番号を変数で指定して値を書きこむ

 3 ループ処理で多数行のセルに値を書きこむ

 4 ループ処理で多数列のセルに値を書きこむ

 5 ダブルループ処理で多数行×多数列のセルに値を書きこむ

ダブルループ処理で多数行×多数列のセルに値を書きこむ

 前々回『ループ処理で多数行のセルに値を書きこむ』は、

 行数がどんなに増えたとしても、

 forをつかえば一つの順次処理にまとめられるという話でした。

Img3_3_2

 前回『ループ処理で多数列のセルに値を書きこむ』は、

 列数がどんなに増えたとしても、

 forをつかえば一つの順次処理にまとめられるという話でした。

Img3_4_2

 では、行数列数の両方とも増えたときは、どうすればよいのでしょうか。


 Python-xlwingsでは行数列数の両方がどんなに増えたとしても、

 多数行に係るfor多数列に係るfor組み合わせれば

 一つの順次処理にまとめられます。


 変数『行番号を、開始行から終了行になるまで1ずつカウントアップさせながら、

 併せて、変数『列番号を、開始列から終了列になるまで1ずつカウントアップさせて、

 セルに値を書きこむ順次処理をくり返し実行する二重forは、次のようになります。

Img3_5_2

 今回は、

 に係るループ処理に係るループ処理を組み合わせて、

 行番号をカウントアップしていきながら、

 列番号をカウントアップしていき、

 X行×Y列のセルに値を書きこんでみます。


 xlwingsをつかいPythonでExcelを操作するときは、

 メモリ上に、Workbookオブジェクトを生成、更に、sheetオブジェクトを生成して、

 そのsheetを操作します。( 『rangeの行番号と列番号を変数で指定』参照 )

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

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

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]

 と記述しておきます。



1. 1~3行・1~3列

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

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

 3行×3列のセルに対して、『X行Y列』を設定します。


 今度の問題は、『多数のセルの行番号と列番号を変数で指定して値を書きこみ』の

 4. 1~3行・1~3列と同じ問題です。

 そのときにつくったPythonプログラムの一部を記載します。

行 = 1

列 = 1

st.range(行,列).value = str(行) + '行' + str(列) + '列'

列 = 2

st.range(行,列).value = str(行) + '行' + str(列) + '列'

列 = 3

st.range(行,列).value = str(行) + '行' + str(列) + '列'


行 = 2

列 = 1

st.range(行,列).value = str(行) + '行' + str(列) + '列'

列 = 2

st.range(行,列).value = str(行) + '行' + str(列) + '列'

列 = 3

st.range(行,列).value = str(行) + '行' + str(列) + '列'


行 = 3

列 = 1

st.range(行,列).value = str(行) + '行' + str(列) + '列'

列 = 2

st.range(行,列).value = str(行) + '行' + str(列) + '列'

列 = 3

st.range(行,列).value = str(行) + '行' + str(列) + '列'


 forをつかって、9回の順次処理を一つにまとめてみます。

for 行 in range(1,4):

for 列 in range(1,4):

st.range(行,列).value = str(行) + '行' + str(列) + '列'


 3行×3列に係る順次処理が、

 二つのforをつかうことで一つの順次処理にまとまりました。

 今回のコードを解説します。

 行を1行目から3行目まで1行ずつカウントアップする

 ということから、

 開始行は『1』、終了行は『3』となり、

 に関するfor文は、

 for in range(1,4):

 になります。

 列を1列目から3列目まで1列ずつカウントアップする

 ということから、

 開始列は『1』、終了列は『3』となり、

 に関するfor文は、

 for in range(1,4):

 になります。

 セルに対して、『X行Y列』を設定するということから、

 処理は、

 st.range(,).value = str() + ‘行’ + str() + ‘列’

 になります。

 次に、『行と列の二つのループ処理を行うための構文』を参考にしながら、

 二つのfor順次処理を組み合わせていきます。

 for in range(1,4):

 for in range(1,4):

 st.range(,).value = str() + ‘行’ + str() + ‘列’

 と記述します。


 ソースコードパネルは、

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]

for 行 in range(1,4):

for 列 in range(1,4):

st.range(行,列).value = str(行) + '行' + str(列) + '列'

 となります。


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

Img3_5_3

 1行目から3行目で、1列目から3列目のセルに、

 つまり3行×3列のセルに『X行Y列』が書きこまれました。



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

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

 10行×10列のセルに対して、『X行Y列』を設定します。

 今回だけ特別に、保存Workbookファイル名を『PythonExcel_10_10.xlsx』としておきます。


 forでは、range関数の第2引数に、終了値を記述することになっているから、

 さきほどのPythonプログラムの

 『for in range(1,4):』を『for in range(1,11):』に、

 『for in range(1,4):』を『for in range(1,11):』に、

 書きかえるだけです。


 ソースコードパネルは、

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]

for 行 in range(1,11):

for 列 in range(1,11):

st.range(行,列).value = str(行) + '行' + str(列) + '列'

wb.save.('PythonExcel_10_10.xlsx')

wb.close()

 となります。


 それでは、そのPythonプログラムを実行して、『PythonExcel_10_10.xlsx』を開きます。

Img3_5_5

 1行目から10行目で、1列目から10列目のセルに、

 つまり10行×10列のセルに『X行Y列』が書きこまれました。



3. 1~100行・1~100列

 100行×100列のセルに対して、『X行Y列』を設定します。

 forでは、range関数の第2引数に、終了値を記述することになっているから、

 さきほどのPythonプログラムの

 『for in range(1,11):』を『for in range(1,101):』に、

 『for in range(1,11):』を『for in range(1,101):』に、

 書きかえるだけです。


 ソースコードパネルは、

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]

for 行 in range(1,101):

for 列 in range(1,101):

st.range(行,列).value = str(行) + '行' + str(列) + '列'

wb.save.('workbook.xlsx')

 となります。


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

Img3_5_7

 1行目から100行目で、1列目から100列目のセルに、

 つまり100行×100列のセルに『X行Y列』が書きこまれました。



 このように、行数×列数がどんなに増えたとしても、

 多数行に係るfor多数列に係るforをつかえば

 一つの順次処理にまとめられます。

 試しに二つのfor開始値終了値

 適当な数字に書きかえて、Pythonプログラムを実行して、

 多数行×多数列のセルに値が書きこまれることを

 確かめてみてください。


 今回は、行数×列数がどんなに増えたとしても、

 多数行に係るfor多数列に係るforをつかえば

 一つの順次処理にまとめられて、

 多数行×多数列のセルに値を書きこむことができる

 という話でした。

 では、セルの値を読みとるときは、どうすればよいのでしょうか。

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