「日付操作マクロ」で
> うちのオフコンは日付を例えば「2007/07/10」ならば「70710」または「070
> 710」という文字列で出力する。
と書きました。
ところが売上データをエクスポートすると「2007/07/10」ならば「1070710」と出力するのです、何でこうなるかというとオフコン管理者である社長の性格そのままだということです、この場合なんらの加工もせず垂れ流しているだけというわけです。
で、なぜ「1070710」になるかというと、これは「w2k」つまり「2000年問題」に対処するためのものです、100年前にリセットされないように頭に「1」を付ければ2099年までは使えるわけです、それまでには当然西暦フルスペック対応のシステムに入れ替えるだろうし・・・・・・・・・。
でもうちの会社は100年も持たないでしょう、運が良くて身売りですね。
閑話休題。
「1070710」を表計算やデータベースソフトで「普通」に扱える日付データに変換するのに大分前から苦労しています。
日付.value=mid(日付,2,2)& "/" &mid(日付,4,2)& "/" &right(日付,2)
とやると「2010/7/7」となります、そこで
Range("日付").NumberFormatLocal = "@"
日付.value=mid(日付,2,2)& "/" &mid(日付,4,2)& "/" &right(日付,2)
と書式を文字列にすると「07/07/10」となり「やったあ!」と気を良くしたのも束の間、これはあくまでも文字列のままで・・・、結局何をしたいかというとピボット・テーブルでデータの分析をしたいのです、文字列のままでは「月」毎に括ることが出来なくて非常に困っていたのです。
昨日はようやく2階でPCの前に居られる気候だったので丸一日悪戦苦闘していました、でもどうしてもだめで諦めて風呂に入り、寝ようと2階に上がってきました、そしていつもの習慣で床に入る前にPCを点け、諦めきれずにVBA関数のヘルプを見ていたら「DateSerial関数」というのが目に付きました。
これは DateSerial(yyyy,mm,dd) でそれぞれの引数を指定することで「シリアル値」に変換してくれる関数です、そこで眠い目をこすりつつ作ったのがこれです。
Sub お馬鹿なAS400の日付を直す()
Dim 行 As Integer
Dim 範囲 As Range
Dim 日付 As Variant
行 = Range("A1").CurrentRegion.Rows.Count
Set 範囲 = Range(Cells(1, 1), Cells(行, 1))
For Each 日付 In 範囲
日付.Value = DateSerial(Left(日付, 3) + 1900, _
Mid(日付, 4, 2), Right(日付, 2))
Next
範囲.Columns.AutoFit
End Sub
おやすみ~~(-_-)zzz
> うちのオフコンは日付を例えば「2007/07/10」ならば「70710」または「070
> 710」という文字列で出力する。
と書きました。
ところが売上データをエクスポートすると「2007/07/10」ならば「1070710」と出力するのです、何でこうなるかというとオフコン管理者である社長の性格そのままだということです、この場合なんらの加工もせず垂れ流しているだけというわけです。
で、なぜ「1070710」になるかというと、これは「w2k」つまり「2000年問題」に対処するためのものです、100年前にリセットされないように頭に「1」を付ければ2099年までは使えるわけです、それまでには当然西暦フルスペック対応のシステムに入れ替えるだろうし・・・・・・・・・。
でもうちの会社は100年も持たないでしょう、運が良くて身売りですね。
閑話休題。
「1070710」を表計算やデータベースソフトで「普通」に扱える日付データに変換するのに大分前から苦労しています。
日付.value=mid(日付,2,2)& "/" &mid(日付,4,2)& "/" &right(日付,2)
とやると「2010/7/7」となります、そこで
Range("日付").NumberFormatLocal = "@"
日付.value=mid(日付,2,2)& "/" &mid(日付,4,2)& "/" &right(日付,2)
と書式を文字列にすると「07/07/10」となり「やったあ!」と気を良くしたのも束の間、これはあくまでも文字列のままで・・・、結局何をしたいかというとピボット・テーブルでデータの分析をしたいのです、文字列のままでは「月」毎に括ることが出来なくて非常に困っていたのです。
昨日はようやく2階でPCの前に居られる気候だったので丸一日悪戦苦闘していました、でもどうしてもだめで諦めて風呂に入り、寝ようと2階に上がってきました、そしていつもの習慣で床に入る前にPCを点け、諦めきれずにVBA関数のヘルプを見ていたら「DateSerial関数」というのが目に付きました。
これは DateSerial(yyyy,mm,dd) でそれぞれの引数を指定することで「シリアル値」に変換してくれる関数です、そこで眠い目をこすりつつ作ったのがこれです。
Sub お馬鹿なAS400の日付を直す()
Dim 行 As Integer
Dim 範囲 As Range
Dim 日付 As Variant
行 = Range("A1").CurrentRegion.Rows.Count
Set 範囲 = Range(Cells(1, 1), Cells(行, 1))
For Each 日付 In 範囲
日付.Value = DateSerial(Left(日付, 3) + 1900, _
Mid(日付, 4, 2), Right(日付, 2))
Next
範囲.Columns.AutoFit
End Sub
おやすみ~~(-_-)zzz