Excelのvbaで行うCSVデータの取り込みで教えて頂きたいことがございます。 配列に格納して一括でシートへ書き込みを行おうと考えており、以下のコードを作成致しました。
Excelのvbaで行うCSVデータの取り込みで教えて頂きたいことがございます。 配列に格納して一括でシートへ書き込みを行おうと考えており、以下のコードを作成致しました。 Dim myFileName As Variant Dim Fcn As Variant Dim i, j As Long Dim buf As Variant Dim tmp As Variant myFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _ Title:="CSVファイルの選択") If myFileName = False Then Exit Sub End If Dim str As Variant Dim data() As Variant ReDim data(99999, 0) Dim max As Long max = 0 i = 0 Open myFileName For Input As #1 Range("I:I,O:O").NumberFormat = "@" Do Until EOF(1) Line Input #1, buf tmp = Split(buf, ",") j = 0 For Each str In tmp If max < j Then ReDim Preserve data(99999, j) max = j End If data(i, j) = str j = j + 1 Next str i = i + 1 Loop Close #1 With Worksheets(10) .Range(.Cells(1, 1), .Cells(100000, max + 1)) = data End With CSVデータのI列、O列を文字列の状態で出力したいのですが、最後の書き込み時に数値や日付として認識されてしまい、元データでは数字の最初に「0」がついているセルや「1-1」のようなセルがそのままの状態で出力されません。 ローカルウィンドウで確認する限り、配列への格納時は文字列として取り込まれているようでした。 いろいろと調べてたりコードをいじっても解決できなかったためご教示頂けませんでしょうか。
Visual Basic | Excel・66閲覧・100
ベストアンサー
最終のデータ設定でシートが違っているような気がしますが? Range("I:I,O:O").NumberFormat = "@" のコードは With Worksheets(10) .Range(.Cells(1, 1), .Cells(100000, max + 1)) = data End With のブロック中でいいのでは? With Worksheets(10) .Range("I:I,O:O").NumberFormat = "@" .Range(.Cells(1, 1), .Cells(100000, max + 1)) = data End With
質問者からのお礼コメント
ご回答ありがとうございます。 全く気づきませんでした。 ご指摘の位置に変更したところ思う通りの結果を得ることが出来ました。 誠にありがとうございます。
お礼日時:6/24 10:36