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

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

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

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

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

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

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

 Python-xlwingsrange行番号列番号については二つの指定方法がありますが、

 今回は、rangeオブジェクトの引数となる行番号列番号

 変数で指定する方法により、多数のセルに値を書きこんでみます。


 セル位置行番号列番号で指定するrangeオブジェクトを再び紹介します。

T3_1_Img

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

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

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

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

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

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]

 と記述しておきます。



1. 1行・1列

 まずは、1行目・1列目のセルに対して、『1行1列』を設定します。

 span class="lightyellowback">行番号の変数』に1を代入

 列番号の変数』に1を代入

 行番号が『』と列番号が『』のセルの値に、『1行1列』を設定

 今回は、このように変数をつかったプログラムを組んでみます。


 変数とは、一時的に値を保持するためのデータの入れ物です。

 変数をつかうときは、まず名前を決めます。

 この変数の名前には次のような決まりがあります。

T3_2_Img

 行番号を変数で指定するときは、行番号の変数名を決めます

 名前の決まりに従えば、変数名はどのようにつけてもかまわないのですが、

 意味のある文字にしておくと、後で見たときにわかりやすいコードになります。

 Pythonでは、変数名を日本語文字にすることもできるため、

 ここでは、行番号の変数名を『』とします。

 変数にデータを代入するときは、次のような書式となります。

T3_3_Img

 変数』に、行番号として『1』を代入してみます。

  = 1

 変数』に、列番号として『1』を代入してみます。

  = 1

 行番号が『』と列番号が『』のセルの値に、『1行1列』を設定してみます。

 st.range(,).value = "1行1列"


 では、全てのソースコードを記述します。

 ソースコードパネルは、

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]

行 = 1

列 = 1

st.range(行,列).value = "1行1列"

 となります。


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

Img3_2_1

 1行目・1列目のセルに、『1行1列』が、書きこまれました。


 次に、1行目・1列目のセルに対して、

 変数『'行'変数『'列'を文字列結合した値を設定します。


 文字列結合とは、ある文字列の後ろに別の文字列をつなげて1つの文字列にする処理のことです。

 例えば、'ABC'という文字列と‘XYZ’という文字列を結合すると、'ABCXYZ'という1つの文字列になります。


 Pythonでは、左の文字列右の文字列を結合する演算子として『+』をつかいます。

 例えば、'ABC'という文字列と‘XYZ’という文字列を結合するときは、‘ABC’ + ‘XYZ’ と記述します。


 それでは、

 行番号の変数『』に1を設定

 列番号の変数『』に1を設定

 行番号が『』と列番号が『』のセルの値に、

 変数『'行'変数『'列'を文字列結合した値を設定

 今回は、このように二つの変数を使ったプログラムを組んでみます。


 行番号の変数『』に1を設定するということは、

  = 1

 列番号の変数『』に1を設定するということは、

  = 1

 行番号が『』と列番号が『』のセルの値に、

 変数『'行'変数『'列'を文字列結合した値を設定するということは、

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

 と追記します。


 ソースコードパネルは、

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]

行 = 1

列 = 1

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

 となります。

Img3_2_2

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

Img3_2_3

 ターミナルパネルに、

File "c:/Python_Excel_PG/Python_Excel_xlwings/Python_Excel321ERR.py", line 6, in <module>

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

TypeError: unsupported operand type(s) for +: 'int' and 'str'

 と表示されました。

 これは、『Pythonファイルの6行目、st.range(行,列).value = 行 + '行' + 列 + '列'

 型エラー:『+』は、数値型と文字列型を結合する演算子としてサポートしていません。』

 という意味です。


 そもそも、Pythonでは、変数の型宣言の明記が不要です。

 変数に値を代入したときに、型が自動判定されます。

  = 1行番号の変数『』に1という値を代入したとき

 1という値は数値型だから変数『』は数値型と自動判定されます。

 同じく、 = 1列番号の変数『』に1という値を代入したとき

 1という値は数値型だから変数『』は数値型と自動判定されます。


 数値型の変数と文字列型の値を結合しようとするから型エラーが生じているのです。

 数値型の変数『』と文字列型の値'行'を演算子『+』をつかって文字列結合しようとしたため型エラーが発生

 数値型の変数『』と文字列型の値'列'を演算子『+』をつかって文字列結合しようとしたため型エラーが発生


 それでは、型エラーを回避するにはどうしたら良いのでしょうか。

 数値型の変数を文字列型の変数に変換したら、文字列型の変数と文字列型の値を結合する

 ことになるため、型エラーを回避できます。


 それでは、数値を文字列に変換するにはどうしたら良いのでしょうか。

 数値を文字列に変換するときは、str関数をつかいます

Img3_2_4

 str関数をつかい数値型の変数『』を文字列型の変数に変換するときは、str(行)と記述します。

 str関数をつかい数値型の変数『』を文字列型の変数に変換するときは、str(列)と記述します。


 ソースコードパネルの6行目を書きかえます。

 ソースコードパネルは、

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]

行 = 1

列 = 1

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

wb.save.('workbook.xlsx')

 となります。


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

Img3_2_5

 Pythonプログラムが正常に終了しました。


Img3_2_1

 1行目・1列目のセルに、『1行1列』が、書きこまれました。



2. 1~3行・1列

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

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

 列番号の変数『』に1

 行番号の変数『』に1

 行番号が『』と列番号が『』のセルの値に、『'行''列'を結合した値

 行番号の変数『』に2

 行番号が『』と列番号が『』のセルの値に、『'行''列'を結合した値

 行番号の変数『』に3

 行番号が『』と列番号が『』のセルの値に、『'行''列'を結合した値

 を設定。


 今回は、このように二つの変数を使ったプログラムを組んでみます。

 列番号の変数『』に1を設定するということは、 = 1

 行番号の変数『』に1を設定するということは、 = 1

 行番号が『』と列番号が『』のセルの値に、『'行''列'の結合値を設定

 するということは、st.range(,).value = str() + ‘行’ + str() + ‘列’

 行番号の変数『』に2を設定するということは、 = 2

 行番号が『』と列番号が『』のセルの値に、『'行''列'の結合値を設定

 するということは、st.range(,).value = str() + ‘行’ + str() + ‘列’

 行番号の変数『』に3を設定するということは、 = 3

 行番号が『』と列番号が『』のセルの値に、『'行''列'の結合値を設定

 するということは、st.range(,).value = str() + ‘行’ + str() + ‘列’

 と追記します。


 ソースコードパネルは、

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]

列 = 1

行 = 1

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

行 = 2

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

行 = 3

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

 となります。


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

Img3_2_6

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

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

 3行目・1列目のセルに『3行1列』が書きこまれました。



3. 1行・1~3列

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

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

 行番号の変数『』に1

 列番号の変数『』に1

 行番号が『』と列番号が『』のセルの値に、『'行''列'を結合した値

 列番号の変数『』に2

 行番号が『』と列番号が『』のセルの値に、『'行''列'を結合した値

 列番号の変数『』に3

 行番号が『』と列番号が『』のセルの値に、『'行''列'を結合した値

 を設定。


 今回は、このように二つの変数を使ったプログラムを組んでみます。

 行番号の変数『』に1を設定するということは、 = 1

 列番号の変数『』に1を設定するということは、 = 1

 行番号が『』と列番号が『』のセルの値に、『'行''列'の結合値を設定

 するということは、st.range(,).value = str() + ‘行’ + str() + ‘列’

 列番号の変数『』に2を設定するということは、 = 2

 行番号が『』と列番号が『』のセルの値に、『'行''列'の結合値を設定

 するということは、st.range(,).value = str() + ‘行’ + str() + ‘列’

 列番号の変数『』に3を設定するということは、 = 3

 行番号が『』と列番号が『』のセルの値に、『'行''列'の結合値を設定

 するということは、st.range(,).value = str() + ‘行’ + str() + ‘列’

 と追記します。


 ソースコードパネルは、

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]

行 = 1

列 = 1

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

列 = 2

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

列 = 3

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

 となります。


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

Img3_2_6

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

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

 1行目・3列目のセルに『1行3列』が書きこまれました。



4. 1~3行・1~3列

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

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

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


 行番号の変数『』に1

  列番号の変数『』に1

  行番号が『』と列番号が『』のセルの値に、『'行''列'を結合した値

  列番号の変数『』に2

  行番号が『』と列番号が『』のセルの値に、『'行''列'を結合した値

  列番号の変数『』に3

  行番号が『』と列番号が『』のセルの値に、『'行''列'を結合した値


 行番号の変数『』に2

  列番号の変数『』に1

  行番号が『』と列番号が『』のセルの値に、『'行''列'を結合した値

  列番号の変数『』に2

  行番号が『』と列番号が『』のセルの値に、『'行''列'を結合した値

  列番号の変数『』に3

  行番号が『』と列番号が『』のセルの値に、『'行''列'を結合した値


 行番号の変数『』に3

  列番号の変数『』に1

  行番号が『』と列番号が『』のセルの値に、『'行''列'を結合した値

  列番号の変数『』に2

  行番号が『』と列番号が『』のセルの値に、『'行''列'を結合した値

  列番号の変数『』に3

  行番号が『』と列番号が『』のセルの値に、『'行''列'を結合した値を設定。


 今回は、このように二つの変数を使ったプログラムを組んでみます。

 行番号の変数『』に1を設定するということは、 = 1

  列番号の変数『』に1を設定するということは、 = 1

  行番号が『』と列番号が『』のセルの値に、『'行''列'の結合値を設定

  するということは、st.range(,).value = str() + ‘行’ + str() + ‘列’

  列番号の変数『』に2を設定するということは、 = 2

  行番号が『』と列番号が『』のセルの値に、『'行''列'の結合値を設定

  するということは、st.range(,).value = str() + ‘行’ + str() + ‘列’

  列番号の変数『』に3を設定するということは、 = 3

  行番号が『』と列番号が『』のセルの値に、『'行''列'の結合値を設定

  するということは、st.range(,).value = str() + ‘行’ + str() + ‘列’


 行番号の変数『』に2を設定するということは、 = 2

  列番号の変数『』に1を設定するということは、 = 1

  行番号が『』と列番号が『』のセルの値に、『'行''列'の結合値を設定

  するということは、st.range(,).value = str() + ‘行’ + str() + ‘列’

  列番号の変数『』に2を設定するということは、 = 2

  行番号が『』と列番号が『』のセルの値に、『'行''列'の結合値を設定

  するということは、st.range(,).value = str() + ‘行’ + str() + ‘列’

  列番号の変数『』に3を設定するということは、 = 3

  行番号が『』と列番号が『』のセルの値に、『'行''列'の結合値を設定

  するということは、st.range(,).value = str() + ‘行’ + str() + ‘列’


 行番号の変数『』に3を設定するということは、 = 3

  列番号の変数『』に1を設定するということは、 = 1

  行番号が『』と列番号が『』のセルの値に、『'行''列'の結合値を設定

  するということは、st.range(,).value = str() + ‘行’ + str() + ‘列’

  列番号の変数『』に2を設定するということは、 = 2

  行番号が『』と列番号が『』のセルの値に、『'行''列'の結合値を設定

  するということは、st.range(,).value = str() + ‘行’ + str() + ‘列’

  列番号の変数『』に3を設定するということは、 = 3

  行番号が『』と列番号が『』のセルの値に、『'行''列'の結合値を設定

  するということは、st.range(,).value = str() + ‘行’ + str() + ‘列’

 と追記します。


 ソースコードパネルは、

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]


行 = 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(列) + '列'

 となります。


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

Img3_2_8

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

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

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

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

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

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

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

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

 3行目・3列目のセルに『3行3列』が書きこまれました。



 今回は、あえて同じような順次処理を何回も記述しました。

 1. 1行・1では1回のセルに値を書きこむ順次処理

 2. 1~3行・1では3回のセルに値を書きこむ順次処理

 3. 1行・1~3では3回のセルに値を書きこむ順次処理

 4. 1~3行・1~3では9回のセルに値を書きこむ順次処理を記述しました。


 プログラムには3つの基本構造があります。

 一つ目の基本構造順次処理です。

 順次処理とは順に処理を実行するということです。

 順次処理だけでプログラムを組もうとするならば、仮に、1000行×1000列の処理を実行するときには、

 百万回の順次処理を記述することになります。

 そこで、プログラムの3つの基本構造の内、

 二つ目の基本構造であるループ処理の出番となります。

 ループ処理をつかえば、例え1億回のプログラムコードでも

 一回のプログラムコードにまとめることができます。


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