- 締切済み
ACCESS2000でExcelから特定フィールドをインポートしたい
ACCESS2000でExcelから特定のフィールドをインポートしたいのですが、 うまくいきません。 Excelはフィールド数が254フィールドもあり、 テーブルにインポートしたいフィールド数は30フィールドです。 Excelでは特定フィールドをインポートすることができないようなので、 一時テーブルに全てのフィールドをインポート後 必要なフィールドだけ取り出そうとやってみたのですが、 以下のコードを実行すると、13のフィールドが「解析不能なフィールド」と インポートエラーが出てしまいます。 DoCmd.TransferSpreadsheet acImport, 8, "TEMPテーブル", "c:\data.xls" また、Excelファイルをcsv形式に変換して、インポート定義を作る方法も やってみたのですが、インポート定義作成時に 「フィールド'ID'はインポートまたはエクスポートしようとしている テーブルまたクエリに存在しません」 というエラーが出てしまいます。 どうしたらインポートできるでしょうか。よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
CSVファイルの項目(フィールド)の1部をCSVファイルにするコーディングを作りました。あとMDBに読みこませるのは略しましたが、お望みなら別途。 DOS・BASIC的ステートメントを使っていますが よろしく。 (1)エクセルファイルが開いているとして 「ファイル」「名前を付けて保存」をクリック。 「ファイルの種類」はCSV 「ファイル名」は「13年家計簿.csv」 「保存」をクリック c:\My Documents\13年家計簿.csvが出来る。 (2)新規Book1を開きツール-マクロ-VBE そして挿入-標準モジュール 下記を貼り付ける。 (3)Sub test01() Open "c:\My Documents\13年家計簿.csv" For Input As #1 Open "c:\My Documents\13年家計簿p.csv" For Output As #2 a = Array(0, 1, 2, 3, 4, 6, 999, 0, 0, 0, 0, 0, 0, 0) While Not EOF(1) = -1 Line Input #1, r ' MsgBox r s = 1 k = 0 m = 1 t = "" p1: p = InStr(s, r, ",") If p = 0 Then p = Len(r) + 1 rp = Mid(r, s, p - s) ' MsgBox rp s = p + 1 pm = s k = k + 1 If a(m) = k Then t = t & rp & "," m = m + 1 End If If p = Len(r) + 1 Then GoTo p2 GoTo p1 p2: ' MsgBox t Print #2, Mid(t, 1, Len(t) - 1) Wend Close #1 Close #2 End Sub (4)実行する。 c:\My Documents\13年家計簿p.csvが出来る。 上例ではaのarrayに指定した、第1, 2, 3, 4, 6フィールドのみ拾い、他は捨てたCSVファイルが出来る。 aのarrayの中の数字で、残したいフィールドが左より 第何番目かをテーブル化してください。昇順のこと。 (5)解説 s---レコード内での毎回「,」を探し始める位置。第何文字目から文字検索をはじめるか。Instrの説明を本で見てください。 p---レコード内で「,」の見つかった位置。先頭から何文字目に見つかったか。 m---a配列の第何要素を見ているかのポインタ数字。 k---第何番めのフィールドかを表す数字。 r---読みこんだ1レコード(1行)をいれる文字列変数。 ・1フィールドづつきりだしa配列にある、番目のフィールドは拾い、無ければ捨てて、フィールド集合を文字列として再構成し、#2に書き出している。 10列100行程度のデータでテスト済み。
- yanmaa
- ベストアンサー率45% (207/457)
フィールド名に「ID」はまずいような気がします。別の名前に変えても同じでしょうか? 特にAccessの予約語が含まれるようなフィールド名もやめた方が良いと思います。
- MovingWalk
- ベストアンサー率43% (2233/5098)
これじゃ駄目なんでしょうか。 ・Excelのシートの1行目をフィールド名にする ・Accessで、ファイル→外部データの取り込み→テーブルのリンク で Excelのシートにリンク(アタッチ)する ・クエリーで必要なフィールドを選択する
お礼
お返事ありがとうございます。 確かに上記の方法ではうまくいきます。 でも、今回はツールとして作成しているので、 VBAで自動的にインポートしたいのです。 何かいい方法はないでしょうか?