【ループ処理でセルからセルへ値を代入する】

 1 セルからセルへ値を代入

 2 行のループ処理でセルからセルへ値を代入

 3 列のループ処理でセルからセルへ値を代入

 4 行×列のダブルループ処理でセルからセルへ値を代入

行のループ処理でセルからセルへ値を代入

 ループ処理をつかって、行番号をカウントアップしながらセルからセルへ値を代入してみます。


 Python-xlwingsのループ処理をつかえば、
 一つの順次処理で多数行のセルの値を読みとり別のセルに書きこむことができます

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

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

Img5_2_1

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

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

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

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

Img5_2_3

 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~3行・1列のセルから10行下のセルへ

Img5_2_4

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

 そのつどセルの値を読みとり、その10のセルに書きこんでみます。

 このとき行番号を変数『読取行』と変数『書込行』、

 列番号を変数『読取列』と変数『書込列』とします。


 まず、列を1列目に固定ということなので、

 読取列 = 1

 書込列 = 読取列

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

 そのつどセルの値を読みとり、その10のセルに書きこむということを考えてみます。

 『読取行』を開始行『1』から終了行『3』まで1ずつカウントアップしていくループコード

 for 読取行 in range(1,4):

 『書込行』を『読取行』より10増やす処理コード

 書込行 = 読取行 + 10

 書込セル読取セルの値を代入する処理コード

 st.range(書込行, 書込列).value = st.range(読取行, 読取列).value

 そして、これら二つの処理コードを、読取行』をカウントアップしていくループコード組み合わせます。

読取列 = 1

書込列 = 読取列

for 読取行 in range(1,4):

書込行 = 読取行 + 10

st.range(書込行, 書込列).value = st.range(読取行, 読取列).value


 【ソースコードパネル】

import xlwings

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

st = wb.sheets[0]

読取列 = 1

書込列 = 読取列

for 読取行 in range(1,4):

書込行 = 読取行 + 10

st.range(書込行, 書込列).value = st.range(読取行, 読取列).value


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

Img5_2_6

 1~3行目1列目のセルの値が読みとられて、

 その1011~13行目1列目のセルに書きこまれました。



2. 4~6行・2列のセルから10行下のセルへ

Img5_2_7

 列を2列目に固定して、行を4行目から6行目まで1行ずつカウントアップしていきながら、

 そのつどセルの値を読みとり、その10のセルに書きこんでみます。


 まず、列を2列目に固定ということなので、

 読取列 = 2

 書込列 = 読取列

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

 そのつどセルの値を読みとり、その10のセルに書きこむということを考えてみます。

 『読取行』を開始行『4』から終了行『6』まで1ずつカウントアップしていくループコード

 for 読取行 in range(4,7):

 『書込行』を『読取行』より10増やす処理コード

 書込行 = 読取行 + 10

 書込セル読取セルの値を代入する処理コード

 st.range(書込行, 書込列).value = st.range(読取行, 読取列).value

 そして、これら二つの処理コードを、読取行』をカウントアップしていくループコード組み合わせます。

読取列 = 2

書込列 = 読取列

for 読取行 in range(4,7):

書込行 = 読取行 + 10

st.range(書込行, 書込列).value = st.range(読取行, 読取列).value


 【ソースコードパネル】

import xlwings

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

st = wb.sheets[0]

読取列 = 2

書込列 = 読取列

for 読取行 in range(4,7):

書込行 = 読取行 + 10

st.range(書込行, 書込列).value = st.range(読取行, 読取列).value


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

Img5_2_9

 4~6行目2列目のセルの値が読みとられて、

 その1014~16行目2列目のセルに書きこまれました。



3. 7~10行・3列のセルから10行下のセルへ

Img5_2_10

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

 そのつどセルの値を読みとり、その10のセルに書きこんでみます。


 まず、列を3列目に固定ということなので、

 読取列 = 3

 書込列 = 読取列

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

 そのつどセルの値を読みとり、その10のセルに書きこむということを考えてみます。

 『読取行』を開始行『7』から終了行『10』まで1ずつカウントアップしていくループコード

 for 読取行 in range(7,11):

 『書込行』を『読取行』より10増やす処理コード

 書込行 = 読取行 + 10

 書込セル読取セルの値を代入する処理コード

 st.range(書込行, 書込列).value = st.range(読取行, 読取列).value

 そして、これら二つの処理コードを、読取行』をカウントアップしていくループコード組み合わせます。

読取列 = 3

書込列 = 読取列

for 読取行 in range(7,11):

書込行 = 読取行 + 10

st.range(書込行, 書込列).value = st.range(読取行, 読取列).value


 【ソースコードパネル】

import xlwings

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

st = wb.sheets[0]

読取列 = 3

書込列 = 読取列

for 読取行 in range(7,11):

書込行 = 読取行 + 10

st.range(書込行, 書込列).value = st.range(読取行, 読取列).value


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

Img5_2_12

 7~10行目3列目のセルの値が読みとられて、

 その1017~20行目3列目のセルに書きこまれました。



 このように、forをつかってループ処理を行えば、

 多数行のセルから多数行のセルへ一瞬で値を代入することができます。

 試しに、forの開始行・終了行と列番号の定数に設定する値を適当な数字に書きかえて、

 プログラムを実行して、多数行のセルから多数行のセルへ値を代入できることを確かめてみてください。


 今回は、行のforをつかえば、多数行のセルから多数行のセルへ値を代入できるという話でした。

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

 これについては、次回『列のループ処理でセルからセルへ値を代入』で紹介します。