Excel2010 VBAでテキストファイル読込
初めて質問させていただきます。
Excel2010のVBAで下記のようなマクロを組み、テキストファイルを読込したところ、データの一部が誤変換されてしまいます。
誤変換内容
11/12/29 →2029/11/12
マクロを使用せず、Excelから直接テキストファイルウィサードを使って読み込んだ場合には、正しく「2011/12/29」となります。
(お恥ずかしい話ですが、Excelシートのセルに直接「11/12/29」と打ち込むと自動的に「2011/12/29」に変換されることを今回初めて知りました。)
同一項目には「11/12/29」形式と「20111229」形式が混在しており、「11/12/29は2011/12/29」、「20111229はそのまま」セルに格納するよう依頼されています。
従って、Array(1, 2)で文字列やArray(1, 5)でYMD形式の日付へ同一項目のデータを固定することはできなくなっております。
テキストデータは「カンマ区切り」の35項目です。
データはネットワーク内の他のPCドライブに保存されています。
因みに「 Workbooks.OpenText Filename:=」以下は、Excelのマクロ記録で取得したものです。
お忙しいところ恐縮ですが、よろしくお願いいたします。
【作成したマクロ】
Sub 読込()
With CreateObject("WScript.Shell")
.currentdirectory = "\\コンピューター名\c\フォルダ名\"
End With
Const cnsTITLE = "テキストファイル読み込み処理"
Const cnsFILTER = "全てのファイル (*.*),*.*"
Set xlAPP = Application
xlAPP.StatusBar = "読み込むファイル名を指定して下さい。"
strFILENAME = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, _
Title:=cnsTITLE)
If StrConv(strFILENAME, vbUpperCase) = "FALSE" Then Exit Sub
Workbooks.OpenText Filename:=strFILENAME, Origin:=932, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=True _
, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _
Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array( _
16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), _
Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), Array(27, 1), Array(28, 1), Array( _
29, 1), Array(30, 1), Array(31, 1), Array(32, 1), Array(33, 1), Array(34, 1), Array(35, 1)) _
, TrailingMinusNumbers:=True
End Sub
お礼
CoalTar様、 お忙しい中回答ありがとうございます。 関数でここまで作りこめるとは目からうろこです。早速試してみました。 26行目以降で"記録 = 0"の場合も私のサンプル結果で1としていた為、 そちらの処理まで入れていただきありがとう御座います。 実際には0ですので、「REPT(" 0",」として使用させていただきました。 こちらのデータは10000レコード以上あり、頻繁にリスト化を実施する為こちらの処理もVBAで記述できれば と考えました。 出力もDBに落としやすい形がいいとアドバイスももらった為、各項目を1Cellに割り当てるような つくりにしていきたいと考えています。 A B C D E 001-H20120910001 0 20120712 63 東京 001-H20120910001 1 20120912 63 東京 001-H20120919999 0 20120909 19 神奈川 当面は頂いた関数を駆使して整形し、再度張りなおす事で対応させて頂きます。 本当にありがとうございました!!