どうりで正しく判定しないわけだ…
席に戻った星くんは、うまくいかなかったときのオーダー表を使って、デバッグを行うことにしました。
「(オーグチさんのシステムが最優先といわれたけど、バグ対応は別だ。
これを修正しないと、先輩の作業量がまるで違ってくる…。
いったい、どこに問題があるんだ??)」
星くんは、正しく処理が行われなかったデータの箇所を、ステップモードで実行し、
セルに格納されている値を調べました。
「んん??おかしいぞ…。
このアイテムとこのアイテムは"同じ"と判定されなければいけないのに………なんで?」
星くんは、コードにDebug.Print※を追加し、セルの値をイミディエイトウィンドウに出力させました。
(※Debug.Printという命令を使うと、イミディエイトウィンドウに文字列を出力することができます。)
「なんだこれ…全角文字と半角文字が混在してるじゃないか…。
どうりで正しく判定しないわけだ…」
オーダー表は担当者が手で直接入力するため、様々な文字列が入力されています。
VBAで比較するためには、全角半角や大文字小文字、これらを統一して比較する必要があります。
「…なんだ、こんなの簡単じゃないか。
比較するための文字列を作るFunctionプロシージャを1つ追加するだけだ。
よかった、簡単に修正できるエラーで…」
星くんはホッと胸をなでおろし、カタカタカタ…と、Functionプロシージャを作成し始めました。
Function 比較文字作成(ByVal item As String) As String
item = StrConv(item, vbNarrow + vbLowerCase)
item = Replace(item, " ", "")
比較文字作成 = item
End Function
「…これでヨシ…っと!比較文字作成プロシージャの引数itemにセルの値を渡すんだ。
まず、StrConv関数で引数itemを半角、小文字に変換する。
vbNarrowは半角、vbLowerCaseは小文字に変換する指定だからこれでオッケーだ。
次に、Replace関数で引数itemの中のスペースを削除する。
Trim関数は文字列の中にあるスペースまでは削除してくれないから、この方が確実だ…」
再びカタカタカタ…とコードを打ち始めます。
「…あとは、このFunctionプロシージャを、条件判定のとき呼び出すようにすればいい…。
こうしてっと…」