そんなに難しい話ではないんです。与えられた数値をゴニョゴニョして...とかではなくて、下請けならではの悩みの解決法の一つ。
取引先が投げてくるくそデータシート
取引先から渡されたExcelシートの時間が「3桁または4桁の整数」というとんでもないシートがありました。オペレータのお姉さん(想像)が入力するのに、:を入れないくていいから早いんですよねきっと。と思いましたが、こちらはそれを時間として処理しなくては行けないという問題。
私が関わる前は人間が目で確認して、表示を並べ替えてました。ふた桁行ならなんとかなるんですが、取引が増えて3桁行になってくると∩(・∀・)∩ モウ オテアゲダネ。先方は一方的に送って、「やり方は御社に任せます」という信頼関係のかけらもないお言葉...ということで私に話が回って来ました
関数はこちら
時間設定関数
Function try_time(bc_time)
Dim Time_h, Time_m
'-------------------------------------------------------------
'4桁数字による時刻表示に対応する関数
'3桁の場合は1字をHourとし、4桁の場合は2字をHourとする
'HourとMinuteに分割して、hh:mm型に変換して返す
'If文内で、24時以降の場合、翌日のデータとするため1日追加する
'-------------------------------------------------------------
If Len(bc_time) = 3 Then
Time_h = Left(bc_time, 1)
Else
Time_h = Left(bc_time, 2)
End If
Else
End If
Time_m = Right(bc_time, 2)
try_time = Format(Time_h & ":" & Time_m, "hh:mm")
End Function
何しているか
- 先方が送ってくるデータの時間セル(「0945」とか「2330」とか)を関数に取り込み
- 3桁なら左1桁、4桁なら2桁をTime_h(h=hour)に取り込む
- 残り2桁はTime_m(minute)に入れる
- Time_hとTime_mを":"で繋いで、フォーマットをhh:mmして返す
この取引先とのデータのやりとりには必須の関数
になってしまいました。なんかもっと綺麗にできそうですが、そんなに処理時間を食うわけでもないのでまあいいかと