前回の年越しの瞬間、何してた?

ACCESS2000でExcelから特定のフィールドをインポートしたいのですが、
うまくいきません。

Excelはフィールド数が254フィールドもあり、
テーブルにインポートしたいフィールド数は30フィールドです。

Excelでは特定フィールドをインポートすることができないようなので、
一時テーブルに全てのフィールドをインポート後
必要なフィールドだけ取り出そうとやってみたのですが、
以下のコードを実行すると、13のフィールドが「解析不能なフィールド」と
インポートエラーが出てしまいます。

DoCmd.TransferSpreadsheet acImport, 8, "TEMPテーブル", "c:\data.xls"

また、Excelファイルをcsv形式に変換して、インポート定義を作る方法も
やってみたのですが、インポート定義作成時に
「フィールド'ID'はインポートまたはエクスポートしようとしている
テーブルまたクエリに存在しません」
というエラーが出てしまいます。

どうしたらインポートできるでしょうか。よろしくお願いします。

A 回答 (3件)

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行程度のデータでテスト済み。
    • good
    • 0

フィールド名に「ID」はまずいような気がします。

別の名前に変えても同じでしょうか?
特にAccessの予約語が含まれるようなフィールド名もやめた方が良いと思います。
    • good
    • 0

これじゃ駄目なんでしょうか。


・Excelのシートの1行目をフィールド名にする
・Accessで、ファイル→外部データの取り込み→テーブルのリンク で
 Excelのシートにリンク(アタッチ)する
・クエリーで必要なフィールドを選択する
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

確かに上記の方法ではうまくいきます。
でも、今回はツールとして作成しているので、
VBAで自動的にインポートしたいのです。

何かいい方法はないでしょうか?

お礼日時:2002/11/22 12:24

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

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


おすすめ情報