ここから本文です

VBAで別のブックのセルを参照するサンプルください。 book1のセル(3,4)とセル(3...

gog********さん

2017/6/2012:57:24

VBAで別のブックのセルを参照するサンプルください。
book1のセル(3,4)とセル(3,5)に月と日があり、book2の2列目にユーザ定義でm/dがあります。

book1のセル(3,4)とセル(3,5)を参照しbook1の(4,4)にbook2の該当する行の5列目を入れるサンプルです。
book2
6/1 500,000 1,,000,000 3,000
6/2 1,000 35,000 2,999
6/3 3,333 2,222 400
でbook1のセル(3,4)とセル(3,5)が6と2であればbook1の(4,4)に2,999が入るようにしたいです。
マクロでやる方法とVBAでやる方法両方できればお願いしたいです。

閲覧数:
91
回答数:
1
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

Prometheusさん

2017/6/2013:30:04

「book1」上で、マクロを実行しているとします。

Sub Sample()
Dim b2 As Workbook
Dim s1 As Worksheet, s2 As Worksheet
Dim d As String
Dim f As Object
Set b2 = Workbooks.Open("D:\Programming\Book2.xlsx")
Set s1 = ThisWorkbook.Worksheets(1)
Set s2 = b2.Worksheets(1)
d = s1.Range("D3").Value & "/" & s1.Range("E3").Value
Set f = s2.Range("B:B").Find(What:=d, LookAt:=xlWhole)
If Not (f Is Nothing) Then
s2.Cells(f.Row, 5).Copy s1.Range("D4")
End If
b2.Close
Set s2 = Nothing
Set b2 = Nothing
End Sub

簡単な説明です。

Set b2 = Workbooks.Open("D:\Programming\Book2.xlsx")

まず、「Book2.xlsx」ファイルを開いています。

Set s1 = ThisWorkbook.Worksheets(1)

自分自身の一番左端のシートを「s1」にセット。

これで、「s1.Range()」と記述すれば、「自分自身の一番左端のシートのセル~」と言っているのとおなじです。

Set s2 = b2.Worksheets(1)

「Book2」の一番左端のシートを「s2」にセット。

d = s1.Range("D3").Value & "/" & s1.Range("E3").Value

「Book1」のセル「D3」とセル「E3」の値を、「/」でつなげています。

結果として、「6/2」が「d」に入ります。

Set f = s2.Range("B:B").Find(What:=d, LookAt:=xlWhole)

「Book2」の列「B」限定で、「6/2」を「完全一致」で検索します。

If Not (f Is Nothing) Then

もし、見つかったら、

s2.Cells(f.Row, 5).Copy s1.Range("D4")

私は、「s1.Range("D4").Value = s2.Cells(f.Row, 5).Value」というように、直接「値」を書き込む方が好きなのですが、今回は、「,」が消えてしまうので、書式ごと書き込むために、「コピー&ペースト」を使いました。

もし、「値」を書き込むだけでいいのでしたら、「コピー」を使わず、

s1.Range("D4").Value = s2.Cells(f.Row, 5).Value

にしてください(メモリの消費も少ないですし、速いみたいです)。

「f.Row」は、見つかった場合のさまざまな情報が「Set f」の「f」に入っています。

見つかったセルの値なら「f.Value」で、取り出せます。

今回は、見つかったセルの「行」が何行目か知りたいので、「f.Row」としています。

見つかったセルの列「E」の値を、「Book1」のセル「D4」に書き込んでいます。

質問した人からのコメント

2017/6/20 17:39:31

ありがとうございます!

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる