タグ別アーカイブ: IF

ゲームではじめるマクロ/VBA~条件分岐

前々回に試して頂いた「めいろ1」ですが、「X」の壁にぶつからないで「オバケ」をつかまえられたでしょうか?

もし、壁にぶつかると条件分岐処理によりペンギンは止まります

今回は、この条件分岐の処理を体験して頂きます

アイコン

めいろゲーム_1 200.40 KB 5 downloads

...

アイコン

演習2 133.64 KB 1 downloads

...

通常のIF関数の復習

今回は、前回使用した演習2のファイルからはじめます

このファイルのK8セルには上記のようなIF関数が埋め込まれています

ですので、「迷路の一の二/C4セル」に”X”が入力されていると”終了”の文字を出力します

このIF関数と同じ仕組みが、記事の冒頭の「カベにぶつかったとき」のマクロの処理に組み込まれています

壁にペンギンをぶつける

では、今回はめいろ1にて敢えてペンギンを壁/Xにぶつけてみましょう!

上の画像のように、コードの1行目で下に進むようにすれば、スタートボタンを押すのとほぼ同時に壁にぶつかります

上の画像では、数式バーに「X」と出ています

つまり、これはカーソルがある箇所にXが入力されているということになります

カーソルがある箇所のセルの中味が「X」の場合には、処理が止まるようにマクロが組み込まれているわけですが、コードにすると次のようになります

2行目の「End」は「マクロ処理」の終了という意味です

この「End」というコードが、1行目のIfからはじまるコードと3行目のEnd Ifに囲まれています

1行目のコードでは、IfとThenの間に「Selection.Value」というコードが入力されています

「Selection.Value」については、今の段階では次のように解釈しておいてください

「選択/Selectionした箇所 中味/Value」

つまり、「もし/If、カーソルが選択されているセルの中味が”X”の場合には」という条件式が「If Then」の の箇所に書いてあります

そして、条件に合う場合には、次の行から書いてあるコードを実行します

3行のEnd Ifは、条件に合う場合に実行されるコードの終点を示しています

条件分岐処理を体験する

では演習2のファイルに戻ります

こちらのファイルにあるSample3のマクロを開いてみて下さい

今回は、下の画像の「Visual Basic」のところをクリックしてみましょう!

すると「Sub Sample3()」の箇所がみえるはずです

こちらのマクロは、実行するとカウンターとして設定した「myCount」が1から3まで増える間にメッセージボックスを3回繰り返し表示します

では、今回はFor ~ Next文の中に次の3行を入力してみましょう

こちらのコードは「もし/If、1からはじまるmyCountが1の場合には、マクロを終了する」という意味になります

ですので、このIf文をMsgBox~の上に書くと、メッセージボックスは1度も表示されません

<まとめ>

今回は、条件分岐の処理を体験して頂きました

前回の繰返し処理もそうですが、この条件分岐処理は操作を記録して再生する「記録マクロ」では実行できません

ですので、繰り返し処理と同様にシステムの醍醐味といってもいい処理だと思います

ぜひ、手を動かして体感してみてください

尚、記事の中で無造作にマクロという言葉を使用していますが、こちらはVBAコードを集めたセット/一式ぐらいに思っていただければ結構です

ではまた次回もよろしくお願いします


にほんブログ村


IF式を組み合わせて列作成~上級編10回目

こんにちは、Excellent仕事術のガッツ鶴岡(@atsushi1039)です

 Power Queryは関数やVBAの知識がなくても、直感的にクリックしていくことで処理を進めていけるのが魅力です

 ただ、どうしてもIF文をネスト(組み合わせ)し、複数の条件式を組み合わせた新たな列を挿入する必要がでる時もあります

 そんな時のためにPower Queryには「列の追加」タブに「カスタム列」というメニューがきちんとあります

 今回は、下の図の売上金額の集計表をもとにして、IF式を組み合わせて新たな列を作成する方法を解説します

売上金額

アイコン

上級10回目_演習 16.89 KB 56 downloads

...
 

上の図の表「売上金額」を元にして、来期の売上予測を2つのパターンで作成し、新たな列を2列追加します

来期の売上予測のパターンの1つ目は消極的な予測です

・地域がアメリカ ➡ 10%増加

・それ以外 ➡ 5%増加

2つ目は積極的な予測です

・地域がアメリカ ➡ 15%増加

・製品がトラック、且つ、地域がヨーロッパ ➡ 10%増加

・上記2つ以外 ➡ 5%増加

1つ目は1つのIF文により、2つの計算式を作成します

2つ目は2つのIF文により、3つの計算式を作成します

 しかも、2つ目のパターンの3番目の計算式は「且つ」なので「AND」を組み合わせます

作成する計算式を説明したところで、本格的な解説に入ります

消極的パターン

解説は、Power Queryエディターを開いたところから始めます

主な解説内容は、次の①~③があります

①はIF文を作成するメニューの場所

②IF文を実際に作成する画面の詳細

③②を行う上での注意点

では、まずは①から解説します

① IF文を作成するメニューの場所

まず「列の追加」タブの「カスタム列」をクリックします

すると次のような画面が開きます

②IFを実際に作成する画面の詳細

まず、この「カスタム列」画面の解説を3か所に分けて行います

・新しい列名➡IF文を使用して新たに作成する列の名称を記入

・カスタム列の式➡「=」から右にIF文を記入

・<<挿入➡上の「使用できる列」で指定された「列」を式の中に挿入

3番目の「<<挿入」の使い方については、以下、詳細に解説します

まずは上の「使用できる列」の中から該当する「列」をカーソルで選択します

次に画面右下の挿入ボタンを押すと、下のGIF画像のように前述の「カスタム列の式」の欄に選択された列が挿入されます

この「カスタム列画面」の3か所について解説したところで、実際にIF文を記入していきます

IF文の構文は以下の通りとなります

【if 条件式 then 条件式に合致する場合 else 条件式に合致しない場合

内容はVBAでIF文を書く場合と、ほぼ一緒です

最後に「End IF」を付けないところだけが違います

実際の消極パターンを書いた画面は、次の通りとなります

【if 条件式 then 条件式に合致する場合 else 条件式に合致しない場合

上の構文に、消極的パターンを当てはめて数式が書いてあります

if [地域]=”アメリカ” then [売上金額]*1.1 else [売上金額]*1.05】

③②を行う上での注意点

ここで1点、注意点があります

上の画像の下に「トークン Eof・・・」なるエラーが出ています

これは、式の構文の中に大文字が入っているからです

式の構文は、下のテキストのように、全て小文字で記入するようにしてください

IF、THEN、ELSE ➡ if、then、else

では、正しく数式を記入したところで下のOKボタンを押します

そうすると、Power Queryエディター画面に新たな列が挿入されます

では、念の為に新たに挿入された列が正しいかどうかをPower Queryエディター上で確認します

まず「売上金額」と「予測式_消極」の列をカーソルで入れ替えます

次に上の両列をカーソルで選択したまま「列のタブ」の「標準」から除算をクリックします

すると、次の様に「(左側)予測式_消去」÷「(右側)売上金額」の結果が出力されます

「標準」機能の計算は、列の位置が左にあるものから自動的に計算されてしまうので、列の位置を入れ替えることを事前に行いました

さて、出力結果は次の通り、正確に出力されていたので「積極パターン」の解説に移ります

積極パターン

まず、積極パターンの内容を振り返りましょう

・地域がアメリカ ➡ 15%増加(A

・製品がトラック、且つ、地域がヨーロッパ ➡ 10%増加(B)

・上記2つ以外 ➡ 5%増加(C)

では上記のA~Cを、「カスタム列を作成する画面」に当てはめると次のような式になります

まず、前述のA( 地域がアメリカ ➡ 15%増加 )はの式のように、1.の消極パターンと同様の書き方です

【if [地域]=”アメリカ” then [売上金額]*1.15】

次にBの箇所を書き始めるところが1.の消極パターンと違います

「else」の後にそのまま2つ目のIF文を「AND」を交えて、の式のように書きます

【else if [地域]=”ヨーロッパ” and [製品別]=”トラック” then [売上金額]* 1.1】

そして最後にCを「else」の後に書きます

else [売上金額]*1.05

上の3つの数式をつなげると次のようになります

if [地域]=”アメリカ” then [売上金額]*1.15 else if [地域]=”ヨーロッパ” and [製品別]=”トラック” then [売上金額]* 1.1 else [売上金額]*1.05

「カスタム列を設定する画面」の下のOKボタンを押すと、次の様に出力されます

1.の消極パターンでも行ったように、検算を行うと次のようになりました

 Bの 条件【製品がトラック、且つ、地域がヨーロッパ ➡ 10%増加】もしっかり反映されています

 上のPower Queryエディタの内容をエクセルシートに読込処理を行うと、次の画像のようになります

<まとめ>

今回は、IF文を使用した列を追加する方法を解説しました

IF文の構文の書き方はVBAとほぼ同じになっており、次の通りとなっています

【if 条件式 then 条件式に合致する場合 else 条件式に合致しない場合

 IF文を更に組み合わせる場合には、上記の「else」の後にまたIF文を追加すればOKです

 尚、構文を間違えていたり、前述した大文字で記入を行ったりすると 「トークン Eof・・・」なるエラーが出てしまいますので注意が必要です

 ちなみに、正確に数式を記入できている場合には、以下のメッセージが画面下にでます!

今回の解説は以上です

この記事の内容をマスターしたら、M言語を使用した「カスタム列」にもぜひチャレンジしてみてください!

https://analytic-vba.com/power-query/m-code/mcode-begin-custom/

長文に最後までお付き合い頂き、誠にありがとうございました

参考までに、今回の解説で使用したデータと完成したデータを添付しておきます

アイコン

上級10回目 24.44 KB 13 downloads

...

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村 IT技術ブログ VBAへ

にほんブログ村