Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2921 / 13644 ツリー ←次へ | 前へ→

【65262】VBA実行時の日付データ化けについて オキシドール 10/5/2(日) 16:26 質問[未読]
【65263】Re:VBA実行時の日付データ化けについて りん 10/5/2(日) 18:01 発言[未読]
【65265】Re:VBA実行時の日付データ化けについて オキシドール 10/5/2(日) 19:49 お礼[未読]
【65264】Re:VBA実行時の日付データ化けについて よろずや 10/5/2(日) 18:55 発言[未読]
【65266】Re:VBA実行時の日付データ化けについて オキシドール 10/5/2(日) 19:58 お礼[未読]
【65267】Re:VBA実行時の日付データ化けについて kanabun 10/5/2(日) 20:15 発言[未読]
【65268】Re:VBA実行時の日付データ化けについて オキシドール 10/5/2(日) 20:25 お礼[未読]

【65262】VBA実行時の日付データ化けについて
質問  オキシドール  - 10/5/2(日) 16:26 -

引用なし
パスワード
   はじめましてオキシドールといいます。
マクロ実行時のに日付データが化ける問題で困っています。
任意のCSV形式のシート内セルを全てコピーしマクロ実行bookに貼り付けをするものです。作業はマクロ記録と織り交ぜて実施しています。

実行後A45に入力されいてる日付データが下記のようになります。
CSV元データ 2010/4/20 14:34:01 (表示形式 ユーザ定義にてyyyy/m/d h:mm)
実行後    2020/10/4 14:34:01 (表示形式 ユーザ定義にてyyyy/m/d h:mm)

CSV元データ,マクロ実行book貼り付け結果共にA45以下に入力されているデータが化けてしまいます。他のB〜AIのデータは化けてないようです。
マクロ作成以前の手動でコピー時は問題はありませんでした。

解決方法のご教授をお願いいたします。

作業環境およびコードは下記の通りです。
Excel2003SP3、WIN7(64bit)

Sub Macro4()
'変数 DPデータ,自ブックを宣言
Dim DPデータ As String, 自ブック As String
'自ブックへ現在のファイル名を格納
Set WBK = ThisWorkbook
自ブック = WBK.Name
'ファイルを指定して開く
For Each WBK In Workbooks '←自ブック以外を対象
  DPデータ = Application.GetOpenFilename("Microsoft Excelブック,*.csv")
      If DPデータ <> "False" Then
        Workbooks.Open DPデータ
      End If
    Cells.Select
    Selection.Copy
Next WBK
'自ブックをアクティブにしてDPデータからデータを貼り付け
  ThisWorkbook.Activate
  Cells.Select
  ActiveSheet.Paste
End Sub

【65263】Re:VBA実行時の日付データ化けについて
発言  りん E-MAIL  - 10/5/2(日) 18:01 -

引用なし
パスワード
   オキシドール さん、こんにちわ。

>実行後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行ずつではなく、まとめて読み込んで処理すると速くなります。
もちろん、改行、再計算、改ページ更新を切るだけでもそれなりにはやくなります。

【65264】Re:VBA実行時の日付データ化けについて
発言  よろずや  - 10/5/2(日) 18:55 -

引用なし
パスワード
   >CSV元データ 2010/4/20 14:34:01 (表示形式 ユーザ定義にてyyyy/m/d h:mm)

CSVファイルをエクセルで開くのではなく、メモ帳で開いてみて、
どういうデータが入っているか確認しましょう。

【65265】Re:VBA実行時の日付データ化けについて
お礼  オキシドール  - 10/5/2(日) 19:49 -

引用なし
パスワード
   ▼りん さん返信+コードありがとうございます。
ご指摘の通りテキストファイルで開いてみると10/4/20 14:34:01この形式でした。
会社のPC等はCSVをデフォルトでExcelで開いておりbook間を直接コピペする場合は問題が出ませんでした。マクロが介在する場合は異なるんですね
早速チャレンジしてみます。
このデータですが、産業機器のlogデータで各列32000行以上・・・4Mぐらいです(汗)

【65266】Re:VBA実行時の日付データ化けについて
お礼  オキシドール  - 10/5/2(日) 19:58 -

引用なし
パスワード
   ▼よろずや さん返信ありがとうございます。
テキストでは10/04/20 14:34:01となっていました。
りんさんにご指摘いただきましたが西暦の部分が2桁だと不具合がでるようですね。

【65267】Re:VBA実行時の日付データ化けについて
発言  kanabun  - 10/5/2(日) 20:15 -

引用なし
パスワード
   ▼オキシドール さん:
横からすみません。

>CSV元データ 10/4/20 14:34:01
CSVの日付が MDY形式で読み込まれるので困っているということですか?

>作業環境およびコードは下記の通りです。
>Excel2003SP3、WIN7(64bit)
とのことなので、Openメソッドの引数に Localがありますから、
これを付けて開いてみたらどうでしょう?

>        Workbooks.Open DPデータ
                      ▼ 
        Workbooks.Open DPデータ, Local:=True

【65268】Re:VBA実行時の日付データ化けについて
お礼  オキシドール  - 10/5/2(日) 20:25 -

引用なし
パスワード
   ▼kanabun さん ありがとうございます。
引数をつけるとうまくいきました。
今度引数について勉強してみます。

2921 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free