【ループ処理でセルに値を書きこむ】
1 多数のセルの行番号と列番号を直接指定して値を書きこむ
2 多数のセルの行番号と列番号を変数で指定して値を書きこむ
3 ループ処理で多数行のセルに値を書きこむ
4 ループ処理で多数列のセルに値を書きこむ
5 ダブルループ処理で多数行×多数列のセルに値を書きこむ
多数のセルの行番号と列番号を変数で指定して値を書きこむ
Python-xlwingsのrangeの行番号と列番号については二つの指定方法がありますが、
今回は、rangeオブジェクトの引数となる行番号と列番号を
変数で指定する方法により、多数のセルに値を書きこんでみます。
セル位置を行番号と列番号で指定するrangeオブジェクトを再び紹介します。
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列』を設定
今回は、このように変数をつかったプログラムを組んでみます。
変数とは、一時的に値を保持するためのデータの入れ物です。
変数をつかうときは、まず名前を決めます。
この変数の名前には次のような決まりがあります。
行番号を変数で指定するときは、行番号の変数名を決めます。
名前の決まりに従えば、変数名はどのようにつけてもかまわないのですが、
意味のある文字にしておくと、後で見たときにわかりやすいコードになります。
Pythonでは、変数名を日本語文字にすることもできるため、
ここでは、行番号の変数名を『行』とします。
変数にデータを代入するときは、次のような書式となります。
変数『行』に、行番号として『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プログラムを実行してみましょう。
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 = 行 + '行' + 列 + '列'
となります。
それでは、そのPythonプログラムを実行してみます。
ターミナルパネルに、
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関数をつかいます。
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プログラムを実行してみます。
Pythonプログラムが正常に終了しました。
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プログラムを実行してみましょう。
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プログラムを実行してみましょう。
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プログラムを実行してみましょう。
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億回のプログラムコードでも
一回のプログラムコードにまとめることができます。
ループ処理については、次回『ループ処理で多数行のセルに値を書きこむ』で紹介します。