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

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

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

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

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

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

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

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

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

 forをつかえば一つの順次処理にまとめられる

 という話でした。


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

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

 forをつかえば一つの順次処理にまとめられます。


 Python-xlwingsループ(繰り返し)処理をつかえば、

 多数列に係る順次処理を一つの順次処理にまとめることができます。

 例え1万列の順次処理でも一つの順次処理にまとめることができます。


 ループ処理の構文として、forを再び紹介します。

Img3_4_1

 このように、forは、『for』の次にセットされた変数を、

 開始値から終了値になるまで、1ずつカウントアップさせながら、

 一段階インデント(半角スペース4文字分)することで確定する順次処理のブロック

 くり返し実行します。


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

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

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

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

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

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]

 と記述しておきます。



1. 1行・1~3列

 行を1行目に固定して、

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

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


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

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

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

行 = 1

列 = 1

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

列 = 2

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

列 = 3

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


 に係る順次処理3回も書いています。

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


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

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

Img3_4_2

 この列番号のループ処理を実行するための構文をつかって、

 Pythonプログラムをまとめると、次のようになります。

行 = 1

for 列 in range(1,4):

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


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

 for in range(1,4):』の次の行から

 一段階インデント(半角スペース4文字分)されているコードが

 ループ処理のブロックとなっていて、

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

 くり返し実行される処理となっています。


 『for in range(1,4):』は、

 変数『開始列『1から終了列『3まで

 1ずつカウントアップしていくということです。

 つまり、

 for in range(1,4):

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

 とは、

 変数『開始列『1から終了列『3まで

 1ずつカウントアップしながら、

 変数『変数『のセルに対して、

 '行''列'の結合値を設定する

 という意味です。


 ソースコードパネルは、

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]

行 = 1

for 列 in range(1,4):

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

 となります。


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

Img3_4_3

 1行目・1列目のセルに『1行1列』、

 1行目・2列目のセルに『1行2列』、

 1行目・3列目のセルに『1行3列』、

 が書きこまれました。


2. 1行・1~10列

 行を1行目に固定して、

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

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

 一つ前の問題は、

 『列を1列目から3列目まで1列ずつカウントアップ』するのに対して、

 今度の問題は、

 『列を1列目から10列目まで1列ずつカウントアップ』するということで、

 カウントアップの終了値が変わるだけです。

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

 さきほどのPythonプログラムの『for in range(1,4):』を、

 『for in range(1,11):』に書きかえるだけです。


 ソースコードパネルは、

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]

行 = 1

for 列 in range(1,11):

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

 となります。


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

Img3_4_5

 1行目・1列目のセルに『1行1列』、

 1行目・2列目のセルに『1行2列』、

 1行目・3列目のセルに『1行3列』、

 1行目・4列目のセルに『1行4列』、

 1行目・5列目のセルに『1行5列』、

 1行目・6列目のセルに『1行6列』、

 1行目・7列目のセルに『1行7列』、

 1行目・8列目のセルに『1行8列』、

 1行目・9列目のセルに『1行9列』、

 1行目・10列目のセルに『1行10列』、

 が書きこまれました。



3. 1行・1~100列

 ループ処理の終了値を100まで増やします。

 行を1行目に固定して、

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

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

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

 さきほどのPythonプログラムの『for in range(1,11):』を、

 『for in range(1,101):』に書きかえるだけです。


 ソースコードパネルは、

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]

行 = 1

for 列 in range(1,101):

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

 となります。


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

Img3_4_7

 1列目から100列目で、1行目のセルに、『1行Y列』が書きこまれました。



4. 1行・1~1000列

 ループ処理の終了値をいっきに1000まで増やします。

 行を1行目に固定して、

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

 1000のセルに対して、『1行Y列』を設定します。

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

 さきほどのPythonプログラムの『for in range(1,101):』を、

 『for in range(1,1001):』に書きかえるだけですね。


 ソースコードパネルは、

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]

行 = 1

for 列 in range(1,1001):

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

 となります。


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

Img3_4_12

 1列目から1000列目で、1行目のセルに、『1行Y列』が書きこまれました。



 このように、例え1000、、1000016384

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

 forをつかえば、多数列に係る順次処理が、

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

 試しにforの開始列・終了列と行番号の定数に設定する値を

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

 多数列のセルに値が書きこまれることを確かめてみてください。


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

 forをつかえば、多数列に係る順次処理が、

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

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

 という話でした。

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

 これについては、次回『ループ処理で多数行×多数列のセルに値を書きこむ』で紹介します。