• ベストアンサー

ブックを開かずにデータを読む方法を教えてください

 エクセルVBAでブックを開かずにデータ読み取る方法をどなたか教えていただけないでしょうか?ExecuteExcel4Macroメソッドを使用する方法を検討しているのですが、ヘルプを見ても使い方が良くわかりません。例えば    Book1のsheet(1)のRange("A1") に既存する    Book2のsheet(1)のRange("B1") の値をコピーする場合、Book2を開かずに処理したいのですが、やり方がわからず困っています。よろしくお願いします!

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 ブックを開かずに開く方法は、いくつかありますが、よほどの理由がなれば、そのような必要はありません。 #1さんのおっしゃるような方法で、特に、オートメーション・オブジェクトを作って取り出すような方法なら、何の支障もないはずです。 ExecuteExcel4Macro で取り出すのは、通常は、ワン・セルの値だけですが、関数も埋め込めます。コツは、R1C1 方式で書くということだけです。 以下のサンプルで、イミィディエイトウィンドウで出力された数式をごらんください。 Sub Test1() Dim ret As Variant  ret = getValue("Book2.xls", "Sheet1", "A1") End Sub Function getValue(ByVal Bk As String, _          ByVal strSht As String, _          ByVal strCell As String, _          Optional ByVal strPath As String)            If Not strCell Like "R#*C#*" Then   strCell = Application.ConvertFormula(strCell, xlA1, xlR1C1, xlAbsolute)  End If  If strPath = "" Then    strPath = Application.DefaultFilePath & "\"  End If  Debug.Print "'" & strPath & "[" & Bk & "]" & strSht & "'!" & strCell  getValue = ExecuteExcel4Macro("'" & strPath & "[" & Bk & "]" & strSht & "'!" & strCell) End Function ------------------------------------------------ ただし、 > Book2のsheet(1)のRange("B1") シートインデックスから取り出す方法は、このような方法では難しいではないかと思います。

okranta
質問者

補足

 サンプル付きのご解答ありがとうございました。参考にさせていただきます。ところで > ExecuteExcel4Macro で取り出すのは、通常は、ワン・セルの値だけですが    範囲を指定して取り出すことは不可能でしょうか?もし方法があれば教えていただけませんか?

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 >範囲を指定して取り出すことは不可能でしょうか? 遅くなりました。書きかけでアップロードしませんでした。 それは、数字でしたら、統合(Consolidate)という方法がありますが、それ以外は、ADOで取り出すという方法があります。両方とも、一応、フィールド行が必要になります。ADOなら、文字列でも取り出すことが可能ですし、検索も可能です。 ただ、同じExcelシートなら、直接開いたほうがおそらく手数などは簡単ではないかと思います。 また、INDEX 関数を使って、範囲自体は認識はしているようですが、Ver.4 マクロ関数では、やはり一つずつしか取り出せないようです。Evaluate 関数は使えません。他には、やはり、ダミーのシートを用いて、数式で取り出すという方法があります。それが、一番簡単なのですが……。

okranta
質問者

お礼

> ただ、同じExcelシートなら、直接開いたほうがおそらく手数などは簡単ではないかと思います。 > Ver.4 マクロ関数では、やはり一つずつしか取り出せないようです。  大量のデータを取り出したいので、おっしゃる通り直接開いた方が手間も時間もかからない感じですね。 > 数字でしたら、統合(Consolidate)という方法がありますが、それ以外は、ADOで取り出すという方法があります。  知りませんでした。私はVBA経験1年半(エクセルのみ)で初級の参考書2冊程度の勉強量なのでまだまだ知識不足ですね..少し上級の本で勉強したいと思います。どうもありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.4

詳しくはWendy02さんにお任せして、、(^^;;; >範囲を指定して取り出すことは不可能でしょうか 範囲の値を単純に取出すだけなら、Forで回すという方法もありますね。 ThisWorkBookのSheet1のA1以降に Book2のSheet1のB1:B10の値を転記する場合 '------------------------------------ Sub Test() Dim N As Long Dim myValue For N = 1 To 10  myValue = ExecuteExcel4Macro("'C:\BBB\[Book2.xls]Sheet1'!R" & N & "C2")  Sheets("Sheet1").Cells(N, "A").Value = myValue Next N End Sub '--------------------------------- ところで、質問者のVBAスキルはどの程度なのでしょう。 そこらあたりも提示しておくと回答するほうもし易いかと。

okranta
質問者

お礼

 遅くなってすみません。私のVBAのスキルは初級の参考書2冊を駆使して実践している程度です。現在処理速度の向上を図っているのですが「ブックを開いてデータをコピーする」という作業に代わる高速化の方法がないものかと思案していました。forで回すしかないということは大量のデータになるとブックを開いてコピーした方が速そうですね。どうもありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.2

  Book2.xlsがCドライブのフォルダーBBBにある場合。 '--------------------------------------- Sub Test()  Dim myValue  myValue = ExecuteExcel4Macro("'C:\BBB\[Book2.xls]Sheet1'!R1C2")  Sheets("Sheet1").Range("A1").Value = myValue End Sub '-------------------------------------- 気をつける点は、セル参照の仕方が、R1C1形式だということだけです。

okranta
質問者

お礼

 R1C1形式で行えばいいのですね。ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。
  • wolf03
  • ベストアンサー率22% (241/1086)
回答No.1

不可能です。 bookの内部のデータにアクセスするには可視不可視かは問いませんがbookを開く必要があります。 ユーザに見せたくないだけなら不可視で開いて使うことになります。

okranta
質問者

お礼

 不可視で開いて使ってみます。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ファイルを閉じたままの外部参照で最終行の行数取得

    こんにちは。VBA初心者、の段階から脱出を試みているものです。 ここやその他サイトを調べて、EXCELファイルを閉じたまま外部参照するには、Application.ExecuteExcel4Macroを使えばいいことがわかったのですが、参照先の最終行などの情報を取得するにはどうしたらいでしょうか。 私が調べた限りでは、以下のような単純に値を取得する方法しか説明されておらず、VBEのヘルプにも詳しい説明がありませんでした。 Cells(1, 1) = Application.ExecuteExcel4Macro _ ("'C:\My Documents\[Book2.xls]Sheet1'!R1C1") 参照先から値を取得する際に、必要な範囲だけ見るようにしてできるだけ速く処理できるようにしたいと思っています。 (したがって、 65535行目までループするとか、OPENメソッドで一旦ファイルを開くような手法は避けたいと思っています) なにかいい方法がありましたらご教示いただけないでしょうか。 よろしくお願いします。

  • エクセル-別のbookで同様のマクロ実行

    エクセル-別のbookで同様のマクロ実行 最初あるBook1に入っているmacro1はそのbook1のsheet1を処理するように作成しました。 次にBook1を開いたまま、Book2を開きそのsheet1に対してmacro1と同等の機能を実行したい場合は通常どうするのでしょうか。 (1) Book2にBook1のマクロをコピー (2) book2のマクロを開き、表示されるBOOK1 macro1を実行する。 (2) 場合でもうまくいくのでしょうか。Sheet1に対してやりたいことの論理は同じとします。試してみたらといわれそうですが、まず識者の説明をお聞きしたいのです。

  • 新規ブック名の取得

    vbaの質問です。 例えばですけど Sheets(Array(1,2,3)).copy で新しく作成されたbookの名前を取得するのってどうしたらいいんでしょうか。 やりたいことは、既存bookの特定のシートを新規bookへコピーなので別の方法でもできるのですが、上記の方法だとどうなるのかなと思いまして。

  • VBA ACCESSからexcel操作

    仕事でアクセスから二つのファイルを操作したいです。 アクセスのテーブルから新規excel(BOOK1)にデータを抽出し、 そのデータを既存のデータが入っているexcel(BOOK2)にコピーしたいです。 どうしてもコピーメソッドのRANGEクラスのところで「アプリケーションの定義エラー」 なってしまいます。 BOOK1のデータをBOOK2の新規シートにコピー、BOOK1とBOOK2のデータ行を 数える、のは試しやってできたので、 二つのファイル操作は出来ていて、RANGEクラスのところで既存シートにコピーする部分が 出来ていないんだと思います。 基本操作だと思いますが困っています。よろしくお願いします。

  • Excel他のブックから情報をコピーする方法

    いつも大変参考にさせていただいております。 Excelで他のブックの値を、今使っているブックにコピーする方法を探しております。 値のみを引く方法として、WEBより以下の方法がわかりました。 Sub TEST1() Workbooks.Open Filename:=ThisWorkbook.Path & "\Book2.xlsx" Dim Wb1, Wb2 Set Wb1 = ThisWorkbook Set Wb2 = Workbooks("Book2.xlsx") Wb2.Worksheets("Sheet1").Range("D7:D9").Copy Wb1.Worksheets("Sheet1").Range("B1") End Sub これを変更して作っていきたいとおもうのですが、最終的にVBAを起動させると コピー元となるExcelをユーザーが自分で選択するようにしたいです。(Excelの画像の挿入で、デバイスから選択 とするようなイメージです) その場合、どのようにしたら成せるでしょうか。 選択するブックは必ず複数シートあり、そのすべてをコピーしたいと思っています。 どなたか分かるかた、ご助力いただけますと助かります。

  • EXCELでブックを開かず?に値をコピーするには?

    VBAに関する質問です 現在作業中のブック「Book1」のシート「Sheet1」のセル「A1~A10」の値を、開いていない「Book2」のシート「Sheet2」のセル「B1~B10」にコピーし、さらに「B1~B10」の値をソートするということをしています。 現状ではBOOK2を開いてコピーするという方法しか判らないので、そうしているのですが、いちいちBOOK2が立ち上がるのが目障りなので、BOOK2を開かないか非表示のまま作業できないものかと思っております。 何卒よろしくお願いします。

  • ブックを開かずにデータ取得する

    ExecuteExcel4Macroを使いブックを開かずに別ブックのセル内容を 転記する下記のような制御を真似て書きましたが、別ブックにパスワードが設定してあるとセルの個数分パスワードを聞いてきます。 制御の中でパスワードを解除する方法はありますか。 Sub GetFromFile() Application.ScreenUpdating = False Dim FileName, CellName, PathName, SheetName, arg As String Dim result Dim I PathName = "C:\" FileName = "Book1.xls" SheetName = "Sheet1" For I = 1 To 5 CellName = Application.Choose(I, "A", "B", "C", "D", "E")    & "1" arg = "'" & PathName & "[" & FileName & "]" & SheetName     & "'!" & Range(CellName).Range("A1").Address(, , xlR1C1) result = ExecuteExcel4Macro(arg) Worksheets(1).Cells(1, I).Value = result Next End Sub

  • Book間でのコピー

    エクセルで以下の処理を実行するマクロを知りたいのですが。 Book1とBook2が開いています。 Book2のSheet1のA1~A10を、Book2のSheet1のA1~A10にコピーします。 この処理を任意の2つのBook間で実行するためにはどんなマクロになるでしょうか。(Book3とBook5で行ったり、Book25とBook46で行ったり等) アクティブになってないBookからアクティブになっているBookにコピーするようにしたいのですが。 宜しくお願いします。

  • Excel VBAで他のブックを選択する方法を教えてください。

    こんにちは。VBA初心者です。 ブックを2つ開いた状態で、 マクロを保存してあるブック〔Book1〕から、 毎回ブック名が異なる[Book2]の選択されている2枚のシートを新しいブックに(仮Book3)コピーしたいのですが、どのように記述したらよいのでしょうか。(選択されるシートも毎回異なります。) 特に教えていただきたい部分は、 1.マクロが記録されているBOOK1以外のBookを操作する方法。 2.私以外の方が利用する為、Book1に保存したマクロから実行させる予定なのですが、Book1を毎回開いて実行させる方法がベストのやり方なのでしょうか。 マクロの記録では下記の感じになります。 Sub Macro4() Windows.Arrange ArrangeStyle:=xlVertical Windows("Book2.xls").Activate Sheets(Array("Sheet3", "Sheet4")).Select Sheets("Sheet4").Activate Sheets(Array("Sheet3", "Sheet4")).Copy End Sub 宜しくお願い致します。

  • エクセルVBAで他Bookを閉じたまま参照・訂正

    Cells(1, 1) = Application.ExecuteExcel4Macro _ ("'C:\My Documents\[Book2.xls]Sheet1'!R1C1") でBook2を開かずにセルを参照できますが、 1.別の記述方法があるのでしょうか。 2.逆に、閉じたBook2のセルに対し、値を訂正できないでしょうか。 よろしくお願いいたします。