アクセスからエクセルを開いてデータを取得する方法

このQ&Aのポイント
  • MS AccessからExcelを開いて、Excel上のデータを取得する方法について教えてください。
  • MS AccessではCellsを使用することができないため、別の方法でデータを取得する必要があります。
  • Excel.Applicationオブジェクトを使用してExcelを開き、データを取得することができます。
回答を見る
  • ベストアンサー

アクセスからエクセルを開いてデータを取得するには?

こんにちは。 MS AccessからExcelを開いて、Excel上のデータを取得したいのですが、下記のようにしたらエラーとなりました。CellsがNGみたいなのですが、AccessではCellsは使用出来ないのでしょうか? 宜しくお願いします。 Dim oApp As Object Set oApp = CreateObject("Excel.Application") oApp.Visible = True On Error Resume Next oApp.UserControl = True oApp.Workbooks.Open Filename:="C:\TEST\Book1.xls" GYO = 1 Do KI = Cells(GYO, 1).Value MsgBox KI GYO = GYO + 1 Loop Until Cells(GYO, 1) = ""

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

  • ベストアンサー
  • 11zep
  • ベストアンサー率36% (48/133)
回答No.2

"Cells"だけでは、エラーになると思います。 Applicationのコレクションなので"oApp.Cells(GYA,1).Value"としてみて下さい。 Excelだと省略しても動いてくれたと思います。

hidemari
質問者

お礼

11zepさん、こんにちは。 ありがとうございます。 oApp.を追加したらうまく動作しました。 Excelの癖でいきなり Cells・・・・としてしまいました。 

その他の回答 (3)

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

エクセルーApplication Set oApp ブック Set bk=oApp..Workbooks.Open ・・・ シート Set sh=bk.Worksheet(”シート名") までを省略しないで、定義し sh.Cells(・・)とする癖をつけること。オブジェクト階層を明示するのだ。 多分こんななところが原因ではないか。

hidemari
質問者

お礼

mogasiさん、こんにちは。 ありがとうございます。 ついつい省略してしまう癖を直します!

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.3

できますよ。 oApp.Cells(GYO, 1).Value もしくは Dim oWorkbook As Object Set oWorkbook = oApp.Workbooks.Open("C:\TEST\Book1.xls") KI = oWorkbook.Cells(GYO, 1).Value あとWithを使えばもう少し見栄え良くなるし処理速度も向上します。

hidemari
質問者

お礼

o_chi_chiさん、こんにちは。 ありがとうございます。 setも有効なんですね。勉強になりました。

  • Saturn5
  • ベストアンサー率45% (2270/4952)
回答No.1

>AccessからExcelを開いて ここのところがよくわかりません。 AccessとExcelは別のソフトです。 一般には、レコードセットを開いて(定義して)そこから データを取得します。 http://www.geocities.jp/cbc_vbnet/ADO/recordset.html

hidemari
質問者

お礼

Saturn5さん、こんにちは。 Excelに記載してあるデータをAccessのtableから探し出し、処理をする というものを作りたかったのです。説明不足ですいません。

関連するQ&A

  • accessのデータをexcelに

    Office97使用のシステム管理初級者です。 accessのクエリーを利用して以下のようなシステムを作ろうと思っているのですが、行き詰っています。 (1) 特定のデータ(複数)を抽出 (2) 既に用意しているexcelの任意の位置にデータを移管 (3) excelのブックを別名にてフロッピーに保存 (1)は何とかできたのですが、(1)によって抽出できたデータを任意のexcelに移管する時、最初の1データしか移管できなくて困っています。(次のようなものです・・・。) Private Sub エクセル起動_Click() On Error GoTo Err_エクセル起動_Click Dim oApp As Object Set oApp = CreateObject("Excel.Application") oApp.Visible = True 'Only XL 97 supports UserControl Property On Error Resume Next oApp.UserControl = True oApp.Workbooks.Open FileName:="D:\****\123.xls" oApp.range("b4").Value = Me![1] oApp.range("c8").Value = Me![2] oApp.range("d8").Value = Me![3] oApp.range("e8").Value = Me![4] oApp.range("f8").Value = Me![5] oApp.range("g8").Value = Me![6] oApp.range("h8").Value = Me![7] oApp.range("i8").Value = Me![8] oApp.range("j8").Value = Me![9] Exit_エクセル起動_Click: Exit Sub Err_エクセル起動_Click: MsgBox Err.Description Resume Exit_エクセル起動_Click End Sub それぞれの行にズラーッとデータがきて、さらにそのexcelを別名にてフロッピーに保存したいのですが、どのようにすればいいのでしょうか? よろしくお願いします。

  • ACCESSからEXCELの PasteSpecial でエラーになる

    ACCESSからEXCELを操作しています。 範囲コピー後、書式のみペーストしたいのですが、うまくいきません。 以下の PasteSpecial の行でエラーになります。 エラーメッセージは「Range クラスの PasteSpecial メソッドが失敗しました。」です。パラメータを付けないと全てがコピーされ正常に終わります。 パラメータをダブルクォートで囲っても駄目でした。 EXCELのマクロ出力そのままなのですが、書き方が悪いのでしょうか。 Dim oApp As Object Set oApp = CreateObject("Excel.Application") oApp.UserControl = True oApp.Workbooks.Open FileName:="format.xls" oApp.Range("A1:D4").Select oApp.Selection.Copy oApp.Range("C9").Select '↓エラーになる oApp.Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

  • vbsでexcelのクリアとフォームの表示をしたい

    お世話になっております。 vbsの以下の記述でexcelを開いています。 開くところまでは行くのですが、その後のsheet1のデータのクリアとUserForm1の表示がどうしてもできません。 申し訳ありませんが、どなたかおわかりの方、教えていただけないでしょうか。 宜しくお願いいたします。 Dim oApp Dim objWshShell Dim scriptPath 'Excelオブジェト作成 Set oApp = CreateObject("Excel.Application") 'WScript.Shellオブジェクト作成 Set objWshShell = CreateObject("WScript.Shell") oApp.Visible = True '不可視にする oApp.UserControl = True 'Excelファイルを開く scriptPath = WScript.ScriptFullName scriptPath = left(scriptPath,len(scriptPath)-len(WScript.ScriptName)) oApp.Workbooks.Open scriptPath & "共同資料.xlsm"

  • ACCESS2013のVBAで、EXCELを操作

    ご質問させて頂きます。 ACCESS2013のVBAで、EXCELを操作するために 下記のようにしています。 ------- Dim oApp As Object Dim oWkb As Object Dim oWks As Object Dim Rw As Integer Dim SQL As String Set oApp = CreateObject("Excel.Application") oApp.Visible = True oApp.DisplayAlerts = Flase '確認メッセージの非表示 ↓↓↓オートメーションエラー Set oWkb = oApp.Workbooks.Open(CurrentProject.Path & "\ひながた.xls") ------- 上記のところでオートメーションエラーになってしまいます。 しかし私の端末ではエラーは出ません。 問題と思われるのは エラーが出る人の端末は、 EXCELが2010と2013と 2つのバージョンがインストールされていることです。 このようなことでエラーが出てしまうことはあるのでしょうか?

  • VBS★Excel★スクリプト★引数の取得

    VBSは初心者というか、やったことがありません。ど素人になります。 説明がとてもぎこちないのもその辺からだと思いますが、宜しくお願いします。 VBのシステムからVBSファイル <内容> Dim wbname Dim mypara Dim file_path Dim oApp file_path = "C:\share\Excel\1234.xls" Set oApp = CreateObject("Excel.Application") oApp.Visible = True On Error Resume Next oApp.UserControl = True oApp.Workbooks.Open "C:\share\Excel\1234.xls" Set oApp = Nothing WScript.Quit を指定して起動すると(1)Excelで作成したシステムが稼動するように作りたいのですが、(1)を起動する環境設定があり、C:\Documents and Settings\MBS\デスクトップ\1111.vbs #CODE #CODEが引数になります。 その#CODEをVBSで取得したいのですが、単体で1111.vbsを動かすとExcelファイルは動きます。 元のシステムではexeファイルしかみないようなのですが、例えば電卓とかメモ帳とかは動きます。vbsファイルだけは動きません。どのようにすれば動くかアドバイスをお願いします。 宜しくお願いします。

  • VBA OPENエラー対策のDoEventsとは

    別の人(不明)が作成したAccessのVBAプログラムを 修正しているのですが、 Excelブックファイルを開く直前で、 DoEvents が書かれていて、 「OPENエラー対応」というコメントがあるのですが、 どのような問題があるのでしょうか。 (削除しても正しく動くので問題がなければ削除したいのですが) もし問題が起きる例がありましたら教えてください。 ----------------------------------------------      : Set oApp = CreateObject("Excel.Application") oApp.Visible = False DoEvents 'OPENエラー対応 oApp.Workbooks.Open strFileNameFullPath, IgnoreReadOnlyRecommended:=True oApp.Workbooks(strFilename).Activate      : ---------------------------------------------- (OS:Windows7 , Access2010 )

  • 【VB6】EXCELのシート名を変更したい

    お世話になっております。 VB6(visual basic 6)プログラムからEXCELのシート名を指定したいです。 EXCEL:EXCEL 2000 OS: win XP 以下の記述ではシート名がデフォルトのままです。 (sheet1のままで変更できていない) Dim fs As Object Dim oApp As Object Set oApp = CreateObject("Excel.Application")'EXCEL起動 oApp.Visible = True oApp.UserControl = True oApp.Workbooks.Add '新規のワークシートsheet1を追加する oApp.Cells(1, 1) = "シート名を指定したい!" 'セル入力はできた oApp.Sheets("sheet").select oApp.Sheets("sheet").Name = "新シート名" ご覧のように (1)自動EXCEL起動して (2)セル1,1に文字入力して (3)シート名を指定 しようとしております。 セル(1,1)に「シート名を指定したい!」は入力されております。 ブック名(ファイル名)はデフォルトのBook1.xlsです。 シート名の指定方法が間違っているからうまくいかないと思っております。 どうぞよろしくお願いいたします。

  • Access VBAからExcelシートの削除

    お世話になります。 Access VBA から指定したExcelシートの削除を行うプログラムを下記の通りに記載しています。 Set oApp = CreateObject("Excel.Application") oApp.Workbooks.Open FileName:="エクセル.xls" oApp.DisplayAlerts = False oApp.Sheets("シート名1").Delete oApp.DisplayAlerts = True この場合において、"シート名1"が存在していれば問題なく処理されますが、 このシートが存在していなければエラーが起きます。 指定したExcelブックにこのシートが存在するかどうかのチェックを事前に行い、 存在する場合のみ削除処理を行うにはどうすればよいでしょうか? よろしくお願いします。 環境は、Access2007です。

  • ACCESS VBA からのワードファイルの起動

    ACCESS97を(未だに!)使用しています。 これから、VBAでワードの既存ファイルを起動したいと考えています。その際、ワードを新規に立ち上げることなく、表示して編集したいわけですが、どうしても新規に起動してしまします。 これまで試したのは、 Dim oApp As Object Set oApp = GetObject("", "word.Application") oApp.Visible = True oApp.Documents.Open FileName:="C:\filename.doc" および Dim oApp As Object Set oApp = CreatObject("word.Application") oApp.Visible = True oApp.Documents.Open FileName:="C:\filename.doc" などです。 しかし、すでにワードが起動していても、どうしても、新たにワードを立ち上げてしまいます。 解決策はあるでしょうか? ちなみにエクセルだと、GetObject で既に起動しているエクセルに追加でアプリが表示されます。

  • Access2000にエクセルデータを取り込み

    お世話になります。 Access2000のVBAを使用して エクセルにデータを取り込みたいと 思っています。 現在は、下記の(1)のソースで、エクセルのデータを Access2000に取り込んでいます。 しかしながら、「取り込み開始」の箇所を >あと、アクセスのインサートはSQL一発のほうが早いと思う。 >http://www.1keydata.com/jp/sql/sql-insert-into.php というアドバイスを頂きました。 しかしながら、私の知識がまったくなく、どのように コーディングしていいのかわからない状態です。 そこで、お手数でもうしわけございませんが、 下記の(1)のソースをSQLで使用した場合のコードを 教えて頂けないでしょうか? 私が馬鹿のため、ソースコードで頂きたいので、 ソースコードがわからないかたは、回答頂かなくて 結構ですのでよろしくおねがいいたします。 ------------ソース(1)---------------- Set oApp = CreateObject("Excel.Application") oApp.Workbooks.Open FileName:=CurrentProject.Path & "\メイン.xlsm" ---------------取り込み開始------------- rs2.Open "選手", CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic iRow = 2 sheet = "program" rs.Open "選手情報_選手ID", CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic iRow = 2 ' ★ sheet = "program" While (oApp.Sheets(sheet).cells(iRow, 1) <> "") rs.Filter = "日=" & oApp.Sheets(sheet).cells(iRow, 2) rs.Filter = rs.Filter & " and 場=" & oApp.Sheets(sheet).cells(iRow, 1) rs.Filter = rs.Filter & " and 番号=" & oApp.Sheets(sheet).cells(iRow, 3) If (rs.EOF) Then rs.AddNew rs("日") = oApp.Sheets(sheet).cells(iRow, 2) rs("場") = oApp.Sheets(sheet).cells(iRow, 1) rs("番号") = oApp.Sheets(sheet).cells(iRow, 3) End If rs("1番") = oApp.Sheets(sheet).cells(iRow, 5) rs("2番") = oApp.Sheets(sheet).cells(iRow, 5 + 26) rs("3番") = oApp.Sheets(sheet).cells(iRow, 5 + 26 + 26) rs("4番") = oApp.Sheets(sheet).cells(iRow, 5 + 26 + 26 + 26) rs("5番") = oApp.Sheets(sheet).cells(iRow, 5 + 26 + 26 + 26 + 26) rs("6番") = oApp.Sheets(sheet).cells(iRow, 5 + 26 + 26 + 26 + 26 + 26) rs.Update iRow = iRow + 1 Wend rs.Close ---------------取り込み終了------------- ---------------取り込み開始------------- rs.Open "選手情報_選手名", CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic iRow = 2 ' ★ sheet = "program" While (oApp.Sheets(sheet).cells(iRow, 1) <> "") rs.Filter = "日=" & oApp.Sheets(sheet).cells(iRow, 2) rs.Filter = rs.Filter & " and 場=" & oApp.Sheets(sheet).cells(iRow, 1) rs.Filter = rs.Filter & " and 番号=" & oApp.Sheets(sheet).cells(iRow, 3) If (rs.EOF) Then rs.AddNew rs("日") = oApp.Sheets(sheet).cells(iRow, 2) rs("場") = oApp.Sheets(sheet).cells(iRow, 1) rs("番号") = oApp.Sheets(sheet).cells(iRow, 3) End If rs("1番") = oApp.Sheets(sheet).cells(iRow, 1 + 5) rs("2番") = oApp.Sheets(sheet).cells(iRow, 1 + 5 + 26) rs("3番") = oApp.Sheets(sheet).cells(iRow, 1 + 5 + 26 + 26) rs("4番") = oApp.Sheets(sheet).cells(iRow, 1 + 5 + 26 + 26 + 26) rs("5番") = oApp.Sheets(sheet).cells(iRow, 1 + 5 + 26 + 26 + 26 + 26) rs("6番") = oApp.Sheets(sheet).cells(iRow, 1 + 5 + 26 + 26 + 26 + 26 + 26) rs.Update iRow = iRow + 1 Wend rs.Close ---------------取り込み終了-------------