エクセルVBA達人養成塾 小川です。
ブログのデザインを刷新しました。
前からしたかったことなのですが、できるとやはり気分もすっきり。ブログ更新へのモチベーションもあがります。
ということで、さいきん書いたコードから一部を抜粋。
セルH3には、ヤマト運輸で送る貨物の配送時間指定の値が埋め込まれていることがある。
1820なら、18時~20時。
2021なら、20時~21時とか、そんな感じ。
ところが、午前指定は、
0812
と書かれてしかるべきところ、
812
と表記されてしまっている。エクセルだからね。
どうしてそんなことが?!とピンとこない方は、こちらの動画で学んでください。
何も表記がないときは、時間指定はなし。
ということで、こういう値を整形したい。さて、こういうとき、どうするか。
結論としては、セルの書式を文字列型になおしてから、「812」のような三桁表記を四桁になおす。
たとえば、こんな感じ↓。
Range("H3").NumberFormatLocal = "@" 'セルの書式を文字列型になおす。 '↓入力されている値を評価し、必要に応じて再設定。ついでに、簡単な異常値検査も。 Select Case Len(CStr(Range("H3").Value)) Case 0 Case 1 To 2 Range("H3").Select MsgBox "配達時間帯の文字を確認してください!" Exit Sub Case 3 Range("H3").Value = "0" & Range("H3").Value Case 4 Case Else Range("H3").Select MsgBox "配達時間帯の文字を確認してください!" Exit Sub End Select
セルの中身が0桁のときにはなにもしない。
1~2桁のときはそもそもありえない値が入っているのでエラーメッセージ。
3桁のときには、812だろうと践んで、0812になおす。
4桁のときには何もしない。
それ以外(つまり5桁以上)のときも、ありえない値が入っているのでエラーメッセージ。
エクセルVBA基礎編で扱うIf文でも書けますが、Select Case構文使うとこういうプログラムをすっきり書けますね。
達人養成塾の講座だと、Select Case構文はエクセルVBA発展編1で登場します。
もっとやるなら、入っているのは数値かどうか調べるとかもあり。
あと、入っている値が以下のどれかと一致するか調べるとかしてもよいです。
“” ‘注: 長さ0 の文字列。つまり、未記入。
1214
1416
1618
1820
2021
プログラムを書くときにどこまで異常系をカバーするかは、要求水準によります。