Jose's FANTASY SPORTS!

アメリカンフットボールを中心にスポーツ好きで、カントリーギター好きのJoseによる雑記帳です。

細かい事は分からんがVBAがやりたい-14-

2010年04月19日 22時17分08秒 | いきなりVBA(Excel)
[ いきなりVBA ]
いきなりVBA 第1回 LOG
前回のSelect Caseで始まるコードで、想定外の文字列が入った時に“何も起きない”という話をしました。
プログラムめいたものをやっていると、この“何も起きない”というのはクセモノです。

エラーが出て、処理されない場合は、自分が間違った事をすぐに自覚できます。
ところが何も起きない場合、処理が正常に行われたのかそうでないのか、分かりづらいのです。

Select~の場合、Case Elseという分岐を設ける事によって、こうした状況を改善する事ができます。
前回のコードで、書き方がまずいとしたのは、このCase Elseを書いていない点です。

前回のコードにCase Elseを付け足すと、こうなります。

Select Case Range("B2").Value
Case "カロライナ"
Range("C2").Value = "マッドキャッツ"
Case "テネシー"
Range("C2").Value = "スモーキーズ"
Case "ハンツヴィル"
Range("C2").Value = "スターズ"
Case "ウェストテネシー"
Range("C2").Value = "ダイヤモンドジャックス"
Case "チャタヌーガ"
Range("C2").Value = "ルックアウツ"
  Case Else
Range("C2").Value = "予期していない値が入力されました。"
End Select


B2に、値の条件として指定していない値を入力して、ボタンをクリックすると...


こうなります。

条件として指定した値以外の場合すべてが、この処理になります。

前回最後に書いた、オートフィルタで制限する方法でも回避できそうですが、実際の現場では本当にユーザーって、何するか分からないんで、オートフィルタでの制限をかけたうえで、Case Elseの設定しておくべしです。

BGM♪ Everybody else / Greg Kihn Band
メロディーが綺麗で、大好きな歌です。
elseは、~以外の、というような意味ですね。everybody elseだと、他の誰でもという意味になると思います。
Case elseも、まさにCaseで指定した場合“以外”の場合という指定になります。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

細かい事は分からんがVBAがやりたい-13-

2010年04月15日 23時03分41秒 | いきなりVBA(Excel)
[ いきなりVBA ]
いきなりVBA 第1回 LOG
前回、条件分岐をいくつも重ねると、自分でもよく分からなくなってくる事ってのが結構あるよねって話をしました。

今回は、B2セルが●●だったら、というひとつの条件に対して分岐が幾つもある時に便利なコードです。

Select文とか言われるやつです。
Select Case ●● '●●が~だったらという条件
 Case ●●   '~だったらの条件1
 ■■ 'どうする部分
 Case ●●   '~だったらの条件2
 ■■ 'どうする部分
End Select
という形です。

実例で見たほうがいいですね。
B2セルに、都市名を入れてボタンを押すと、球団欄にチーム名が表示されるコードを作ってみました。
ボタンに設定したコードは、こんな感じです。

Select Case Range("B2").Value
Case "カロライナ"
Range("C2").Value = "マッドキャッツ"
Case "テネシー"
Range("C2").Value = "スモーキーズ"
Case "ハンツヴィル"
Range("C2").Value = "スターズ"
Case "ウェストテネシー"
Range("C2").Value = "ダイヤモンドジャックス"
Case "チャタヌーガ"
Range("C2").Value = "ルックアウツ"
End Select

まずは、都市名にカロライナと入れてみましょう。

ボタンをクリックすると、マッドキャッツが表示されます。

もちろん、NFLファンの方はコードのマッドキャッツという部分にパンサーズって入れといてもいいですよ(笑)。

今度は、テネシーと入れてみましょう。

(画像では、C2欄のマッドキャッツという文字列を消しておきましたが、この記事を読みながら続けている方は、C2にマッドキャッツという文字列が残っているはずですね。)

ボタンをクリックすると、今度はC2にスモーキーズという文字列が入りました。


もちろん、パソコンくんはコードに記載した事しかやりません。
だから、コードに記載していない文字列をB2に入力した場合は...。



ボタンをクリックしても、何も起こりません。

これは、コードの書き方が良くないのですが、それはまた次回に。
とりあえずは、プルダウンとかにしておくと、こういう事態を防ぐ事ができます。


ともあれ、Selectは便利なコードですね。

BGM♪ Bad Case of Loving you(Doctor,Doctor) / Robert Palmer
むぅカッコいい。ロバート・パーマーの曲の中では、一番好きです。
取り合えずCaseって言ったら、まずはこの曲でした。
コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

細かい事は分からんがVBAがやりたい-12-

2010年04月14日 23時00分00秒 | いきなりVBA(Excel)
[ いきなりVBA ]
いきなりVBA 第1回 LOG
前回の3段階に続いて、4段階もやっておきましょう。
今度は、前回それ以外だった部分を、もう一段階分岐させています。

B2セルが…
ペイトン → C2に18
イーライ → C2に10
アーチー → C2に8
それ以外 → 不明
と入れるようにしています。

VBAでは、こんなコードです。

If Range("B2").Value = "ペイトン" Then
Range("C2").Value = 18
ElseIf Range("B2").Value = "イーライ" Then
Range("C2").Value = 10
ElseIf Range("B2").Value = "アーチー" Then
Range("C2").Value = 8
Else
Range("C2").Value = 不明
End If

ElseIfは、どんどんつなげていけるんですね。
あんまり多段階に分岐させるのは関心しませんが、必要な時にはこういう処理ができるという事を覚えておいて損は無いです。

でもやっぱりこれだと、入る値によって分岐する処理が、多くなるとそれだけ複雑になってしまいますね。
コードがごちゃごちゃしてくると、確認や修正が困難になる事も問題です。

という訳で、次回は多段階に分岐させる時の便利なコードに進みましょう。

BGM♪ Cascade / Chet Atkins
cascadeは、階段状の滝のように、段階的に流れ落ちる水や、段階的な処理や接続という意味に使われる言葉です。
この曲でチェット・アトキンスは、自身の様々な曲で用いているテクニックやフレーズをつなぎ合わせるようにして演奏しています。
If~ElseIF~Elseで、こんなにいっぱい接続したら、作った本人も分からないコードになる事、請け合いです。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

細かい事は分からんがVBAがやりたい-11-

2010年04月09日 23時59分59秒 | いきなりVBA(Excel)
[ いきなりVBA ]
いきなりVBA 第1回 LOG
実際に処理をする際、条件分岐が1段階で収まってくれない事もよくあるものです。
例えば、こんな風にとか...。


前の例に戻してみると、こんな感じ。


これをIF関数であらわせば、こうなります。

IF(B2="ペイトン",18,IF(B2="イーライ",10,8))

B2セルの値がペイトンの場合(18)、イーライの場合(10)、それ以外(8)に分岐させています。

これをVBAで表すと、こうなります。

If Range("B2").Value = "ペイトン" Then
Range("C2").Value = 18
ElseIf Range("B2").Value = "イーライ" Then
Range("C2").Value = 10
Else
Range("C2").Value = 8
End If

あくまでもペイトンの場合(18)、イーライの場合(10)、それ以外(8)ですので、ご注意。
従って、B2セルにペイトンと入れた場合は

C2に18が入ります。

B2セルにイーライと入れた場合は、

C2に10が入ります。

でも、それ以外の値の場合は、何を入れてもC2には8が入ります。

とか

とかでも、8になっちゃいます。

ま、ここはVBAの話とはズレるんで、ここまでにしときましょうか。

BGM♪ 落ちる涙が銅貨なら(If Teardrops Were Pennies) / Carl Smith
ジューン・カーター・キャッシュの元夫、カール・スミスのヒット曲です。
落ちる涙が銅貨 ─(Yes)→ 心の痛みが金 ─(Yes)→ 私のポケットは宝でいっぱい
という条件分岐の歌(?)です。
現実は最初の分岐でNoに辿って、今の状況という事でしょうね。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

細かい事は分からんがVBAがやりたい-10-

2010年04月08日 23時00分00秒 | いきなりVBA(Excel)
[ いきなりVBA ]
いきなりVBA 第1回 LOG
今日は、条件分岐処理をやってみましょう。

通常のIF関数を使うと、こんな条件分岐処理をする事ができますよね。

C2に条件分岐の結果を入力

 =IF(B2="ペイトン",18,10)
 (B2セルが“ペイトン”だったらC2に18を、そうでなければ10を入力)

同じ事をVBAでやろうとすると、こうなります。

C2に条件分岐の結果を入力

If Range("B2").Value = "ペイトン" Then
Range("C2").Value = 18
Else
Range("C2").Value = 10
End If

ちょっと困ってしまう事があります。

計算式の場合なら、C3にも同じ事をやろうとする際、下のセルにコピーとかできますね。

ところがこれを(ここまでの)VBAでやろうとすると、この式をC3でもやろうとすると、別の方法を用いるか、C2のトコをC3に書き換えて、続けて処理するか...。

その辺は、おいおい記載しようかと。

ともあれ、これだけでも条件分岐ができる事で、処理の幅は大きく広がるんじゃないでしょうか。

次回も条件分岐でいこうと思います。

BGM♪ お金があればね(If You Got The Money, I Got The Time) / Lefty Frizzell
君にお金があるなら、自分はいつでも暇ですよ、という歌です。
レフティは、これを逆にしてI got a money, If you got a timeという歌詞を、I'm an old old manという曲に使ってますね。
ともあれ、非常に分かりやすい条件分岐による行動のようです。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする