• ベストアンサー

ACCESS テーブルに2行目から取り込む方法

Access2013で、 指定の場所に置いてあるCSVファイルに対して、 「リンクテーブルを作成してソースデータにリンクする」設定にてテーブルを作成し、 このCSVファイルが更新されても最新の状態にてレポートを出力できるようにしています。 しかしこのCSVデータが作成される仕様により、1行目に余計な文字列、2行目に項目名、3行目以降にデータが入っているため、毎回CSVデータの1行目を削除する手作業が発生しています。 2行目以降をリンクするようにするとか、テーブルの3行目以降を取り出すクエリとか方法はありませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

>2行目以降をリンクするようにするとか、 >テーブルの3行目以降を取り出すクエリとか方法はありませんでしょうか? D:\ナントカ\コントカ\オリジナル.csv に余計な一行があったとして下記のコードを標準モジュールに作成し Sub LineCut1() Dim fSo As Object Dim buf As Variant Dim f As Object Set fSo = CreateObject("Scripting.FileSystemObject") With fSo.GetFile("D:\ナントカ\コントカ\オリジナル.csv").OpenAsTextStream .SkipLine buf = .readall .Close End With Set f = fSo.OpenTextFile("D:\ナントカ\コントカ\オリジナル_改.csv", 2, True) f.Write buf f.Close End Sub 出来た"D:\ナントカ\コントカ\オリジナル_改.csv"をリンクテーブルとさせればよいのでは? オリジナル.csv が更新される都度実行する必要がありますが >2行目以降をリンクするようにするとか、 CSVのようなテキストファイルでは無いかと。 >テーブルの3行目以降を取り出すクエリとか方法はありませんでしょうか? 一旦取り込んでからだとデータ型の変更などが必要になりそうなので 厄介です。 オリジナル.csv の使われ方がイマイチ不明なのですが 上記のSub LineCut1() を、 Function LineCut1() に改名して autoexec マクロに プロシージャの実行に、LineCut1() としても良いかもですね。

その他の回答 (1)

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.1

>>2行目以降をリンクするようにするとか、テーブルの3行目以降を取り出すクエリとか方法はありませんでしょうか? Accessのことはほとんど忘れたので、何とも言えませんが、現在の取り込みのプログラム見ないと何とも言えません。 容易に考えるなら、ループ処理かけて取り込む。処理だったりするなら、1回目のループ飛ばせばいい。 とかなんですが、現状の構成が分からないとなんとも。 >>毎回CSVデータの1行目を削除する手作業が発生しています。 まぁ、でも、手作業が許されてるなら、わざわざ、今動いてるプログラムいじって、 「動かなくなる可能性」というリスクを背負う意味がない。 「CSVデータの一行目を削除する」という、バッチ処理でも、スクリプト作成して、実行するほうが、よっぽど楽かな。と思いますよ。

関連するQ&A

専門家に質問してみよう