二重否定文…それは時に控えめな肯定を、時に強い肯定を生み出す日本語のテクニックである。
控えめな肯定の例「できなくもない」
強い肯定の例「やらねばならない」
なんてことを考えてたら、そういやNotって二個以上つなげても大丈夫なんかしらと、アホなことを思いついたので、これは検証せねばならない。
実際にやってみた。
Sub hoge() a =100IfNotNotIsNumeric(a)ThenMsgBox"数値に違いない!!"ElseMsgBox"数値ではない"EndIfEndSub
おお、どうやら問題ないようだ。
では4個ならどうか。
Sub fuga() a =100IfNotNotNotNotIsNumeric(a)ThenMsgBox"数値と言えなくもない"ElseMsgBox"数値ではない"EndIfEndSub
いけてるね。
ちょっとこの先は数値ではなくTrueに対して反転していこう。
Sub piyo()IfNotNotNotNotNotNotNotNotNotNot _NotNotNotNotNotNotNotNotNotNot _NotNotNotNotNotNotNotNotNotNot _NotNotNotNotNotNotNotNotNotNot _NotNotNotNotNotNotNotNotNotNot _NotNotNotNotNotNotNotNotNotNot _TrueThenMsgBox"Hello"ElseMsgBox"GoodBye"EndIfEndSub
こんなのも問題なく実行できた。
これ無限につなげていけるんじゃないの?
と行コピーしまくってたら…
えっ、そんなところに限界が!?
数えてみると、行継続文字は24個、つまり25行目までで限界らしい。
またひとつ賢くなった。
いや、ひとつアホになったかな。。
いいだろう。
それなら改行なしでやってやる。
てことでNotをコピペで注入して右へ右へと伸ばしていく。
あれっ?
いつのまにやら二行目に。。。
一行目の最終を確認すると、1023桁。
このあとスペース1個は入ったけれど、それ以上1文字も入らない。
つまりVBEの1行の最大桁数は1024桁だということ!
まぁどうでもいい知識。
ということは、Notの限界個数は計算で求まる。
まず一行目は「If 」がスペース込みで3文字、最後の行結合文字「_」で1文字、あとはスペース込みの「Not 」4文字が何個入るかということ。
(1024-3-1) / 4 = 255個
255個入る!と思ったら最初のゼロ文字目を1桁と数えるらしく、結局254個だった。文字数でいうと1行に1023文字しか入らないわけね。
気を取り直して二行目。
(1023 - 1) / 4 = 255.5
ということでNotが255個、試してみたらちゃんと入った。
最終行は「True Then」を引いて、
(1023 - 9) / 4 = 253.5
Notが253個
トータルすると、
254個 + (255個 * 23行) + 253個 = 6372個!!
理論上、Not演算子は6372個連続で使えるということに。
ではジャンジャンコピーしていこう。
あれ・・・?
からの。。
そんなまさか!
Excel様の堪忍袋の緒が切れた。。
エラーも出してくれない。
さすがにそんなアホはもう知らんと。
どうやら一定数を超えるとバグるらしい。MSさん、しっかりデバッグしてくださいよ~。
…まずはお前の頭をデバッグしてこいと言われそうだな。
さて、仕方ないのでここから数個づつ配置しながらバグが発生するポイントを探ったところ…
ついに。。完成!
今回の検証では3621個というのが限界値のようだ。
ちなみに環境はWin7 32bit Office2010 Pro 32bit。
はい、おしまい。
あー疲れた。