dポイントプレゼントキャンペーン実施中!

教えてください。

アクセスでtxt形式のデータを取り込む際に、一列追加した状態のものをテーブルへ
取り込みたいです。追加したい項目は取込した日付です。

どのような方法があるか、アドバイスをお願いします。

A 回答 (3件)

AAA1,BBB1


AAA2,BBB2
AAA3,BBB3

例えば、このようなデータを添付図のようにテーブルに追加するには、一般的には VBA コードをシコシコと書きます。

理由1、重複インポートを回避するため。
理由2、各列のデータを必要に応じてチェックするため。
理由3、列を省いたり、追加したりするため。
理由4、列の順序を変えることもあるため。
理由5、列のデータを変換・置換することもあるため。

挙げれば切りがありませんが、このような理由で一般的には VBA コードをシコシコと書きます。

【私が書いたVBAコードの概要】

1、インポートSQL文の雛形を準備。

strSQL = "INSERT INTO Test (Field1, Field2, Field3) " & _
    "VALUES ('2014/10/27', 'XXXXX', 'YYYYY')"

2、テキストを配列に読み込む

strReadCols() = FileReadArray(strFileName)

ここでは、File Scripting Runtime を利用した関数を利用。

3、インポート文を作成し実行。

strImport = Replace(strSQL, "XXXXX", Trim(CutStr(strReadCols(I), ",", 1)))
strImport = Replace(strImport, "YYYYY", Trim(CutStr(strReadCols(I), ",", 2)))
DoCmd.RunSQL strImport

【私が書いたVBAコードの全体像】

DIM文とREM文とは省いた全体の行数は21行です。

  ' ---------------------------------
  ' 読み込むファイルのチェック
  ' ---------------------------------
  strFileName = "F:\Temp\Test.txt"
  isFound = FileExists(strFileName)
  If isFound Then
    ' -------------------------
    ' インポートSQL文を準備
    ' -------------------------
    strSQL = "INSERT INTO Test (Field1, Field2, Field3) " & _
         "VALUES ('2014/10/27', 'XXXXX', 'YYYYY')"
    ' -------------------------
    ' Access の警告をなしに
    ' -------------------------
    DoCmd.SetWarnings False
    ' -------------------------------
    ' テキストを配列に読み込む
    ' -------------------------------
    strReadCols() = FileReadArray(strFileName)
    N = UBound(strReadCols())
    For I = 0 To N
      ・・・・・
    Next I
    ' ----------------
    '  終了処理
    ' ----------------
    Message (N + 1) & "行を追加しました!"
    ' -------------------------
    ' Access の警告を復活
    ' -------------------------
    DoCmd.SetWarnings True
  Else
    Warning "'F:\Temp\Text.txt'は、見つかりません!"
  End If

AccessのVBA、あるいはプログラミングそのものに従事したのは1996年まで。ですから、FileExists()、FileReadArray()、Warning()などの関数を書いてテストし、それからインポートコードを書いてバグを取るのにアタフタ。結局、90分を費やしてしましました。まあ、ここまで提示すれば質問者は苦もなく再現できるでしょう。頑張られてください。
「アクセス 日付を項目追加して取込」の回答画像1
    • good
    • 1
この回答へのお礼

完璧な回答をありがとうございました。非常に助かりました。お手間おかけいたしました。

お礼日時:2014/10/29 19:04

あらかじめテーブルに日付のフィールドを作成しておき


その「既定値」 を 「=Date()」 としておくのが簡単かと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。参考にさせて頂きました。

お礼日時:2014/10/29 19:05

補足:VBAコードを書きたくないのであれば・・・。



1、テキストファイルを編集する。
2、インポート後に追加する。

などかと。

strImport = Replace(strSQL, "XXXXX", Trim(CutStr(strReadCols(I), ",", 1)))
strImport = Replace(strImport, "YYYYY", Trim(CutStr(strReadCols(I), ",", 2)))
DoCmd.RunSQL strImport

の部分を

strSQL = Replace(strSQL, "XXXXX", Trim(CutStr(strReadCols(I), ",", 1)))
strSQL = Replace(strSQL, "YYYYY", Trim(CutStr(strReadCols(I), ",", 2)))
DoCmd.RunSQL strImport

と書いて雛形から"XXXXX"と"YYYYY"を消したために全てが1行目をインポートする羽目に。このバグ取りに45分。実に90分の半分を浪費。まあ、私みたい者が下手にVBAコードを書くとこういうチョンボも。まあ、一度、こういうインポートコードを手中にすると、Access のインポート機能を利用することはないでしょう。が、この初手の壁を越えたくなければ冒頭のような別手段もありです。
    • good
    • 0
この回答へのお礼

補足説明頂き、ありがとうございました。参考にさせて頂きました。

お礼日時:2014/10/29 19:05

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