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

お世話になります。

あるCSVファイルをインポートしたいのですが、以下のようなフォーマットです。

XXXXXX
項目1  項目2  項目3 ・・・
 1    ああ   いい
 2    うう    ええ


一覧?外にあるXXXXXの部分があるので、普通にインポートできません。
もちろんXXXXXXの部分を削除した状態でインポートすればよいのですが、当該CSVファイルは変更したくありません。
※このインポート作業は日々行うことになりそうなので、都度、XXXXX部分を削除するのが面倒でもあります。

このようなフォーマットのものをインポートすることは可能なのでしょうか。
ご教授の程、宜しくお願い致します。

A 回答 (1件)

CSV ファイルを、ヘッダなしファイルとして解釈させます。


以降得られるフィールド名は、F1、F2、・・・
不要な XXXXXX 部分は、2番目のフィールド以降 Null で除外判別できます。
2行目の項目名部分の項目1は、
おそらく、以降のデータを解釈した際に数値と解釈されると思うので
(項目1 部分が数値として解釈されたのなら Null に置き換わります)
項目1,項目2,項目3

Null,項目2,項目3

解釈が違っても項目1の有効なデータ部分は数値の様なので・・・
そこで、IsNumeric(F1) AND F2 Is Not Null の条件を付加して
インポートしたいテーブルと項目を列挙し、
それに対応する F1、F2、・・・・を記述した SQL を実行させれば終わりです。
以下は、項目3 までの記述になりますが

Public Sub Samp1()
  Const CSQL As String = "" _
    & "INSERT INTO テーブル名(項目1,項目2,項目3) " _
    & "SELECT F1, F2, F3 FROM [{%1}] IN " _
    & "'{%2}'[text;FMT=Delimited;HDR=No;IMEX=1] " _
    & "WHERE IsNumeric(F1) AND F2 Is Not Null;"
  Const CPATH As String = "CSVファイルがあるフォルダへのフルパス"
  Const CNAME As String = "CSVファイル名"
  Dim sSql As String

  sSql = CSQL
  sSql = Replace(sSql, "{%1}", CNAME)
  sSql = Replace(sSql, "{%2}", CPATH)
  CurrentDb.Execute sSql
End Sub

※ CSV ファイルのパスが D:\tmp\Hoge\テスト.csv だったら
CPATH は、D:\tmp\Hoge
CNAME は、テスト.csv
    • good
    • 0

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

関連するカテゴリからQ&Aを探す