3日がかりのその仕事、3分で終わらせる方法教えます!
パソコンスキルの心技体

ヤマト運輸の時間指定表記「0812」が「812」になっているのを修正エクセルマクロのプログラム

2014年3月28日
  • このエントリーをはてなブックマークに追加
  • follow us in feedly

エクセル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

プログラムを書くときにどこまで異常系をカバーするかは、要求水準によります。

キーワード

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

最新の記事

人気記事

最新記事

カテゴリ

最新コメント

タグクラウド