【ループ処理でセルに値を書きこむ】
1 多数のセルの行番号と列番号を直接指定して値を書きこむ
2 多数のセルの行番号と列番号を変数で指定して値を書きこむ
3 ループ処理で多数行のセルに値を書きこむ
4 ループ処理で多数列のセルに値を書きこむ
5 ダブルループ処理で多数行×多数列のセルに値を書きこむ
ループ処理で多数行のセルに値を書きこむ
Python-xlwingsのループ(繰り返し)処理をつかえば、
多数行に係る順次処理を一つの順次処理にまとめることができます。
例え100万行の順次処理でも一つの順次処理にまとめることができます。
ループ処理とは同じ処理を何度もくり返し実行するということです。
ループ処理の構文として、for文を紹介します。
このように、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~3行・1列
列を1列目に固定して、行を1行目から3行目まで1行ずつカウントアップしていき、
3つのセルに対して、『X行1列』を設定します。
今度の問題は、『多数のセルの行番号と列番号を変数で指定して値を書きこむ』の
2. 1~3行・1列と同じ問題です。
そのときにつくった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文は、次のようになります。
この行番号のループ処理を実行するための構文をつかって、
Pythonプログラムをまとめると、次のようになります。
列 = 1
for 行 in range(1,4):
st.range(行,列).value = str(行) + '行' + str(列) + '列'
3行に係る順次処理が、for文をつかうことで一つの順次処理にまとまりました。
『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プログラムを実行してみましょう。
1行目・1列目のセルに『1行1列』、
2行目・1列目のセルに『2行1列』、
3行目・1列目のセルに『3行1列』が書きこまれました。
2. 1~10行・1列
列を1列目に固定して、行を1行目から10行目まで1行ずつカウントアップしていき、
10のセルに対して、『X行1列』を設定します。
一つ前の問題は、『行を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プログラムを実行してみましょう。
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行1列』が書きこまれました。
3. 1~100行・1列
ループ処理の終了値を100まで増やします。
列を1列目に固定して、行を1行目から100行目まで1行ずつカウントアップしていき、
100のセルに対して、『X行1列』を設定します。
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プログラムを実行してみましょう。
1行目から100行目で、1列目のセルに、『X行1列』が書きこまれました。
4. 1~1000行・1列
ループ処理の終了値をいっきに1000まで増やします。
列を1列目に固定して、行を1行目から1000行目まで1行ずつカウントアップしていき、
1000のセルに対して、『X行1列』を設定します。
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プログラムを実行してみましょう。
1行目から1000行目で、1列目のセルに、『X行1列』が書きこまれました。
このように、例え10000行、100000行、1000000行、1048576行と行数が
どんなに増えたとしても、for文をつかえば、多数行に係る順次処理が、
一つの順次処理にまとめられます。
試しにfor文の開始行・終了行と列番号の変数に設定する値を適当な数字に書きかえて、
Pythonプログラムを実行して、多数行のセルに値が書きこまれることを確かめてみてください。
今回は、行数がどんなに増えたとしても、for文をつかえば、多数行に係る順次処理が、
一つの順次処理にまとめられて、多数行のセルに値を書きこむことができるという話でした。
では、列数が増えたときは、どうすればよいのでしょうか。
これについては、次回『ループ処理で多数列のセルに値を書きこむ』で紹介します。