- ベストアンサー
Excelで他Excelファイルのセルの値をVBAで参照したい時
こんにちは。 Excelで他Excelファイルにあるセルの値をVBAで参照したい時って、 場所をどう指定したらいいのでしょうか。 やろうとしている事ですが、 c:\1.xlsに記述するVBAで c:\2.xlsのsheet1のA1の値を参照して、 それとc1.xlsのsheet1のA1の値が一致した時に、 c:\2.xlsのsheet1のB1の値を、 C:\1.xlsのsheet1のB1に書き出そうとしています。 派遣就業先でAccessで作ればいいものを なぜか社員の方たちでExcelで作ってしまったため、 そのメンテに四苦八苦しています。(笑) ご存知の方ぜひ教えてください。 よろしくお願いします!
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
なんか質問の内容は「例えば」の例で実際のシートとは異なるように感じます。サンプルマクロの修正が必要そうですが… とりあえずオーソドックスに"2.xls"を開く方法でやってみます。 以下のマクロをALT+F11でVBE画面を開き、左上のVBAProjectの「ブック名右クリック」→「挿入」→「標準モジュール」で開く画面に貼り付けてください。ファイルパス、ファイル名、シート名は場合によって修正して下さい VBE画面を閉じ、1.xlsのSheet1を開いた状態で、マクロの実行はALT+F8でマクロ一覧を開き、マクロ名選択後「実行」です Sub Macro1() Dim actBk, wb As Workbook Dim psw As Boolean Const fPath As String = "C:\Temp\" 'ファイルのパス Const fName As String = "2.xls" '探すファイル名 Const tSheet As String = "Sheet1" '探すシート名 Application.ScreenUpdating = False Set actBk = ThisWorkbook For Each wb In Workbooks '探すBookがすでに開いているか? If wb.Name = fName Then psw = True Exit For End If Next wb If psw = False Then '開いていないなら開く On Error GoTo Err0 Workbooks.Open (fPath & fName) End If actBk.Activate If Range("A1").Value = Workbooks(fName).Sheets(tSheet).Range("A1").Value Then Range("B1").Value = Workbooks(fName).Sheets(tSheet).Range("B1").Value Else Range("B1").Value = "一致しません" End If If psw = False Then Workbooks(fName).Close False End If Application.ScreenUpdating = True Exit Sub Err0: MsgBox Error Application.ScreenUpdating = True End Sub
その他の回答 (2)
- zap35
- ベストアンサー率44% (1383/3079)
#01です。 >Range(i,3)とかにして その書き方はエラーになります。その場合は Cells(i, 3) になりますのでご注意下さい。
お礼
その通りですね。(笑) お礼を書き込んでから打ち間違えに気付いたのですが、 再度お礼を書き込めない感じになっていました。 派遣就業先のグループ内の人間関係が変で、 お膳立てして業務をそれぞれに割り振るため、 とっても苦労しています。 ありがとうございます。(てか本気で代わって欲しいです~)
補足
#01で頂いた Set actBk = ThisWorkbookの辺りも全然踏まえていませんでした。 (私には想定出来ないから疑問にもなっていなかった・・・) 本当にありがとうございます。 足向けて寝られない感じです。
- hana-hana3
- ベストアンサー率31% (4940/15541)
どの程度の事がやりたいのかはっきりしませんが、書かれた通りの単なるセルのチェックだけならVBAを使わなくても式だけで可能かも知れませんね。 2つのブックを開いて、セルにIF文などの記述すれば終わるのでは?
お礼
ありがとうございます。 私だけで作業が完結するならそれがいいのですが、 ここで言うc:\1.xlsのマクロの運用を別の方がやるので、 (別の方はボタンを押してマクロを実行するだけだと思っている) VBAとして作らなければならないようです。 私の説明が足りずすみません。
お礼
すばやい回答ありがとうございます。 てか私と代わってください。(時給安いですが・笑) おっしゃる通りで欲しい回答に合わせて私が例にしてしまっていて、 後の部分は何とか先人の質問回答履歴などを踏まえて 自分でも作り込みました。 知りたかった部分って、 Workbooks(fName).Sheets(tSheet).Range("A1").Value の所だと思います。 Range("A1")の部分は、 Range(i,3)とかにして、 for nextでループでiの部分をまわそうと思っています。 これからやってみようと思います。ありがとうございます。