エクセルマクロ・VBA達人養成塾 小川です。
キューバ旅行記、その69です。
ビニャーレス→ハバナ→バラデロ、と移動中。
ハバナのバスターミナルで、一服しています。
英語版旅行ガイド「Lonely Planet」と炭酸水、iPhone。
iPhoneは、携帯版のスペイン語辞書入れと、動画撮影ツールとして持って行きました。
ストラップもかけられないし、タイミング悪く手を滑らせたらなくなってしまうようなものですが..。よく、なくならなかったものです。
キューバ中、どこにでもある、Netsleのアイスの広告。
バスターミナルの電光掲示板で表示されていた、ルートと価格の表。
現地通貨を撮ってみました。1ペソと、3ペソ。
ということで、バスの出発の時間。記念に、カフェテリアの入り口をパチリ。昨日の破れた窓は、この階段を登ったところにあるものです。あれから3ヶ月経っていますが、たぶん、今でも破れたままでしょう… (^^;
昨日の続きです。
昨日のブログ『「If True Then」なんて書き方でテスト』
超初心者が、最初のうちまれにやるミスであり、かつ、超初心者には極めて解説しにくいものをご紹介。
VBAを書き慣れていない人が、たまにこんな書き間違いをしてしまいます。
例えば、セルA1にあらかじめ、3が入っているとき。
セルA2に、セルA1の値に5を足した数を入力しようとします。
以下の書き方なら、問題ありません。
End Sub
ところが、慣れなくていろいろパニクってしまい、こんな書き方になる。
End Sub
このマクロは、実行すると、セルA2に「8」ではなく、「TRUE」と書き込みます。
(セルA1に3が入っていた場合のことです。もしそうでなければ、「FALSE」と書き込まれます)
で。
パニクるんですね (^^;
解説すると。
Range(“A2”).Value = Range(“A1”).Value + 5 = 8
の、左側のイコール「 = 」は、プロパティを設定します、という意味。
右側のイコール「 = 」は、
『もし、セルA1の値に5を足したら8になるなら、「True」、そうでなければ、「False」を返す』
という意味の、比較演算子と解釈されます。(If Range(“A1”).Value + 5 = 8 Then … と書いた場合と同じです )
てことで。
式「Range(“A1”).Value + 5 = 8」は、「True」か「False」を返します。
「True」を返した場合なら、
Range(“A2”).Value = True
ってことですから、セルA2には「True」が入る。
「False」を返した場合なら、
Range(“A2”).Value = False
ってことですから、セルA2には「False」が入る。
ってことです。
そんなわけで。
End Sub
なんてマクロを実行すると、エクセルのセルには、「TRUE」とか「FALSE」とかの値が入る、ということでした。
「参考にしてください」
なんて言われても、実際にこういうミスをしてしまう人には意味不明も甚だしいレベルの内容かもしれませんが。。。
参考にしてください。
あと、VBを教える人も、参考にしてください。
そもそも、VBが、比較演算子は、PerlとかPHPとかみたいに「 == 」と書くとか、「 eq 」と書くとか、そういう仕様になっていれば、
書き間違えから生じるこんなややこしい事態は回避できたはずですけどね…。
てことで。
明日は、この話の続きとして、以前ある受講生のフォローをしたときに書いたマクロを紹介します。
見慣れない人には、若干ヘンタイかもしれません。。が、おもしろいと思える人にはおもしろいかも (^^;