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

例えば
ファイル1
フィールド A B C D E
データ   1 2 3 4 5

ファイル2
フィールド A C D E
データ   6 7 8 9

のように、フィールドの項目数が異なるデータをインポートする場合は
どのようにすればいいのでしょうか?
アンケートのメールを処理するのですが、応えられていない項目についてはデータが無いもので・・・
ちなみにインポート処理さえ出来るのであれば、エクセルでもかまいません。

すみませんがよろしくお願いします。

A 回答 (3件)

質問に明確に書くこと。


テキストデータからか
エクセルデータからか
ーー
エクセルでデータができている場合の話をします。
第1ブック inp1.xls
ABCDE
12345
1122334455
とあるとします。
第1行目は、項目見出しにすること。
インポートすると
IDABCDE
112345
21122334455
となりました。
ーー
第2ブック inp2.xls
ABCDEFG
678910
空いているデータの無い列も項目見出しは、inp1.xlsの第1行目にそろえること。
IDABCDEFG
1678910
とインポートされました。
ーー
これでアクセスのテーブルはできました。後は必要あれば、テーブルデータの合体を行ってください。
判らないときは再質問か補足。

この回答への補足

書き込みをいただいてありがとうございます。

説明不足で申し訳ありませんでした。
下のご回答にも書いたのですが、メールをテキストで保存して
エクセルにインポート、不要なヘッダーを削除して加工後
アクセスにインポートしようとしていました。

imogasiさんのご回答によれば、
fly moonさんと同じように各ファイルごとに異なるテーブルを作って、それを合体するということですよね?
やはりそれしか出来ないですよね?
仕事が終わりましたら試してみてまた報告させていただきます。
ありがとうございました。

補足日時:2007/07/20 22:58
    • good
    • 0

<D:\Temp\question001.txt>


A,B,C,D,E
1,2,3,4,5

<D:\Temp\question002.txt>
A,C,D,E
2,4,5,6

<questionnare>
A___B____C____D____E
1___2____3_____4_____5
2___0____4_____5_____6

さて、上記の2つのファイルをメモ帳で編集して用意。
フォームからインポートしてみました。
<questionnare>が、作成されたテーブルです。

以下は、インポートのために書いたコードです。

INSERT INTO questionnaire (A,B,C,D,E) VALUES (1,2,3,4,5);
INSERT INTO questionnaire (A,C,D,E) VALUES (2,,4,5,6);

このような SQL文を作成して実行しているだけです。
まあ、簡単と言えば簡単なコードです。
まあ、初心者の方には難しいと言えば難しいコードです。

Private Sub コマンド0_Click()
  Dim StopNow  As Boolean
  Dim H     As Integer
  Dim I     As Integer
  Dim J     As Integer
  Dim K     As Integer
  Dim N     As Integer
  Dim M     As Integer
  Dim strFiles() As String
  Dim strDatas() As String
  Dim strFName() As String
  Dim strField() As String
  Dim strFLists As String
  Dim strSQL   As String
  
  ' ------------------
  ' ファイル一覧取得
  ' ------------------
  strFiles() = GetFileList("D:\Temp", "question*.txt")
  N = UBound(strFiles())
  For I = 0 To N
    ' ------------------------
    ' ファイルデータ読み込み
    ' ------------------------
    strDatas() = FileReadArray("D:\Temp\" & strFiles(I))
    ' -----------------
    ' Field list 作成
    ' -----------------
    strFName() = Split(strDatas(0), ",")
    K = UBound(strFName)
    strFLists = strFName(0)
    For H = 1 To K
      strFLists = strFLists & "," & strFName(H)
    Next H
    ' -------------
    ' Insert 実行
    ' -------------
    M = UBound(strDatas())
    For J = 1 To M
      If Len(strDatas(J)) > 2 Then
        strField() = Split(strDatas(J), ",")
        strSQL = "INSERT INTO questionnaire (" & strFLists & ") VALUES (" & strField(0)
        For H = 1 To K
          strSQL = strSQL & "," & strField(H)
        Next H
        strSQL = strSQL & ")"
        StopNow = Not CnnExecute(strSQL)
        If StopNow Then
          Exit For
        End If
      End If
    Next J
  Next I
End Sub

GetFileList()、FileReadArray()、 CnnExecute()は、自作の関数です。
このような VBA に挑戦されるのであれば、3つの関数は公開します。
    • good
    • 0
この回答へのお礼

ありがとうございます。。。
ですが僕にはレベル高すぎてちょっと無理っぽいです(^^;)
詳しい回答ありがとうございました。

お礼日時:2007/07/20 22:57

こんにちは。


CSVとかじゃなくてメールを直接インポートするんですか?ACCESSでそんなことが出来るのは知りませんでしたが、インポート先を新規テーブルにしてそれを追加クエリでテーブルに追加する方法ではダメですか?
    • good
    • 0
この回答へのお礼

ありがとうございます!
今仕事中なので、終わったら試してみますね。

説明不足で申し訳なかったのですが、メールをテキスト保存して
エクセルで開いて不要なヘッダーなどを削除、加工してアクセスにインポートするやりかたでやっているんです。すみませんでした。

お礼日時:2007/07/20 15:17

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

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


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