お世話になります。
標題の件で相談させてください。
AccessからCSVファイルを取り込む(Docmd.TransferText)際、
前加工として、不要な列を削除して上書き保存してから取り込もうとしています。
※オートメーションにより、最終列目から1列目までループ処理をして、削除対象列かどうかを判断して列削除
ところが、この加工により日付型のデータが、加工前はyyyy/m/dの形式だったものが、保存後はm/d/yyyyの形式に変ってしまいます。
もとの形式で取り込むよい方法をご教授ください。
よろしくお願いいたします。
テキストファイルに対してオートメーションってできました?ちょっとどのようにしているのか分かりません。
csvファイルの列構成が固定で、削除する列も固定なら、まずは手動でインポートして、そのときに、データ型を設定したり、インポートしない列を設定できますので、その設定をして、インポート定義として保存します。
その後、
Docmd.TransferText
の引数でインポート定義名を指定してインポートすればいいかと思います。ありがとうございます。
おっしゃる通り、元になるファイルから必要ない列のみ残したものを、実際にインポートしてテーブル定義を作成しました。
元のファイルは列数が250以上ありまして、インポートの定義でインポートするしないを設定するのは大変かなと思ってしまいまた。実際に使う列は250のうち10程度です。
データも、一月4万件のデータを12ヶ月分洗い替えでインポートしなければならないため、事前に加工しようと考えました。
そのようにやっているのですが、日付データの形式が変わってしまいます。
取り込む10のフィールドは決まっているのですよね。
ならば、一度だけ手動でインポート定義を作成して保存しておけば、後はそれを使って Docmd.TransferText すればいいでしょう。インポート定義では、インポートする/しないの選択、データ型の指定もできますので、日付/時刻型に設定しておけばいいでしょう。
日付/時刻型なら、書式設定で、yyyy/m/d でも、和暦表示でも、お好みの表示にすることができます。
すみません、業務が立て込んでおり確認とご報告が遅くなってしまいました。
一度だけ手動でインポート定義を作成して保存しました。
インポート定義の名前:"CSVインポート"
この定義を使って下記のようにインポートできるのでしょうか?
strTblName:ここは固定のテーブル
strCSVFilePath:インポートするファイル名は変数で与えるため可変です
DoCmd.TransferText acImportDelim, "CSVインポート", strTblName, strCSVFilePath, True
何度かトライしましたが、エラーが出てうまくインポートできませんでした。
すみません、追記です。
strTblNameのテーブル定義は、必要な10のフィールドに絞っものを使っています。
どのようなエラーがでますか。エラーメッセージを提示してください。
また、同じデータ、同じ追加先テーブルで、手動で保存済みインポート定義を使ってインポートできるかも確認してください。
失礼いたしました。
手順のミスでした。
アドバイスいただいた通りに動作いたしました。