最近のTVコマーシャルで聞いたフレーズ「ぶれんじゃねーぞ」という言葉。

VBAに関して、自分ではこうしよう、ああしよう、というものは持っていたつもりである。しかし、ここ最近は特に、ブログにはその方向とからはぶれた情報をかなりアップしてきていたように思う。だからモチベーションが上がらず、更新頻度も落ちているのではないかと自己分析。

そもそも、自分のメモとして開始し、過去に作業したモノなどを遠隔地で取り出せるようにしようとしたのがこのブログの始まり。確認すると 現存する記事で一番古いのは 2006/3/31。てこ入れなどで触っていたのでそれより少し前からとなる。当時は確かライブドアブログが利用者一位で、二位だったアメブロが猛追していた頃だったと記憶している。利用者も100万人に届くとか、越えたとか言っていた頃だ。仕事ではまさにVBAで基幹システムを構築した後で、そのノウハウを残しておこう、と思っていた頃だったか。

原点回帰を試みてみようと思う。
現在使っている携帯電話(PHSなのだが)SHARP製で、OS は Windows Mobile である。
このところ、動作が極端に遅かった。メールを起動するにも、メールを選択するにも、えらく時間がかかっていた。ボタンを押してから20秒とか。これではちょっと困る。
メールをためすぎたか?と思い削除してもあまり効果無し。

あるとき、なんとなく電源を入れ直してみた。すると、今までのがウソのように反応がよくなった。
一般のWindows OS も「電源入れっぱなし」だと同様のことが起こるのだろうか?だとするとサーバーOSなんかも定期的にリブートがいるのかな?などと考えた現象であった。

Excel 5 のVBAを使っていた人にとって、次の Excel 95 のVBAで難儀な思いをされた方は多いかもしれない。というのも、内部で扱うコードが変わったからだ。

従来は、例えば あいうえおABCDE といった、全角と半角が混じった文字列の長さを取ると
・Len()関数では文字数の 10
・LenB()関数ではバイト数の 15 (全角が1文字2バイト、半角が1文字1バイト)
という値が返っていた。

ところがバージョンが上がったら
・Len()関数では文字数の 10
・LenB()関数ではバイト数の 20 (2バイトのUniCodeなので文字数の倍の値)
という値が返るようになった。それは今なお同様である。

確かに関数としては正しい動きなのかも知れない。しかし、それなら単に×2をしても求められるではないか。おかげで「全角文字がどれだけ混じっているか」というようなことをLenB関数の結果からLen関数の結果を引けば求められる、というようなことにはならず、いったんStrConvで変換してからとかすることになっている。

ただ、注意点として。StrConvでUniCodeからShiftJis+ASCIIに変換すると、内部的には「バイナリ」である訳で、変換したモノをRightB、LeftB、MidBなどで切り出すのはいいとしても、文字と一致するかを判定するには内部コードと同じUniCodeに戻してやらないといけない。

意外とこういうところではまることがあるので注意したい。