「スペース?コマンドのミス?なんで動かないんだ…」
鶏肉加工品の生産予定を管理するシステムをVBAで開発していたときにおきた今日の話です。
4つの班のデータを処理するプログラムを書いたのですが、1班・3班は正常に動いて、2班・4班だけスルーされる。
おかしい。条件式は全部同じはずなのに。
Loopで同じプログラムを数字と参照を変えて 1→2→3→4 と回しているだけ。
スペースが混入しているのか、コマンドのミスか、いろいろ確認しましたが、どこも間違っていない。バグ!?
あっちゃ、こっちゃ探して……しばらく悩んで、ようやく犯人を見つけました。
こちらをご覧ください。

違いわかりますか?
4つ全部、同じ「○」に見えますよね?
でも、プログラムの内部ではこう見えています。
1班 → 〇(漢数字のゼロ U+3007)
2班 → ○(記号の白丸 U+25CB)
3班 → 〇(漢数字のゼロ U+3007)
4班 → ○(漢数字のゼロ U+3007)
人間の目では、絶対に区別がつきません。特に、プログラムのエディター画面は文字も小さくて・・・

Excelのセルに入力された「〇」と、プログラムが比較している「○」が微妙にズレていた。たったそれだけで、条件が一切マッチしなくなっていたのです。
確かに、太字で見やすいなと思っていたけど、まさかこんなことが・・ 42分 時間溶かしましたよ 涙
これは「○」だけの話ではありません。
たとえばこちら。
コーヒー
コーヒー
「長いのと短いの、2種類だな」
…と思うじゃないですか。
実は4つ全部、別の文字です。
「ー」→ 長音符 U+30FC
「ー」→ 全角ダッシュ U+2014
「ー」→ 半角長音符 U+FF70
「ー」→ 半角ハイフン U+002D
システムには4種類の「コーヒー」が存在しています。
手入力のデータが混在する現場では、こういうことが静かに起きています。
データを目で見て「合ってるはず」と思っても、システムには別物として映っていることがある。
「動くはずなのに動かない」という場面に遭遇したら、文字コードの混在を一度疑ってみてください。
株式会社京都みえる化デザイン研究所
中小企業診断士 平澤貴啓

