「そこにあるのに拾えない」事件
先日 Excel について、ある調査を依頼されました。
セル内に記載された品名を、正しく取得できないというのです。
このマクロは、例えば 、もし A1 に「六角穴付きボルト」と入力されているならば
「在庫数を確認してください。」
のメッセージを表示する、といった処理を行うものです。
Sub Sample() If Range("A1").Value = "六角穴付きボルト" Then MsgBox "在庫数を確認してください。" End If End Sub
ところが実際は、ダンマリになってしまう。
私も試してみましたが、A1 セルの「六角穴付きボルト」を正しく拾ってくれません。
そこでまず、以下を疑いました。
- 送り仮名の有り無し問題ではないか?(「六角穴付ボルト」など)
- 「ボルト」が、半角になってないか?(「六角穴付きボルト」など)
しかしどれも、原因ではありませんでした。
最終的に原因を知りえたのは、全くの偶然です。
理由はわかりませんが文字列の後ろに半角スペースが付されており、別の文字として認識されていたことが原因でした。
特に文字列の最後に入力されたスペースは、無色・無味・無臭の毒物に等しい。同じ理由で苦労した経験がないと、なかなか気づくことが出来ません。今回は簡易的に、Trim関数で前後のスペースを削除することで、ひとまず解決としました。
Sub Sample() Dim str As String str = Trim(Range("A1").Value) If str = "六角穴付きボルト" Then MsgBox "在庫数を確認してください。" End If End Sub
今回のまとめ
現象:文字列を期待通りに認識できない
調査:本当に同じ文字列か?(送り仮名、半角全角など)
原因:文字の末尾に半角スペースが付されていた
処方:Trim関数で半角スペースを除去
結果:期待通りの動作となった
参考まで。