• ベストアンサー

エクセルテーブルをアクセステーブル取込む

エクセルで作成したテーブルデータを取り込むときに余分に空白のレコードが取り込まれてしまうんですが原因が分かりません。 下記コードで処理してます。 Dim strac As String Dim strxls As String Dim strrange As String Dim strMsg As String strac = "T_障害票マスタ" 'Accessテーブルを指定します。 strxls = テキスト0 'エクセルファイルを指定します。 strrange = "T_障害票!" 'データ入力のシート名とセル範囲を指定します。 strMsg = "エクセルファイル" & strxls & " を、Accessファイル " & strac & _ "として、データ入力を行います。" & _ "よろしければ、OKをクリックして下さい。" 'MsgBoxのメッセージ If strxls = "" Then MsgBox "ファイルを選択して下さい。" 'テキストボックスの確認 Exit Sub End If 'DoCmd.DeleteObject acTable, strac 'テーブルを削除します。 If MsgBox(strMsg, vbOKCancel, "import") = vbOK Then '最初のデータをフィールド名として使います。 DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, _ strac, strxls, True, strrange MsgBox "インポートは、正常に完了しました。" End If Exit Sub なお取り込むテーブルデータはフィールド行を抜かして常に1レコードだけです。 アクセスでは既存のテーブルに保存してます。 詳しい方お願いします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

私の場合 Sub test18() DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "社員1", "C:\Documents and Settings\XXX\My Documents\YYYY.xls", True, "A1:C7" End Sub で実行すると見出し除きで(上記エクセルシートの)6行がACCESSにインポートされた。 質問での、ここの定義=strrange = "T_障害票!" 'データ入力のシート名とセル範囲を指定します。 の範囲がデータのない空白行まで含めているのだろう。 チェックしたかどうかも質問に書いてない。まずやるべきこと。 ACCESS側で自動でエクセルの最終行を捉え、上記例でA1:C7の7の文字列を作るのは不可能で、エクセルの世界にACCESSから入り、エクセを開くコードを書いて、エクセルの世界でのEnd(xlUp).Rowのようなことをして割り出さないとならないでしょう。CurrentRegionなどは使えないでしょうから。

anman0201
質問者

お礼

解決しました。 ありがとうございました。

anman0201
質問者

補足

ご回答ありがとうございます。 取り込みたいテーブルデータがあるのは二枚目のシートなんです。 説明不足ですみません。 セル範囲を指定して実行するとたぶん自動的にシート1を読んできてるのかと思います。 シートの指定はヘルプでもシート全体かセルRangeのことしか書いてなくて対処法が見つかりません。 なにか方法はないでしょうか?

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

EXCELデータの最終行がどこなのか?が怪しい。 (実は任意だが)セルA1を選んだ状態でCtrl+Endキーを押してみてください。 EXCELがどの行・列を最終と判断するか、がわかります。 質問者さまが、「最終データがある行」と認識している行と一致しますか?

anman0201
質問者

お礼

解決しました。 ありがとうございます。

anman0201
質問者

補足

ご回答ありがとうございます。 実はノートタイプのパソコンを使ってるのですが、ENDキーがありません。 Ctrl+↓は違いますよね?

関連するQ&A

  • エクセルデータをAccessに取り込む時のコツ

    いつもお世話になっております。 Access2000(OSはWindowsXP)上にボタンを作り、これをクリックするとExcelデータを自動的にインポートするプログラムを作りました。 プログラムはインターネットを調べて、下記のように書きました。 これはこれで使えるのですが、現在のプログラムの記述では、今回エクセルデータをインポートすると、前回取り込んでいたエクセルデータが一旦削除され、今回取り込んだエクセルデータに置き換わります。 これを、前回取り込んだエクセルデータに、今回取り込んだエクセルデータが追加されるような形になれば、より便利に使えるので、その記述の仕方が分かる方がおられましたら、是非教えて頂きたく思います。 どうぞ宜しくお願い致します。 (記述したプログラム) -------------------------------------------------------------------------------- Dim strac As String Dim strxls As String Dim strrange As String Dim strmsg As String strac = "T_回収お客様情報" 'Accessテーブルを指定 strxls = "C:\回収お客様情報.xls" 'エクセルファイルを指定 strmsg = "エクセルファイル" & strxls & "を、" & strac & _ "という名前のファイルとして、データ転送を行います。" & Chr(13) & Chr(13) & _ "よろしければ、OKをクリックしてください。" 'MsgBoxのメッセージ DoCmd.DeleteObject acTable, strac 'テーブルを削除 If MsgBox(strmsg, vbOKCancel, "Microsoft Access Club") = vbOK Then DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, _ strac, strxls, True MsgBox "データ入力は、正常に完了しました。" End If Exit Sub --------------------------------------------------------------------------------

  • CSVデータをAccess2000に自動取得

    いつもお世話になっております。 Access2000(OSはWindowsXP)上にボタンを作り、これをクリックするとExcelデータを自動的にインポートするプログラムを作りました。 このプログラムを利用して、エクセルデータではなく、CSVデータをインポートするように変更しようと思っていますが、インターネットを調べても、今一つ要領を得ません。 どの部分をどのように修正すればよいのか、お分かりの方がおられれば、是非ご教授をお願いします。 どうぞ宜しくお願い致します。 (記述したプログラム) ------------------------------------------------------------------ Dim strac As String Dim strxls As String Dim strrange As String Dim strmsg As String strac = "T_回収お客様情報" 'Accessテーブルを指定 strxls = "C:\回収お客様情報.xls" 'エクセルファイルを指定 strmsg = "エクセルファイル" & strxls & "を、" & strac & _ "という名前のファイルとして、データ転送を行います。" & Chr(13) & Chr(13) & _ "よろしければ、OKをクリックしてください。" 'MsgBoxのメッセージ DoCmd.DeleteObject acTable, strac 'テーブルを削除 If MsgBox(strmsg, vbOKCancel, "Microsoft Access Club") = vbOK Then DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, _ strac, strxls, True MsgBox "データ入力は、正常に完了しました。" End If Exit Sub ---------------------------------------------------------------------

  • エクセルVBA アクセスにインポート

    エクセルのデータ(列数、行タイトルは都度かわる)をアクセスにインポートしテーブルを作成したいと思っています。 VBAでこの処理をおこないたく、下記のコードで実行したのですがデバッグがはしってしまいます。 (DとEでデバッグ) 原因がお分かりになる方がおりましたら、教えていただけますでしょうか? 何卒、よろしくお願い申し上げます。 Function ExcelDataImport() 'On Error GoTo エラー Dim varac As Variant Dim varxls As Variant Dim strrange As String Dim strmsg As String varac = "T_TESTTABLE" ' --- A varxls = "C:\Users\AC\Desktop\ACTEST\RAWDATA.xlsx" ' ---B strrange = "TEST_RAWDATA" ' --- C strmsg = "Excelファイル" & varxls & " を、Accessテーブル " & varac & _ "へ、データ入力を行います。" & Chr(13) & _ "Excelファイルの入力レンジは、 " & strrange & " です。" DoCmd.DeleteObject acTable, varac ' --- D If MsgBox(strmsg, vbOKCancel) = vbOK Then DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ varac, varxls, True, strrange ' -- E MsgBox "データ入力は、正常に完了しました。" End If Exit Function エラー: MsgBox "予期せぬエラーが発生しました。" & Chr(13) & _ "エラー番号:" & Err.Number & Chr(13) & _ "エラー内容:" & Err.Description, vbCritical Exit Function End Function

  • [PG]AccessVBAでファイルのインポートする方法

    [PG]AccessVBAでファイルのインポートする方法 VBAでエクセルファイルのインポートする機能を実装しています。 下記のコードで実行しますと実行時エラー"3011"が表示され DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ varac, varxls, True, strrange で止まります。何か解決方法を教えていただけないでしょうか? Function ExcelDataImport() 'On Error GoTo エラー Dim varac As Variant Dim varxls As Variant Dim strrange As String Dim strmsg As String ' --- Accessテーブルを指定します。存在していなければ自動的に作成します。 varac = "tbl_売上げテーブル" ' ---Excelファイルを指定します。必ず、存在していなくてはいけません。 varxls = "C:\売上げ.xls" ' --- データ入力のシート名とセル範囲を指定します。 ' なお、省略が可能です。省略した場合は、ワークシート全体がインポートされます。 strrange = "売上げシート!A1:D10" strmsg = "Excelファイル" & varxls & " を、Accessテーブル " & varac & _ "へ、データ入力を行います。" & Chr(13) & _ "Excelファイルの入力レンジは、 " & strrange & " です。" ' --- DeleteObjectメソッドを用いて、tbl_売上げテーブルを削除します。 ' --- TransferSpreadsheetメソッドを用いてデータをインポートします。 DoCmd.DeleteObject acTable, varac If MsgBox(strmsg, vbOKCancel) = vbOK Then DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ varac, varxls, True, strrange MsgBox "データ入力は、正常に完了しました。" End If Exit Function

  • Accessへのエクセルデータインポート

    Accessへのエクセルデータインポート 環境:Access2000/WinXP アクセス2000の特定テーブルへ、エクセルデータをインポートするよう組んだのですが、新しくデータを追加すると、これより前に入っていたデータがレコードを残して消えてしまいました。 新規データを追加した際にただの追加としたいのですがどこがおかしいのでしょうか。 Private Sub データ登録_Click() Dim objExcel As Object Dim varFilePath As Variant Dim bln As Boolean Dim varac As Variant Dim varxls As Variant Dim strrange As String Dim strmsg As String varac = "受講者情報一覧" Set objExcel = CreateObject("Excel.Application") varFilePath = objExcel.GetOpenFilename("Microsfot Exel (*.xls), *.xls", , "xls選択") If varFilePath <> False Then varxls = varFilePath Else Exit Sub End If Set objExcel = Nothing varxls = varFilePath strrange = "" strmsg = "Excelファイル" & varxls & " を、Accessテーブル " & varac & "へ、インポートします。" DoCmd.DeleteObject acTable, varac If MsgBox(strmsg, vbOKCancel) = vbOK Then DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, varac, varxls, True MsgBox "正常にインポート完了しました。" End If Exit Sub エラー: MsgBox "予期せぬエラーが発生しました。" & Chr(13) & "エラー番号:" & Err.Number & Chr(13) & _ "エラー内容:" & Err.Description, vbCritical Exit Sub End Sub

  • ACCESS エクスポート ダイアログ ファイル名取得

    ACCESS2003で作成したデータをダイアログで指定したファイル名でエクスポートしたいのですが、上手くできません。 ダイアログが開きその指定したフォルダーにあるエクセルファイルを選択すれば、正常にエキスポートできるのですが、 開いたダイアログにファイル名を入力すると、それ以降動かなくなります。 基本的なことが間違っているのでしょうか?? 詳しい方教えてください。下記にコードした内容を書きました。 よろしくお願いします。 Private Sub cmbTransExcel_Click() On Error GoTo Err_cmbTransExcel_Click Dim fileSaveName As Variant Set dlg = Application.FileDialog(msoFileDialogOpen) With dlg .Title = "チェック" .ButtonName = "エキスポート" .InitialFileName = "C:\Program Files\DATA\" .InitialView = msoFileDialogViewList .AllowMultiSelect = False .Filters.Clear .Filters.Add "xls", "*.xls" End With With dlg If .Show = -1 Then For Each vntPath In dlg.SelectedItems strPath = vntPath Next Else Set dlg = Nothing Exit Sub End If End With Set dlg = Nothing Dim strac As String Dim varxls As Variant Dim strmsg As String strac = "Q_チェック" 'Accessファイルを指定します。 varxls = strPath 'エクセルファイルを指定します。 strmsg = strac & " を、Excelファイルへ出力します。" & Chr(13) & _ "出力先は" & varxls & "、 シート名は" & strac & "です。" & _ Chr(13) & "よろしければ、OKをクリックして下さい。" If MsgBox(strmsg, vbOKCancel) = vbOK Then '最初のデータをフィールド名として使います。 DoCmd.TransferSpreadsheet acExport, _ acSpreadsheetTypeExcel9, strac, varxls, True MsgBox "EXCELの出力が正常終了しました。", vbInformation, "処理終了" End If Exit_cmbTransExcel_click: Exit Sub Err_cmbTransExcel_Click: MsgBox "EXCELの出力が異常終了しました。", vbCritical, "エラー!" Resume Exit_cmbTransExcel_click End Sub

  • AccessVBA:TransferSpreadSheetメソッドで既存テーブルに挿入は出来る?

    元となるAccessテーブルはあります。 そこに、ExcelからTransferSpreadSheetメソッドを使って、フィールド挿入という形が出来ますでしょうか。 指定したExcelデータじたいのインポートは出来てますけど、挿入となるとさっぱり分かりません。 (Win2000/Access2000/Excel2000) 現在の書き込みは以下のとおりです。 Function ExcelDataImport() On Error GoTo Err_コマンド1_Click Dim varac As Variant Dim varxls As Variant Dim strrange As string Dim strmsg As string varac = "既存テーブル" varxls = "C:\Temp\EX.xls" strrange = "(A1:A1000)" DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, varac, varxls, True, strrange (エラーメッセージ定義が続く) End Function --------------------------------------------------Private Sub Excelin_() Call ExcelDataImport End Sub

  • アクセスからエクセルへインポートの際に

    アクセスからエクセルへクエリの結果をインポートしています。 そこでワークシートができるのですが、その後、そのワークシート が残るので同じ処理をした際に、同じ名前のワークシートに上書き すると思っていたのですが、新たにワークシートを作成して しまい困っています。 VarAccess = "入力禁止LEJOUR" の部分がワークシート名になりますが 同じ処理をすると入力禁止LEJOUR1というワークシートが横に できてしまいます。 これを入力禁止LEJOURのシートに上書きさせるには どんなコードを使用したらいいでしょうか? 教えてください。 よろしくお願い致します。 Private Sub コマンド15_Click() On Error GoTo エラー Dim VarAccess As Variant Dim VarExcelpass As Variant Dim strmsg As String VarAccess = "入力禁止LEJOUR" VarExcelpass = "\\Shiob030\共有\生産戦略事業部\03.生産L.C.海\B.指図進捗表(月単位)\07\SS\07SS-LE JOUR.xls" strmsg = VarAccess & "を、Excelファイルへ出力します。" & _ Chr(13) & "出力先は" & VarExcelpass & "、 シート名は" _ & VarAccess & "です。" & Chr(13) & "よろしければ、OKをクリックして下さい。" If MsgBox(strmsg, vbOKCancel) = vbOK Then DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, VarAccess, VarExcelpass, True MsgBox "データ出力は、正常に完了しました。" End If Exit Sub エラー: If Err.Number = 3044 Then MsgBox "Excelファイルのパス指定が間違っています。", vbCritical Else MsgBox "予期せぬエラーが発生しました。", vbCritical End If End Sub

  • Access2010でのExcel出力について

    お世話になります。 Access2010のクエリで抽出した結果を下記のコマンドでExcelに出力しています。 Private Sub コマンド6_Click() Dim デスクトップの場所 As String デスクトップの場所 = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\" If Nz(Dir(デスクトップの場所 & "log.xlsx"), "") <> "" Then If vbNo = MsgBox("デスクトップに同じ名前のファイルが存在します。上書きしますか?", vbYesNo + vbQuestion, "ファイルが存在します") Then Exit Sub End If End If DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "Q_syukei", デスクトップの場所 & "log.xlsx" DoCmd.Close MsgBox "デスクトップに案件ログのExcelファイルが出力されました" End Sub その中のフィールドにコンボボックス利用のデータが複数あり、 1列目にID番号が振られていて、2列目に目的のデータ項目が格納されています。 元のテーブルでも、クエリでも列幅を0cm;10cmとしていて、 クエリの結果もAccess上で見ると2列目のデータ項目が表示されるのですが、 出力されたExcelには1列目のID番号しか載ってきていません。 2列目のデータをExcelに出力するにはどうすればよいでしょうか。 ご教授ください。

  • Access テキスト インポート

    現在指定したファイルしかインポートしが出来ないのでこれを 指定したファイルをインポートしたいのですがどのようすれは、いいでしょうか?よろしくお願いします。 Private Sub コマンド5_Click() On Error Resume Next Dim MsgNo As Integer Dim Msg1, Msg2, Msg3 As String Dim su As String Dim cut As Integer Dim fd As String Dim suu As String Dim db As Database Dim d1 As Recordset Msg1 = " インポートを開始します。" Msg2 = "「DAT」ファイルがありません。" Msg3 = "「DAT」ファイルを c:\DATデータにコピーし、再度実行して下さい。" MsgNo = MsgBox(Chr(9) & Msg1 & Chr(9), 1) If MsgNo = 2 Then 'キャンセルボタンで終了 GoTo Exit_インポート_Click End If EmptyAllTable 'テーブルクリア Set db = CurrentDb Set d1 = db.OpenRecordset("t_製品データ") fd = Dir("C:\DATデータ\*.dat") If fd = "" Then 'ファイルがなければ、メッセージを表示、処理を戻します。 Beep MsgNo = MsgBox(Msg2 & Chr(13) & Chr(10) & Chr(13) & Chr(10) & Msg3, 16) GoTo Exit_インポート_Click End If

専門家に質問してみよう