- 締切済み
ACCESS、フィールドが異なるデータのインポート
例えば ファイル1 フィールド A B C D E データ 1 2 3 4 5 ファイル2 フィールド A C D E データ 6 7 8 9 のように、フィールドの項目数が異なるデータをインポートする場合は どのようにすればいいのでしょうか? アンケートのメールを処理するのですが、応えられていない項目についてはデータが無いもので・・・ ちなみにインポート処理さえ出来るのであれば、エクセルでもかまいません。 すみませんがよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
質問に明確に書くこと。 テキストデータからか エクセルデータからか ーー エクセルでデータができている場合の話をします。 第1ブック inp1.xls A B C D E 1 2 3 4 5 11 22 33 44 55 とあるとします。 第1行目は、項目見出しにすること。 インポートすると ID A B C D E 1 1 2 3 4 5 2 11 22 33 44 55 となりました。 ーー 第2ブック inp2.xls A B C D E F G 6 7 8 9 10 空いているデータの無い列も項目見出しは、inp1.xlsの第1行目にそろえること。 ID A B C D E F G 1 6 7 8 9 10 とインポートされました。 ーー これでアクセスのテーブルはできました。後は必要あれば、テーブルデータの合体を行ってください。 判らないときは再質問か補足。
<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つの関数は公開します。
お礼
ありがとうございます。。。 ですが僕にはレベル高すぎてちょっと無理っぽいです(^^;) 詳しい回答ありがとうございました。
- fly_moon
- ベストアンサー率20% (213/1046)
こんにちは。 CSVとかじゃなくてメールを直接インポートするんですか?ACCESSでそんなことが出来るのは知りませんでしたが、インポート先を新規テーブルにしてそれを追加クエリでテーブルに追加する方法ではダメですか?
お礼
ありがとうございます! 今仕事中なので、終わったら試してみますね。 説明不足で申し訳なかったのですが、メールをテキスト保存して エクセルで開いて不要なヘッダーなどを削除、加工してアクセスにインポートするやりかたでやっているんです。すみませんでした。
補足
書き込みをいただいてありがとうございます。 説明不足で申し訳ありませんでした。 下のご回答にも書いたのですが、メールをテキストで保存して エクセルにインポート、不要なヘッダーを削除して加工後 アクセスにインポートしようとしていました。 imogasiさんのご回答によれば、 fly moonさんと同じように各ファイルごとに異なるテーブルを作って、それを合体するということですよね? やはりそれしか出来ないですよね? 仕事が終わりましたら試してみてまた報告させていただきます。 ありがとうございました。