|
オキシドール さん、こんにちわ。
>実行後A45に入力されいてる日付データが下記のようになります。
>CSV元データ 2010/4/20 14:34:01 (表示形式 ユーザ定義にてyyyy/m/d h:mm)
>実行後 2020/10/4 14:34:01 (表示形式 ユーザ定義にてyyyy/m/d h:mm)
元データが、
2010/4/20 14:34:01 ではなくて
10/4/20 14:34:01 となっていませんか?
マクロでは、年の部分が4桁で入っていない場合は、MDY順で読み込まれるみたいです(日付への変換が失敗したら文字列のままで読み込まれます)。
英語表記で日付は May 2, 2010 というのがデフォだからだと思いますが。
なので、マクロ実行前にテキストファイルの年を4桁に直すか、一旦配列に入れて処理をしてからセルに書き出すかしたほうがよいです。
私は以前、後者で対応しました。
(追記:参考)
ちなみにこんな感じです。
Option Explicit
Sub Macro1()
Dim S As Variant, II As Long, NN As Long, A$ 'A As String
Open ファイル名(GetOpenFileNameで取得したもの) For Input As #1
Do Until EOF(1)
'1行ずつ読み込んで処理
Line Input #1, A$
'ダブルクォーテーションを除いて、カンマでちぎる
S = Split(Replace(A$, """", ""), ",")
'下準備:西暦年と思われるところに20をつける
For II = LBound(S) To UBound(S)
If Len(S(II)) - Len(Replace(S(II), "/", "")) = 2 Then
If Mid(S(II), 3, 1) = "/" Then S(II) = "20" & S(II) '20をつける
End If
Next
'
NN = NN + 1
'マクロのあるブックのシート1の1行目から順に転記
With ThisWorkbook.Worksheets(1)
With .Range(.Cells(NN, 1), .Cells(NN, 1 + UBound(S)))
.Value = S '値をセルに送る
.Value = .Value '魔法の呪文
End With
End With
Loop
Close #1
End Sub
1行ずつ処理をする例です。
読み込むテキストデータがものすごく多い場合は1行ずつではなく、まとめて読み込んで処理すると速くなります。
もちろん、改行、再計算、改ページ更新を切るだけでもそれなりにはやくなります。
|
|