プロが教える店舗&オフィスのセキュリティ対策術

ACCESS VBAにてCSVファイルを並び順を変えずにインポートするにはどうしたらよいでしょうか?。
ACCESSはリレーショナルデータベースなので、インポート順が保障されていませんが、私はそれでは困るのです。

困ったプログラムはこんな感じです。

DoCmd.TransferText acImportDelim, , "付け足しCSV", msg, True

Strsokuteibi = "" & rs.Fields(0).Name & ""
Strsentougyou = rs.Fields(0).Name
SQL = "INSERT INTO CSVまとめ ( 計測日, グループ, サイト名, サイトURL, 検索語, Yahoo, [Yahoo URL], Google, [Google URL] )" & _
"SELECT """ & Strsokuteibi & """ AS 日付, 付け足しCSV.[" & Strsentougyou & "], " & _
"付け足しCSV.F2, 付け足しCSV.F3, 付け足しCSV.F4, 付け足しCSV.F5, 付け足しCSV.F6, 付け足しCSV.F7, 付け足しCSV.F8 " & _
"FROM 付け足しCSV;"
Set Qdf = CurrentDb.CreateQueryDef("CSV追加Q", SQL)
Set Qdf = Nothing

DoCmd.OpenQuery "CSV追加Q"
DoCmd.Close acQuery, "CSV追加Q"

上記のような感じで。
ええと。CSVファイルの先頭行というかフィールド名はがっつり使います。
なので、オートナンバー行を作り、そこへインポートするにも、ええと、CSVファイルのフィールド名は変わっていくので、適合しないのですね。さまざまなフィールド名があるのです。
柔軟にしないと?。
はたして、どうしたらよいのでしょうか?。
馬鹿な私にもわかるようにわかりやすくお願いします。
また、土日は環境が無いので、あまりお返事できません。
ごめんなさい。

質問者からの補足コメント

  • うーん・・・

    CSVファイルは大量に有ります。
    そのフィールド名はファイル事に違います。
    オートナンバーをつけたテーブルを用意しようにも、フィールド名がそれぞれ違うので入りません。
    そしていちCSVファイルだけでも、インポートすれば並び順がバラバラです。

    No.3の回答に寄せられた補足コメントです。 補足日時:2018/05/25 20:44

A 回答 (5件)

このような特殊な案件では、VBAでしこしこ作るよりありませんね。


CSVの1行目を読み込んで、テーブルをクリエイトする。
このとき、オートナンバーも付ける。
2行目以降を1行ずつ読み込んでテーブルに書き込む。
LineInputで1行読んでSplit関数で配列にし、
その配列(添え字)をテーブルのFields(添え字)に書き込む。
この仕掛けを1つ作れば、他のCSVにも適用できるかと。
    • good
    • 1
この回答へのお礼

ありがとう

わぁ。なんだかそれは良さそうです。
しかし、私はすごく馬鹿なのでぜひともサンプルコードを書いていただければと思います。
今は環境がないのでサンプルコードが有るにせよ無いにせよお返事は月曜か火曜になります。
ありがとうございました。

お礼日時:2018/05/26 00:35

アクセスにインポートしてどの様に使うつもりですか?


フィールド名がバラバラならプログラムも何も作れませんし。
どうみても、エクセルを使うべき案件の様にしか思えません。
    • good
    • 0
この回答へのお礼

うーん・・・

よろずやkinchan様、夜分遅くのご回答ありがとうございます。
書いて有るSQLステートメントを読むと分かる様にフィールド名を取得してこれをデータとして使っています。
この試みはお解りの様に成功しています。
アクセスDBにするのはお客様のご要望ですし。
Excelは考えられません。
読めない様な汚いコードでお目汚しすみません。

お礼日時:2018/05/25 23:53

①CREATEしたばかりのテーブル


②全件削除後に最適化したテーブル
の場合は、入力順に表示された記憶がありますが、最近のバージョンは知りません。
この回答への補足あり
    • good
    • 0
この回答へのお礼

うーん・・・

よろずやkinchan様お返事ありがとうございます。
CREATEと言うかインポートすればテーブルできるので、CREATEじゃないのですね。
インポートしたテーブルが既に順番がぐちゃぐちゃなのです。
ええと、言葉足らずですみません。
ちょっと補足します。

お礼日時:2018/05/25 20:39

No.2です。



複数のCSVファイルをって訳じゃないようですね。
検索してみた中には

>mdbをAccess2010で使用すると

みたいな記事もあります。
もしmdbで作成されているなら新しいaccdbに切り替えた方が安定するのかも知れない。
ただ今現在accdbであるのなら・・・Accessは良くわかりません。
てっきり複数のCSVファイルを順次読み込む際の順番かと思ってましたし。
    • good
    • 0
この回答へのお礼

どう思う?

めぐみん様、お忙しいところいろいろ考えてくれてありがとうm(_ _)m。
アクセスだけでなく、リレーショナルデータベースではオラクルでも勝手に順番入れ替わります。
安定も何もDBならばむつかしいかと………。
一CSVファイル内です。
よろしくお願いします。

お礼日時:2018/05/25 18:43

ハッキリ言います。

Accessはよく知りません。

>CSVファイルを並び順を変えずに

そもそもどんな順番に並んでいるのが正解と思ってますか?
名前順とか何かあるのでしょうけど、最初にそのリストを作成し順次吐き出すループを作るというのではダメなのでしょうか?

Excelなら.NET FrameworkのSystem.Collections.SortedListにファイル名を放り込んでいけば、勝手に昇順に並び変わります。
あとは頭からIndexを使って吐き出せば、一応昇順に並んだファイルの処理が可能と言えると思います。
あ”、でも単にファイル名だけならSystem.Collections.ArrayListでファイル名を追加していって終わったらSortメソッドで並び換えると
言うのもありかな。
    • good
    • 0
この回答へのお礼

めぐみん様お返事ありがとう。
CSVはCSVの最初からの順番どおりに入れたいです。
何かでソートとかしたくないですし、主キーとなるようなものもありません。
CSVのファイルそのままを最初から順番どおりに入れたいです。
しかし、普通にインポートすると、ACCESSの自由に順番が入れ替わってしまうのです。
困りました。
ちなみに、マクロではなく、VBAでお願いします、

お礼日時:2018/05/25 17:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A