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

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をつかえば、多数行のセルから多数行のセルへ値を代入できるという話でした。

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

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



目 次

1. ワークブックを作成する
ワークブックを作成する

2. セルの位置を指定する
セルの位置を指定する

3. ループ処理でセルに値を書きこむ
ループ処理でセルに値を書きこむ

4. ループ処理でセルの値を読みとる
ループ処理でセルの値を読みとる

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

6. 条件分岐処理でセルの操作を分ける
条件分岐処理でセルの操作を分ける

7. 関数をつかってセルの値を加工する(未公開)
関数をつかってセルの値を加工する
(未公開)

1 文字列から一部の文字列を取得

2 文字列を1文字ずつ分解

3 行のループで複数の文字列を連続分解

4 列のループで複数の文字列を連続分解

5 セル番地から英字の列名を取得

6 セルの書式を変更


8. 他のレンジ/シート/ブックを更新する(未公開)
他のレンジ/シート/ブックを更新する
(未公開)

1 他のレンジを更新

2 他のシートを更新

3 逆Z式並びで更新

4 複数シートを更新

5 他のブックを更新

6 他のブックをオープン・クローズ

7 新規ブックを作成し更新






YouTube

Excelマクロの実用版とデモ版


ブログ