Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11 Pro : Access 2019)
csvファイルの取り込み
投稿日時: 26/04/12 13:18:09
投稿者: kkkc

お世話になります。
 
業者が作ったシステムからcsvファイルが出力されます。
出力されるファイル名には日時が含まれるため、
毎回ファイル名が変更になります。
 
そこで、csvファイルとはリンク接続するのではなく、
Open valFile For Input As #1
というように、csvファイルを1行ずつ読み込んで、
Split関数で「,」で項目を区切って処理しています。
 
今までこれでうまくいっていたのですが、
ある項目の中に「,」が含まれるようになって、
列ずれを発生してしまいました。
 
csvファイルを見ると、
"未 10,000"
などのようになっていました。
 
文字列扱いのものは"で囲まれているようです。
 
今までのようにSplit関数で「,」で項目を区切る方法ではダメになりました。
どういった方法で列ずれを起こさないようにすればいいでしょうか?
 

回答
投稿日時: 26/04/12 21:12:00
投稿者: sk

引用:
業者が作ったシステムからcsvファイルが出力されます。

引用:
csvファイルを見ると、
"未 10,000"
などのようになっていました。

引用:
どういった方法で列ずれを起こさないようにすればいいでしょうか?

そのシステムから出力される CSV ファイルのフォーマット
(列の数、順番、各列の名前とデータ型、列の区切り記号、
テキスト型の列に付加される囲み記号など)、及びインポート先となる
テーブルが常に一定であるならば、
 
1. あらかじめテキストインポートウィザードを実行して
   そのファイル/テーブル専用のインポート定義を作成しておく。
 
2. DoCmd オブジェクトの TransferText メソッドを用いて
   その CSV ファイルをインポート先のテーブルにインポートする。
   その際、TransferText メソッドの第 2 引数 SpecificationName に
   上記 1 で作成したインポート定義の名前を渡すようにする。
 
というのが最も確実でしょう。
 
引用:
出力されるファイル名には日時が含まれるため、
毎回ファイル名が変更になります。

1. ファイルダイアログを表示させ、インポート元となる
    CSV ファイルをユーザーが任意に選択できるようにする。
 
2. 上記 1 で選択された CSV ファイルの絶対パスを
   String 型の変数に代入する。
 
3. 上記 2 で取得された絶対パス( String 型の変数の値)を
   TransferText メソッド の第 4 引数 FileName に渡す。
 
以上のような流れでよろしいかと。

投稿日時: 26/04/23 18:37:11
投稿者: kkkc

お世話になります。
 
教えていただいた方法で解決しました。
ありがとうございました。