ExcelのデータをAccessのテーブルへインポートできない

このQ&Aのポイント
  • ExcelのデータをAccessのテーブルにインポートする方法を模索しているが、うまくいかない。
  • 既存のExcelシートの構成がデータベース形式ではなく、試行錯誤している。
  • Accessの事前準備として、フィールド名だけ指定し、空のテーブルを作成した。
回答を見る
  • ベストアンサー

ExcelのデータをAccessのテーブルへインポートできない

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 ----------------------------------------------------

noname#72976
noname#72976

質問者が選んだベストアンサー

  • ベストアンサー
  • gatyan
  • ベストアンサー率41% (160/385)
回答No.1

rsに対して addnew とか update してますか?

noname#72976
質問者

お礼

ご回答ありがとうございました。 アドバイスのように下記内容にしましたら一応「読み込む」ことはできました。 「少数を丸めたために、データが切り捨てられました.」という実行時エラーが出てきましたので、明日じっくり再検討します。 おかげさまで少し前に進むことができました。 本当にありがとうございました。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

noname#72976
質問者

補足

>rsに対して addnew とか update してますか? あ、すみません。していませんでした。 どこに記述すればよいですか・・。

関連するQ&A

  • Excelから一つのテーブルにインポートしたい

    こんにちは。 ExcelではVBAが使えるレベルですが、Access初心者です。 エクセルのワークブックにデータがA~N列までデータが入っています。 1行目はタイトル(フィールド名)で2行目以下がデータ(レコード)になります。 ワークブックの中のシート数はさまざまです。 1行目のタイトル(フィールド名)はあってもデータがないものもありますし、 2行目以下のデータ(レコード)数もさまざまです。 ワークブック(とその中のシート)が多いので VBAを使ってAccessに取り込みたいと思っています。 いろいろネットで検索して以下のVBAまでたどりついたのですが、 それぞれ「ワークブック名_シート名」というテーブルに取り込まれます。 これを例えば「総合」というようなテーブル一つに取り込むにはどうしたらいいでしょうか? 週末をつぶして試行錯誤しましたが、どうしても解決しないのでアドバイスいただけるとうれしいです。 Sub ImportFromExcel() Dim tgtXLname As String Dim tgtXLpath As String Dim newTBLname As String Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim sCnt As Integer Dim n As Integer Application.Echo False TargetFolder = "C:\work" tgtXLname = Dir(TargetFolder & "\*.xls") Do While tgtXLname <> ""   tgtXLpath = TargetFolder(a) & "\" & tgtXLname   Set xlApp = GetObject(, "Excel.Application")   xlApp.Application.Visible = True   xlApp.Workbooks.Open tgtXLpath   Set xlBook = xlApp.ActiveWorkbook   sCnt = xlBook.Worksheets.Count   For n = 1 To sCnt     Set xlSheet = xlBook.Worksheets(n)     newTBLname = Left(tgtXLname, Len(tgtXLname) - 4) & "_" & xlSheet.Name     DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, newTBLname, tgtXLpath, True, xlSheet.Name & "!" & "A:N"     Set xlSheet = Nothing   Next   xlBook.Close SaveChanges:=False   Set xlBook = Nothing   tgtXLname = Dir() Loop xlApp.Application.Quit Set xlApp = Nothing Application.Echo True MsgBox "インポート終了" End Sub

  • Access-VBAでフィールドまたはレコード指定

    お世話になります。 Accessから、フィールドまたは、レコードを指定して、 Excelの指定したセルに出力することはできますか? Sub EX1() On Error Resume Next Dim db As DAO.Database Dim rs As DAO.Recordset Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set db = CurrentDb '出力元のテーブルまたはクエリ Set rs = db.OpenRecordset("EQ") Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) ' Excel のセルに値を代入 xlSheet.Cells(1, 1).CopyFromRecordset rs ' Worksheet を名前をつけて保存 xlSheet.SaveAs "D:\一時保存\abc.xls" xlApp.Quit Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing End Sub ' Excel のセルに値を代入 xlSheet.Cells(1, 1).CopyFromRecordset rs の部分でできそうなのですが。 クエリにある1つ目のレコード、またはフィールドを、Excelの(1,1)。 2つ目を、(3,1)。 3つ目を、(5,1)としたいのです。 よろしくお願いします。

  • Access からオブジェクトとして開いたExcelのプロセスが終了しない

    AccessからExcelのデータを読み込んだ後、Accessを終了させてもプロセスが終了しません。 bookはclose、applicationはquit、オブジェクト変数はnothingというExcelの終了記述をしているので他の問題なのかと思いいろいろ調べて試しましたが解決できません。 Excelのファイル名とシート名はAccessのフォームに貼り付けたテキストボックスの値を取得させていますが下記コードでは省略しています。環境はWin2000Server、Access2000です。 どなたかお気づきの点があればどうぞご教授お願いします。 --------------------------------- Public Sub test() Dim filename As String Dim sheetname As String filename = "c:\パス\ファイル名.xls" sheetname = "シート名" 'AccessからExcelをオブジェクトとして開く Dim xlApp As Object Dim xlBook As Object Dim xlSheet As Object Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(filename) Set xlSheet = xlBook.Worksheets(sheetname) 'Excelの行取得用変数設定 Dim xlrow As Integer 'データ開始行 xlrow = 5 Dim xlrowEnd As Integer 'データ最終行(最終行は合計値が入っているので-1とする) xlrowEnd = (Range("A5").End(xlDown).Row) - 1 'Excelデータの取り込み Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "a", cn, adOpenKeyset, adLockOptimistic cn.Execute "delete * from a" xlrow = 5 'Excelデータの開始行番号 Do While xlrow <= xlrowEnd rs.AddNew rs!フィールド1 = xlSheet.Cells(xlrow, 1).Value rs!フィールド2 = xlSheet.Cells(xlrow, 2).Value rs.Update rs.MoveNext xlrow = xlrow + 1 Loop 'Excelの終了記述 xlBook.Close xlApp.Quit Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing 'ADO接続終了記述 rs.Close Set rs = Nothing cn.Close Set cn = Nothing

  • ADOを使用してExcelデータをAccess取込む際のExcelシートの選択について

    表記のとおりADOを使用してExcelデータをAccess取込むのですが、Sheet1のデータを読込んだ後、引続きSheet2のデータを読込む様にVBAコードを書いたつもりですが、Sheet1をアクティブにした状態でExcelデータを保存していたらSheet1のデータを重複して取込み、Sheet2をアクティブにした状態でExcelデータを保存していたらSheet2のデータを重複して取込んでしまいます。どこをどうすればSheet1のデータを読込んだ後、引続きSheet2のデータを読込む様に出来るのでしょうか? ====== VBAコードの抜粋 =========   Dim xlApp As Object       ' Excelのアプリケーション定義   Dim xlBook As Object      ' ExcelのワークブックのフォルダPath+ファイル名を定義   Dim xlSheet As Object      ' Excelの参照するシート名を定義   Dim SheetName As String     ' シート名を代入   Dim SheetCount As Byte     ' シートの選択 For SheetCount = 1 To 2       ' 1回目のループでSheet1から2回目のループでSheet2からデータを取り込む If SheetCount = 1 Then SheetName = "Sheet1" If SheetCount = 2 Then SheetName = "Sheet2" Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open("ファイルPath+ファイル名") Set xlSheet = xlBook.Worksheets(SheetName) Set Wcell = xlSheet.Range("A1") Set Cn = CurrentProject.Connection Rs.Open "取込みテーブル", Cn, adOpenKeyset, adLockOptimistic xlApp.Application.Visible = True   データを取込むコードあり(省略) xlBook.Close xlApp.Visible = False Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing Next SheetCount

  • ACCESSからExcel操作

    アクセスのクエリーにて作成したデーターをエクセルにインポートをしてその後直接アクセス上から条件を入れてオートフィルターを掛け、条件にあったデーターのみセルに色をつけたいのですがオートフィルターで絞った後の処理がうまく出来ません。 Dim DB As DAO.Database Dim xlApp As Object Dim xlbook As Object Dim xlsheet As Object Dim strXlsS As String Dim strExSheet As String   インポート処理はOK   ここからアクセス上で操作をしたい。 strXlsS = "ファイル名フルパス" strExSheet = "シート名" Set xlApp = CreateObject("Excel.Application") xlApp.Visible = True 'エクセル可視、不可視選択 Set xlbook = xlApp.workbooks.Open(strXlsS) Set xlsheet = xlbook.worksheets(strExSheet) xlsheet.Range("A1").Select xlsheet.Range("A1").AutoFilter xlsheet.Range("A1").AutoFilter Field:=8,Criteria1:="条件" ここまでは出来ました。 この後エクセル上では Range("A1:J37").Select と言う感じで選択するのですが、ここをどの様にやれば良いか教えて欲しいのです。 色々と検索をして SpecialCells を使う事までは解かり xlsheet.AutoFilter Range.Columns(1).SpecialCells(xlCellTypeVisible) とやってみたのですが 実行時エラー'424': オブジェクトが必要です。 とエラーになってしまいます。 参考先でもなんでも良いので宜しく御願いします。

  • VB6.0上でExcelオブジェクトを生成

    VB6.0上でExcelオブジェクトの生成についてです。 その1 Dim xlApp As New Excel.Application Dim xlBook As New Excel.Workbook Dim xlSheet As New Excel.Worksheet Set xlApp = New Excel.Application Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) と その2 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) と、どちらが良いのでしょうか? 開発環境は  Windows2000  VB 6.0  Excel 2003 です。

  • VBからエクセルを起動。そのあとエクセルを終了

    教えてください。 VBからエクセルを起動します。 そのあと、エクセルのシートの上にデータを貼り付けます。そして、エクセルを終了します。 しかし、エクセルが終了しません。 タスクバー上のエクセルをクリックすると終了します。 どうして、このような現象が起こるのかわかりません。 教えてください。 下記に同様のサンプルを書きました 誤記入があるかも知れませんが このような感じのプログラムです。 以上、よろしくお願いします。 public sub test Dim XApp as Excel.Application Dim nfilename as string Dim xlBook As Object Dim xlSheet As Object ' エクセルを起動 Set xlApp = New Excel.Application nfilename ="AAAA.xls" ' 指定されたファイルを開く Call xlApp.Workbooks.Open(nfilename) Set xlBook = xlApp.ActiveWorkbook Set xlSheet = xlBook.Worksheets(1) 'フォームを貼り付ける xlSheet.Range("a1").PasteSpecial      'ファイル名の作成 Filename="BBBB.xls" '保存 ChDir "C:\" xlBook.SaveAs Filename:=Filename,FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False Set xlSheet = Nothing xlBook.Close True Set xlBook = Nothing xlApp.Quit Set xlApp = Nothing End sub

  • Excel出力後のExcelの起動について

    Vb側からデータをExcelに出力し、その画面を表示させたまま 出力したExcelを確認しようと思ったところ、Excelは起動するものの シートが表示されない現象が起こりました。 出力後のExcelの終了(解放?)のロジックは下記の通りです。 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = New Excel.Application Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets.Add … … Sheetへの出力処理 … … Set xlApp = Nothing Set xlBook = Nothing Set xlSheet = Nothing この現象の回避方法がありましたらご教授ください。 Windows2000 Vb6.0 SP5 Excel2000

  • エクセルを表示できない

    プログラム初心者です。 Private Sub Command3_Click() On Error Resume Next Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet With xlApp.Application Set xlApp = GetObject("F:\vb6.0\book1.xls") Set xlBook = xlApp.Workbooks.Open("Book1") Set xlSheet = xlBook.Worksheets(1) xlApp.Application.Visible = True End Sub と入力したのですが、実行してボタンをクリックしてもエクセルの表が表示されません。なぜでしょうか?

  • EXCEL警告「置換対象のデータが見つかりません」を出ないようにしたい

    VB6からEXCELファイルを操作しています。 その中で、置換をやっているのですが、データによっては置換するデータが無い場合があります。 無い場合に、「置換対象のデータが見つかりません。~」というダイヤログボックスが出てしまうのですが、これを出さない方法が有りますでしょうか。 出さない方法がないとすれば、置換対象データがあるかどうかのチェックを先にすればいいのでしょうけど、コードが倍増しそうなものですから。 参考までにコードを付記します。 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(filename) Set xlSheet = xlBook.Worksheets("Sheet1") xlSheet.Columns("A:A").Replace What:="1", Replacement:="男" xlSheet.Columns("A:A").Replace What:="2", Replacement:="女" xlSheet.Columns("A:A").Replace What:="9", Replacement:="不明"