
Access VBA超初心者です。
Excelのデータの任意の列のデータをAccessの既存テーブルの任意のフィールドへインポートしたいのですが
既存Excelシートの構成は例のようにデータベース形式でないため試行錯誤しています。
Excelシートの構成は1~2行は空行、3行目と4行目にフィールド名がはいっており
セルの結合は使われていません。
データは5行目から開始されています。
<例>
列番号 |A列|B列|C列|D列|E列|
3行目 | 季節 | |
4行目 | 春 |夏 |秋 |冬 | |
5行目 |aa |bb |100 |200 |300 |
まず、以下の手順1と手順2を考えました。
----------------------------------------------------
◇目的
上記<例>のE列のデータを既存Accessテーブルにインポートしたい。
◇Accessの事前準備
フィールド名だけ指定し、レコードは空の状態の[a]テーブルを作成しました。
◆手順1
AccessからExcelをオブジェクトとして開き、[a]テーブルへ列単位でコピーする()
◆手順2
[a]テーブルから条件にあうレコードを別テーブル[b]のフィールドへインポートする
(SQL文)
----------------------------------------------------
まず、手順1のコードをネット検索を参考にして以下のようにしました。
最後に「入力しました」とメッセージが表示されるもののaテーブルにデータがインポートされません。
特にエラーメッセージも表示されません。
どなたか親切にアドバイス頂ける方がいらっしゃいましたらどうぞお願いします。m(__)m
----------------------------------------------------
Public Sub エクセルインポート()
Dim xlApp As Object, xlBook As Object, xlSheet As Object, Wcell As Object
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("¥Excelファイル保存場所パス\Excelファイル.xls")
Set xlSheet = xlBook.Worksheets("Excelシート名")
Set Wcell = xlSheet.Range("a1")
Dim intNo As Integer
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Set cn = CurrentProject.Connection
rs.Open "a", cn, adOpenKeyset, adLockOptimistic
xlApp.Application.Visible = True
intNo = 5
Do Until rs.EOF
rs!フィールド名1 = xlApp.Application.Cells(intNo, 1).Value
rs!フィールド名2 = xlApp.Application.Cells(intNo, 2).Value
rs!フィールド名3 = xlApp.Application.Cells(intNo, 3).Value
~
rs!フィールド名21 = xlApp.Application.Cells(intNo, 21).Value
Loop
xlBook.Close
xlApp.Visible = False
Set xlBook = Nothing
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
MsgBox "入力しました"
End Sub
----------------------------------------------------
No.1ベストアンサー
- 回答日時:
rsに対して addnew とか update してますか?
この回答への補足
>rsに対して addnew とか update してますか?
あ、すみません。していませんでした。
どこに記述すればよいですか・・。
ご回答ありがとうございました。
アドバイスのように下記内容にしましたら一応「読み込む」ことはできました。
「少数を丸めたために、データが切り捨てられました.」という実行時エラーが出てきましたので、明日じっくり再検討します。
おかげさまで少し前に進むことができました。
本当にありがとうございました。m(__)m
その後の経過も明日以降またご報告させて頂きます。
-------------------
Dim intNo As Integer
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Set cn = CurrentProject.Connection
rs.Open "a", cn, adOpenKeyset, adLockOptimistic
rs.AddNew
xlApp.Application.Visible = False
intNo = 5 'Excelデータの取得開始行番号
Do Until rs.EOF
rs.MoveFirst
rrs!フィールド名1 = xlApp.Application.Cells(intNo, 1).Value
rs!フィールド名2 = xlApp.Application.Cells(intNo, 2).Value
rs!フィールド名3 = xlApp.Application.Cells(intNo, 3).Value
~
rs!フィールド名21 = xlApp.Application.Cells(intNo, 21).Value
rs.Update
rs.MoveNext
intNo = intNo + 1
Loop
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS検索★ある文字を複数のフ...
-
INSERT INTO ステートメントに...
-
Accessでフィールドの結合
-
accessで重複を防ぎたい
-
ExcelのデータをコピーでACCESS...
-
Access:リンクテーブルマネー...
-
アクセス A列コピー B列貼り...
-
Accessで、固定アルファベット+...
-
Accessのフィールド数が255しか...
-
view作成時にデータ型を変更し...
-
ACCESSで400以上のフィールドが...
-
ACCESS2000「定義されているフ...
-
ExcelのデータをAccessのテーブ...
-
Access 昇順・降順で並び替え...
-
ExcelからAccessにデータを取り...
-
Access2000のフォームで
-
ACCESSでの改行コード
-
固有レコード識別子の選択とは??
-
Accessで別途保存の画像ファイ...
-
ACCESSでテーブルのチェックを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのフィールド数が255しか...
-
INSERT INTO ステートメントに...
-
Accessでテーブルの値をテキス...
-
ACCESSで400以上のフィールドが...
-
SQLServer2005のSQL文での別名...
-
アクセス エラーを数値「0」に...
-
accessのレポートで元になるテ...
-
アクセス メモ型 255文字...
-
【Access】フォームで自動計算...
-
Accessで、固定アルファベット+...
-
アクセス A列コピー B列貼り...
-
ACCESSでオートナンバーを任意...
-
ACCESSでの改行コード
-
ファイルメーカーでCountifの様...
-
主キーはオートナンバー型のID...
-
ACCESS VBAにてCSV...
-
accessで重複を防ぎたい
-
ACCESSで和暦を西暦に・・・
-
Access:リンクテーブルマネー...
-
ACCESSでテーブルのフィールド...
おすすめ情報