Excelファイルから特定のセル値を取得する方法

このQ&Aのポイント
  • あるフォルダにファイルを入れて、ファイルを開かずに対象シートの対象セルの値を取得する方法を教えてください。
  • 取得したいセル情報を変数で指定する方法についても知りたいです。
  • 具体的なコード例として、フォルダ内の特定のファイルから指定のシートとセルの値を取得する方法を教えてください。
回答を見る
  • ベストアンサー

ExecuteExcel4Macroでセル値取得

office2010 あるフォルダにファイルを入れて、ファイルを開かずに対象シートの対象セルの値を取得したいです。 この取得したいセル情報を、変数で指定したいのです。 C:\dataに取得元のファイルが入っています。 このファイル名((1))は、いろいろ変わりますが、中にH4という文字があります。 対象シートのシート名とセルアドレスは、別のファイル(これにマクロがあります) のsettingシートで指定します。 1例ですが、settingシートの B2に11_001 C2にAF9 と設定します。 (1)のファイルで11_001というシートのAF9セル値を取得したいのです。 Dim myPath As String Dim myFile As String myPath = "C:\data\" myFile = Dir(myPath & "*H4*.xlsm") Dim sheetname As String Dim cell As String sheetname = Worksheets("setting").Range("B2") cell = Worksheets("setting").Range("C2").Value ' 'Range("A1") = ExecuteExcel4Macro("'[" & myFile & "]" & sheetname & "'!R9C32") Range("A1") = ExecuteExcel4Macro("'[" & myFile & "]" & sheetname & "'!" & cell & "") 上記で、 Range("A1") = ExecuteExcel4Macro("'[" & myFile & "]" & sheetname & "'!R9C32") は、値取得できます。 このR9C32を変数にする所で、エラーが発生します。 実行時エラー1004と。 いろいろWEB見て、’,スペース等を入れてみましたが、どうしても分からず、 Range("A1") = ExecuteExcel4Macro("'[" & myFile & "]" & sheetname & "'!" & cell & "") の最後のセル指定を、変数で設定する方法を教えて頂きたく。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

>C2にAF9 C2セルにはA1形式ではなくR1C1形式で書かなくては R9C32 >ExecuteExcel4Macro("'[" & myFile & "]" パスも指定しなくては ExecuteExcel4Macro(("'C:\data\[Book1.xlsm]11_001'!R9C32") ExecuteExcel4Macro("'" & myPath & "[" & myFile & "]" & sheetname & "'!" & cell)

3620313
質問者

お礼

ありがとうございます。 助かりました。 パスも気になってました。

関連するQ&A

  • ExecuteExcel4Macroを使ったレコードの読み込み方法につ

    ExecuteExcel4Macroを使ったレコードの読み込み方法について 下記サンプルは、ファイルを指定して、指定したファイルの中にあるシートを選択し、その中にあるデータを読込むものになっています。 読込ませるファイルのsheet1には、『 ID,顧客番号,氏名,住所,電話番号 』 が入っています。 下記サンプルでは、顧客番号フィールドのデータは読込めるのですが、該当するレコード全体を読込むにはどう組み立てればいいかよくわかりません。 すみませんが、どなたかご教授いただけませんでしょうか。よろしくお願いいたします。 Public Sub testes() ' 変数の指定 Dim OpenFileName, SheetName, Target, buf As String Dim i, TargetCol As Long, GetNames() ' 対象ブックの選択 OpenFileName = Application.GetOpenFilename("Microsoft Excel ブック,*.xls") If OpenFileName = "False" Then Exit Sub ' ファイル名に[]を付ける OpenFileName = Replace(OpenFileName, Dir(OpenFileName), "[" & Dir(OpenFileName) & "]") ' 対象ワークシート名の指定と取得 SheetName = InputBox("対象ワークシート名を入力します") If SheetName = "" Then Exit Sub Target = "'" & OpenFileName & SheetName & "'!" ' ワークシートの正誤チェック On Error Resume Next buf = ExecuteExcel4Macro(Target & "R1C1") If Err <> 0 Then MsgBox "ワークシート [ " & SheetName & " ] を読めませんので終了します。", vbExclamation Exit Sub End If On Error GoTo 0 ' [顧客番号]フィールドを探す For i = 1 To 256 If ExecuteExcel4Macro(Target & "R1C" & i) = "顧客番号" Then TargetCol = i Exit For End If Next i If TargetCol = 0 Then MsgBox "[顧客番号]フィールドが確認できません。", vbExclamation Exit Sub End If ' データの読み込み For i = 1 To 10000 buf = ExecuteExcel4Macro(Target & "R" & i) If buf = "0" Then Exit For ' シートに出力する Worksheets("sheet3").Activate ActiveSheet.Cells(i, 1) = buf Next i End Sub

  • リストボックスにExecuteExcel4Macroで取得したデータを表示したいのですが

    インターネットと参考書を利用して独学で仕事用VBAを作成している者です。 素人なりにいろいろ試してはいるのですがうまくいかないのでご教授願えたらと思い投稿しました。 質問は2つ+α で、 1.そもそも表題にあることが可能なのか?不可能なのか? 2.可能であるならどの辺りを修正したら良いのか? です。 +α というのは、恥ずかしながら具体的な提示です。 よろしくおねがいします。 Private Sub CommandButton3_Click() TextBox1 = Sheets("Sheet1").Range("A1").Value Dim DYear Dim mypath Dim dateFpath DYear = TextBox1.Text mypath = ActiveWorkbook.Path dateFpath = mypath & "\Date" & DYear ChDir mypath & "\Date" & DYear 'dateFpath 'カレントフォルダ Dim FCnt As Integer FCnt = 0 Dim dateName dateName = Dir(DYear & "証票*.xls") Dim sx As Long 'シートの列番号 ListBox1.ColumnCount = 6 '3列表示 ListBox1.ColumnWidths = "100 pt;35 pt;35 pt;35 pt;35 pt;35 pt;35 pt;35 pt;35 pt" '表示する列の幅 Dim nen nen = "年月日" Dim ji ji = "時" Dim fun fun = "分" Do While dateName <> "" FCnt = FCnt + 1 sx = 4 dateName = Dir() With ListBox1 .AddItem .List(FCnt, 0) = dateName '1列目 .List(FCnt, 1) = nen '2列目 sx = sx + 1 .List(FCnt, 2) = Application.ExecuteExcel4Macro("'" & dateFpath & "\[" & dateName & "]Sheet1'!R4C" & sx).Value '3列目 sx = sx + 1 .List(FCnt, 3) = Application.ExecuteExcel4Macro("'" & dateFpath & "\[" & dateName & "]Sheet1'!R4C" & sx).Value '4列目 sx = sx + 1 .List(FCnt, 4) = Application.ExecuteExcel4Macro("'" & dateFpath & "\[" & dateName & "]Sheet1'!R4C" & sx).Value '5列目 sx = sx + 2 .List(FCnt, 5) = Application.ExecuteExcel4Macro("'" & dateFpath & "\[" & dateName & "]Sheet1'!R4C" & sx).Value '6列目 sx = sx + 1 .List(FCnt, 6).Value = ji '7列目 .List(FCnt, 7) = Application.ExecuteExcel4Macro("'" & dateFpath & "\[" & dateName & "]Sheet1'!R2C" & sx).Value '8列目 sx = sx + 1 .List(FCnt, 8).Value = fun '9列目 End With Loop MsgBox FCnt & "個のデータが見つかりました" End Sub 以上です。 ループ1順目の3列目で停止してしまいます。 変数の値は確認しています。 よろしくお願いします。

  • VBAでのExecuteExcel4Macroの値取得でエラー

    こんにちは。 Excel VBAより、ExecuteExcel4Macroを実行して、 外部のExcelファイルの、名前(店名、月度)を定義したセルの値を取得したいと思っています。 店名:文字列型 月度:Date型 そこで、ExecuteExcel4Macro()を実行し、以下のような処理を加えました。 ------------------------------------------------------------------------------------ dim 店名 as Variant, 月度 as Variant If 外部マクロ実行("'c:\[test.xls]出勤簿'!店名", 店名) = False Or _ 外部マクロ実行("'c:\[test.xls]出勤簿'!月度", 月度) = False Then MsgBox "取得失敗", vbExclamation End End If Public Function 外部マクロ実行(com As String, ByRef result As Variant) As Boolean On Error GoTo erron3 result = ExecuteExcel4Macro(com) On Error GoTo 0 外部マクロ実行 = True Exit Function erron3: 外部マクロ実行 = False End Function ------------------------------------------------------------------------------------ これを実行したところ、「月度」の値は取得できるのですが、 「店名」の値には「エラー 2042」という値が入ります。 ※dirname, filenameは正しい値が入っています。 ※シート「出勤簿」および「月度」「店名」のセル名の定義も存在します。 test.xlsを開いてるときは、上記の現象は起こらず、 「店名」の値は正常に取得できます。 また、試しに、test.xlsを開き、 Worksheets("出勤簿").Range("店名")を実行すると、正常な値が取得できました。 まとめると、 ・閉じたブックの、あるシートにある、セルに定義された名前を指定して ・ExecuteExcel4Macroで、文字列が入っている値を取得しようとした時、 ・正常に値が取得できない という現象に遭遇しています。 3日ほど調べているのですが、どうしても原因が分かりません。 解決策をお持ちの方、いらっしゃいましたらアドバイスを頂けると助かります。 環境:WindowsXP Pro SP3 Excel 2003 (11.5612.5606) 以上、よろしくお願いいたします。

  • Application.ExecuteExcel4Macroなに?

    No.373903を拝見しまして、閉じたままのブックを参照できるらしいので使いたいのですが、ブックが複数ある場合、[ ]内はどのように書けば良いのでしょう? 例) Cells(1, 1) = Application.ExecuteExcel4Macro _ ("'C:\My Documents\[Book2.xls]Sheet1'!R1C1") Book2・sheet1の部分が可変。 また、 Application.ExecuteExcel4Macro("get.document(50)") や Application.ExecuteExcel4Macro ("Halt(True)") 等の使い方もあるようですが、どなたかわかりやすく教えて頂けませんか?

  • 複数ファイルのA1だけを抽出して別ファイルにしたい

    すみませんが、教えてください。 特定のフォルダ内に入っているcsvのA1列目のみ抽出して別ファイルにしたく、検索したところ 同じように困っていた方がいたようで、参考にさせていただいたのですが、 以下を実行しても インデックスが有効範囲にありませんと出ます。 各csvファイルのシート名は 1000近くあるファイル全て違い、別々の名前(コード00-000とか)になっています。 (エクセルで開いたとき) お手数ですが、教えていただきたくお願いいたします。 参考にしたマクロです。 Sub macro1() Dim myPath As String Dim myFile As String myPath = "ファイルの場所\" myFile = Dir(myPath & "*.xls") Do Until myFile = "" Workbooks.Open myPath & myFile With Workbooks("集約.xls").Worksheets("Sheet1").Range("A65536").End(xlUp) .Offset(1, 0).Value = myFile .Offset(1, 1).Value = Workbooks(myFile).Worksheets("概要").Range("C3").Value End With Workbooks(myFile).Close savechanges:=False myFile = Dir() Loop End Sub 宜しくお願いいたします。

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

    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

  • ExecuteExcel4Macroでのデータ取得

    office365 従来、ドメイン配下のサーバに登録されているファイルをExecuteExcel4Macroでファイルを開かずにセルの値を抽出していました。 今回、サーバがドメイン配下でなくなったので参照ツールを変更しようとしています。 サーバ名が○○○○ IDがID パスワードがPW で Gドライブのinフォルダに登録されてる ファイル名:A001.xslsm シート名 :1_001_01 セルアドレス:A1 の内容を refer.xslmファイルのセルアドレスR1にExecuteExcel4Macroで表示させるマクロをベタで教えていただきたく。 ExecuteExcel4Macroでデータ抽出する構成にしているのは、参照するファイル容量が大きいので、 ファイルを開いてコピペ方式だとレスポンスが悪いからです。 サーバにはリモートディスクトップ接続をバッチファイルで起動したら入れる様にはなってます。 kido.batの中身 @echo off Set SERVER=○○○○ Set USERNAME=ID Set PASSWORD=PW Cmdkey /generic:TERMSRV/%SERVER% /user:%USERNAME% /pass:%PASSWORD% Start mstsc /v:%SERVER% Timeout 3 Cmdkey /delete:TERMSRV/%SERVER% kido.batを起動するマクロは下記 Sub RunBatShell() Dim dProcessId As Double Dim sPath sPath = "C:\Users\ID\Desktop\kido.bat" dProcessId = Shell(sPath) End Sub 上記バッチ内容もマクロに記述出来たら1本化したく。

  • 複数のエクセルデータ上特定位置の値を一つのセルに2

    前回の質問「複数のエクセルデータ上特定位置の値を一つのセルに」に対し、ベストアンサーを教えていただきました。その質問とご回答のポイントは次の通りです。 質問: 大量の同じフォーマットのエクセルファイル(Book1,Book2...)があり、それぞれのBookファイルの「NO.」シートのD6セルには番号が入っています。それぞれファイルでSheet1の特定のセル(例えばB4セル)の値を「データ」ファイルのSeet1にまとめたいです。「データ」ファイルのA列には「NO.」が入力されているので、Bookファイルの値はそれぞれ対応する番号の右側3番目のセルに移したいです。 ご回答: sub macro1()  dim myPath as string  dim myFile as string  dim myNo as variant  dim myRng as range  on error resume next  application.screenupdating = false  mypath = "c:\test\" ’book1,2,3…の保存場所を指定する事  myfile = dir(mypath & "*.xlsx") ’拡張子を正しく指定すること  do until myfile = ""   workbooks.open mypath & myfile   myno = workbooks(myfile).worksheets("No.").range("D6").value   set myrng = thisworkbook.worksheets("Sheet1").range("A:A").find(what:=myno, lookin:=xlvalues, lookat:=xlwhole)   myrng.offset(0, 3).value = workbooks(myfile).worksheets("Sheet1").range("B4").value   workbooks(myfile).close savechanges:=false   myfile = dir()  loop  application.screenupdating = true end sub 現在Excel2007を使っており、Bookファイルが全部(.xlsx)の状態では問題なく使えましたが、ファイルが97-2003の(.xls)バージョンになると、マクロを実行したときに次のメッセージが出ます。「データ.xlsmは既に開いています。2重に開くと、これまでの変更内容は破棄されます。データ.xlsmを開きますか?」 もちろんご回答の中の「myfile = dir(mypath & "*.xlsx") ’拡張子を正しく指定すること」は("*.xls")に変更されている状態です。 何が問題なのか全く分からず、困っています。どなたか教えていただけないでしょうか? よろしくお願い致します。

  • Excel 2010 VBA:ファイル名を読み込む

    下は複数のcsvファイルを一つに合体するVBAです。これにシートの右端に読み取ったファイル名を追加するにはどうしたらよいでしょうか。 よろしくお願いします。 Sub macro1() Dim myPath As String Dim myFile As String Dim s As String myPath = ThisWorkbook.Path & "\" On Error Resume Next Kill myPath & "合体版.csv" On Error GoTo 0 myFile = Dir(myPath & "*.csv") If myFile = "" Then Exit Sub Open myPath & "合体版.csv" For Output As #1 Do Until myFile = "" Open myPath & myFile For Input As #2 Do Until EOF(2) Line Input #2, s Print #1, s Loop Close #2 myFile = Dir() Loop Close #1 End Sub

  • ExecuteExcel4Macroを使って他のブックを開かずにセルを

    ExecuteExcel4Macroを使って他のブックを開かずにセルを参照しているのですが、worksheet(1)という記述を使いたいのですがどうすればよいでしょうか? Target1 = "'" & Path & "[" & buf & "]sheet1'!R75C3" 上記だとsheet1という名前でなかったらエラーが出てしまうので・・・。

専門家に質問してみよう