【条件分岐処理でセルの操作を分ける】

 1 もしA列がXのときはエックスを実行

 2 もしA列が、Xのときはエックス、Yのときはワイを実行

 3 もしA列が、Xのときはエックス、その他のときはソノタを実行

 4 もしA列がXかつB列がXのときはエックスを実行

 5 もしA列がXまたはB列がXのときはエックスを実行

 もしA列が、Xのときはエックス、Yのときはワイを実行

 前回『もしA列がXのときはエックスを実行』では、条件分岐処理のもっとも基本的な構文として、

 条件式に当てはまったときに、処理を実行するifを紹介しました。


 今回は、二つ以上の各条件式に当てはまったときにそれぞれの処理を実行する

 if_elifを紹介します。

Img6_2_1

 Python-xlwingsのif_elifとは、

 もしA列が、Xのときはエックス、Yのときはワイを実行するというように、

 各条件式に当てはまったとき、それぞれの処理を実行するということです。


 今回も、セルの値が特定の文字のときに、その右隣りのセルに文字を書きこむようにします。

 予め、1~5行目・1列目のセルに『X』、『Z』、『Y』、『』、『X』という値を入れておきます。

Img6_2_2

 今回も、このように1~5行目・1列目のセルに『X』、『Z』、『Y』、『』、『X』という値を入れておいた

 Workbookファイル『エックスワイ.xlsx』を読みこみます。


 xlwingsをつかいPythonで既存Excelを読みこみ操作するときは、

 Workbookファイルをメモリ上に読みこむと同時にWorkbookオブジェクトを生成、

 ( 『xlwingsをつかい既存Workbookを読みこみファイル保存』参照 )

 更に、sheetオブジェクトを生成して、そのsheetを操作します。

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

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

import xlwings

wb = xlwings.Book(‘エックスワイ.xlsx')

st = wb.sheets[0]

 と記述しておきます。


 セルの値がAのとき同じ行で別の列のセルに変数Lを書きこみ、

 セルの値がBのとき同じ行で別の列のセルに変数Mを書きこむ

 というケースでは、次のような構文になります。

Img6_2_3


1. 『X』のときは『エックス』、『Y』のときは『ワイ』

(1)if・elif文(条件分岐処理)

 1行目・1列目のセルの値が『X』のときは、1行目・2列目のセルに『エックス』と、

 1行目・1列目のセルの値が『Y』のときは、1行目・2列目のセルに『ワイ』と書きこんでみます。

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


 1行目・1列目のセルの値を読みとり、1行目・2列目のセルの値に書きこむのだから、

 変数『読取列』の値に1  読取列 = 1

 変数『書込列』の値に2  書込列 = 2

 変数『行番号』の値に1  行番号 = 1 と記述します。

 次に、セルの値がAのとき同じ行で別の列のセルに変数を書きこむ書きこみ、

 セルの値がBのとき同じ行で別の列のセルに変数を書きこむ書きこむ構文をつかってみます。

 1行目・1列目のセルの値が『X』のときは、1行目・2列目のセルに『エックス』と、

 1行目・1列目のセルの値が『Y』のときは、1行目・2列目のセルに『ワイ』と書きこむのだから、

 if st.range(行番号, 読取列).value == "X":

 st.range(行番号, 書込列).value = "エックス"

 elif st.range(行番号, 読取列).value == "Y":

 st.range(行番号, 書込列).value = "ワイ"

 と記述します。


 【ソースコードパネル】

import xlwings

wb = xlwings.Book(‘エックスワイ.xlsx’)

st = wb.sheets[0]

読取列 = 1

書込列 = 2

行番号 = 1

if st.range(行番号, 読取列).value == "X":

st.range(行番号, 書込列).value = “エックス”

elif st.range(行番号, 読取列).value == "Y":

st.range(行番号, 書込列).value = “ワイ”


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

Img6_2_5

 1行目・1列目のセルの値が『X』だったので、1行目・2列目のセルに『エックス』と書きこまれました。



(2)for文(ループ処理)とif・elif文(条件分岐処理)の組み合わせ

 1~5行目の中で、

 1列目のセルの値が『X』のときは、2列目のセルに『エックス』と書きこんで、

 1列目のセルの値が『Y』のときは、2列目のセルに『ワイ』と書きこんでみます。


 今回は、for(ループ処理)のブロックの中に、

 if_elif(条件分岐処理)のブロックを組みこんでみます。

 次のような構文になります。

Img6_2_6

 for(ループ処理)のブロックの中に、

 if_elif(条件分岐処理)のブロックを組みこむ構文をつかってみます。

 1~5行目の中で、

 1列目のセルの値が『X』のときは、2列目のセルに『エックス』と書きこんで、

 1列目のセルの値が『Y』のときは、2列目のセルに『ワイ』と書きこむのだから、

読取列 = 1

書込列 = 2

for 行番号 in range(1,6):

if st.range(行番号, 読取列).value == "X":

st.range(行番号, 書込列).value = "エックス"

elif st.range(行番号, 読取列).value == "Y":

st.range(行番号, 書込列).value = "ワイ"

 と記述します。


 【ソースコードパネル】

import xlwings

wb = xlwings.Book(‘エックスワイ.xlsx’)

st = wb.sheets[0]

読取列 = 1

書込列 = 2

for 行番号 in range(1,6):

if st.range(行番号, 読取列).value == "X":

st.range(行番号, 書込列).value = “エックス”

elif st.range(行番号, 読取列).value == "Y":

st.range(行番号, 書込列).value = “ワイ”


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

Img6_2_8

 1列目1・5行目のセルの値が『X』だったので、2列目1・5行目のセルに『エックス』と書きこまれ、

 1列目3行目のセルの値が『Y』だったので、2列目3行目のセルに『ワイ』と書きこまれました。



2. 『X』のときは『エックス』、『Y』のときは『ワイ』、『』のときは『空白』

 1~5行目の中で、

 1列目のセルの値が『X』のときは、2列目のセルに『エックス』と書きこんで、

 1列目のセルの値が『Y』のときは、2列目のセルに『ワイ』と書きこんで、

 1列目のセルの値が『』のときは、2列目のセルに『空白』と書きこんでみます。


 if_elif(条件分岐処理)のブロックの中で、

 elifは何回でもつかうことができます。

 次のような構文になります。

Img6_2_9

 今回は、条件式が3個になるので、ifを1回、elifを2回つかって、

 条件式とそのときの処理を3個書いてみます。


 for(ループ処理)のブロックの中に、

 if_elif(条件分岐処理)のブロックを組みこむ構文をつかいます。

読取列 = 1

書込列 = 2

for 行番号 in range(1,6):

if st.range(行番号, 読取列).value == "X":

st.range(行番号, 書込列).value = "エックス"

elif st.range(行番号, 読取列).value == "Y":

st.range(行番号, 書込列).value = "ワイ"

elif st.range(行番号, 読取列).value is None:

st.range(行番号, 書込列).value = "空白"

 と記述します。


 【ソースコードパネル】

import xlwings

wb = xlwings.Book(‘エックスワイ.xlsx’)

st = wb.sheets[0]

読取列 = 1

書込列 = 2

for 行番号 in range(1,6):

if st.range(行番号, 読取列).value == "X":

st.range(行番号, 書込列).value = “エックス”

elif st.range(行番号, 読取列).value == "Y":

st.range(行番号, 書込列).value = “ワイ”

elif st.range(行番号, 読取列).value is None:

st.range(行番号, 書込列).value = “空白”


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

Img6_2_11

 1列目1・5行目のセルの値が『X』だったので、2列目1・5行目のセルに『エックス』と書きこまれ、

 1列目3行目のセルの値が『Y』だったので、2列目3行目のセルに『ワイ』と書きこまれ、

 1列目4行目のセルの値が『』だったので、2列目4行目のセルに『空白』と書きこまれました。



3. 『X』のときは『エックス』、『Y』のときは『ワイ』、
 『』のときは『空白』、『』でないときは『その他の英字』

 1~5行目の中で、

 1列目のセルの値が『X』のときは、2列目のセルに『エックス』と書きこんで、

 1列目のセルの値が『Y』のときは、2列目のセルに『ワイ』と書きこんで、

 1列目のセルの値が『』のときは、2列目のセルに『空白』と書きこんで、

 1列目のセルの値が『』でないときは、2列目のセルに『その他の英字』と書きこんでみます。


 for(ループ処理)のブロックの中に、

 if_elif(条件分岐処理)のブロックを組みこむ構文をつかいます。

読取列 = 1

書込列 = 2

for 行番号 in range(1,6):

if st.range(行番号, 読取列).value == "X":

st.range(行番号, 書込列).value = "エックス"

elif st.range(行番号, 読取列).value == "Y":

st.range(行番号, 書込列).value = "ワイ"

elif st.range(行番号, 読取列).value is None:

st.range(行番号, 書込列).value = "空白"

elif st.range(行番号, 読取列).value is not None:

st.range(行番号, 書込列).value = "その他の英字"

 と記述します。


 【ソースコードパネル】

import xlwings

wb = xlwings.Book(‘エックスワイ.xlsx’)

st = wb.sheets[0]

読取列 = 1

書込列 = 2

for 行番号 in range(1,6):

if st.range(行番号, 読取列).value == "X":

st.range(行番号, 書込列).value = “エックス”

elif st.range(行番号, 読取列).value == "Y":

st.range(行番号, 書込列).value = “ワイ”

elif st.range(行番号, 読取列).value is None:

st.range(行番号, 書込列).value = “空白”

elif st.range(行番号, 読取列).value is not None:

st.range(行番号, 書込列).value = “その他の英字”


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

Img6_2_13

 1列目1・5行目のセルの値が『X』だったので、2列目1・5行目のセルに『エックス』と書きこまれ、

 1列目3行目のセルの値が『Y』だったので、2列目3行目のセルに『ワイ』と書きこまれ、

 1列目4行目のセルの値が『』だったので、2列目4行目のセルに『空白』と書きこまれ、

 1列目2行目のセルの値が『』でなかったので、2列目2行目のセルに『その他の英字』と書きこまれました。



 このように、for(ループ処理)のブロックの中に、

 if_elif(条件分岐処理)のブロックを組みこむ構文をつかえば、

 ループブロック二つ以上の各条件式に当てはまったとき

 それぞれ特定の処理をすることができます

 試しに、『開始行』・『終了行』の各変数に設定する値、条件式の右辺に設定する値、

 セルに書きこむ値を適当な数字や文字に書きかえて、プログラムを実行して、

 ループブロック二つ以上の各条件式に当てはまったとき

 それぞれ特定の処理をすることができることを確かめてみてください。


 それでは、ループブロック条件式に当てはまったときに処理を実行し、

 条件式に当てはまらないときにも処理を実行するには、どうすればよいのでしょうか。

 これについては、次回『もしA列が、Xのときはエックス、その他のときはソノタを実行』で紹介します。