dポイントプレゼントキャンペーン実施中!

AブックのアクティブシートのC列に果物の名前が有り(果物名に重複無し)

Bブックには100シート程(今後増えていく)の各C列に果物の名前有り(果物名に重複無し)、D列に値段が記載

教えていただきたいのは
AブックのD列にBブックの該当する果物の値段を貼り付けたいのですが
検索で引っかかった場合その果物は検索を止め、該当しなかった果物は該当なし記載となる
VBAを作りたいのですが難しく困難でした。

どうぞコードを教えていただきたいです。

また可能であればAブックのアクティブシート上の特定セル2箇所に50や100と入力すると
Bブック参照時にシート50~100となるような作りに出来たらお願いいたします。

質問者からの補足コメント

  • tatsumaru77様

    >1.Aブックのアクティブシートの1行目は見出しで、実際のデータは2行目から開始しているのでしょうか。それとも、いきなり1行目からデータが開始しているのでしょうか。(添付図は1行目が見出しの例です)
    1行目は空欄、2行目は見出し、3行目からになっております

    >2.同様にBブックのシート1~100の1行目は見出しでしょうか。
    4行目見出し、5行目からになっております

    >3.Aブックのアクティブシート上の特定セル2箇所は、F2とG2のセルで良いですか。もし、指定があるならそのセルを提示してください。
    (添付図の黄色のセルです)
    F2.G2で大丈夫です お願いいたします

    >4.Bブックのシート1~100ですが、
    一番左側のシートをシート1、その右隣をシート2、。。。以降同様
    にしますがそれでよいですか。
    大丈夫ですお願いいたします

    どうぞ宜しくお願いいたします

      補足日時:2021/12/09 12:36
  • めぐみん_様
    >とはシート名ですか?
    シートIndexNoですか?
    シート名は年と月の記載の為 オブジェクト名になります

    >あ、あと重複なしはシート内に限りますか?
    それともブック内で重複する(今後も)事はなしですか?
    ブック内でも重複はありません

    どうぞ宜しくお願いいたします

      補足日時:2021/12/09 12:37

A 回答 (4件)

以下のマクロをAブックの標準モジュールに登録してください。


Bブックはオープンした状態でマクロを実行してください。
Bブックのブック名はB.xlsxです。実際の名称が異なる場合は適切に変更してください。(2か所あります)

Option Explicit
Public Sub 値段設定()
Dim dicT As Object
Dim ws As Worksheet
Dim ts As Worksheet
Dim maxrow As Long
Dim wrow As Long
Dim st_no As Long
Dim en_no As Long
Dim sheet_no As Long
Dim max_sheet_no As Long
Dim err As Boolean
Set dicT = CreateObject("Scripting.Dictionary") ' 連想配列の定義
max_sheet_no = Workbooks("B.xlsx").Worksheets.count
Set ws = ActiveSheet
st_no = ws.Range("F2").Value
en_no = ws.Range("G2").Value
If st_no < 1 Or st_no > max_sheet_no Then err = True
If en_no < 1 Or en_no > max_sheet_no Then err = True
If st_no > en_no Then err = True
If err = True Then
MsgBox ("開始番号または終了番号が誤っています")
Exit Sub
End If
For sheet_no = st_no To en_no
Set ts = Workbooks("B.xlsx").Worksheets(sheet_no)
maxrow = ts.Cells(Rows.count, "C").End(xlUp).Row
For wrow = 5 To maxrow
dicT(ts.Cells(wrow, "C").Value) = ts.Cells(wrow, "D").Value
Next
Next
maxrow = ws.Cells(Rows.count, "C").End(xlUp).Row
For wrow = 3 To maxrow
If dicT.exists(ws.Cells(wrow, "C").Value) = True Then
ws.Cells(wrow, "D").Value = dicT(ws.Cells(wrow, "C").Value)
Else
ws.Cells(wrow, "D").Value = "該当なし"
End If
Next
MsgBox ("完了")
End Sub
    • good
    • 0
この回答へのお礼

希望通りに動きました
ありがとうございます!

お礼日時:2021/12/09 23:20

あ、あと重複なしはシート内に限りますか?


それともブック内で重複する(今後も)事はなしですか?
    • good
    • 0

>シート50~100


とはシート名ですか?
シートIndexNoですか?
    • good
    • 0

補足要求です。


1.Aブックのアクティブシートの1行目は見出しで、実際のデータは2行目から開始しているのでしょうか。それとも、いきなり1行目からデータが開始しているのでしょうか。(添付図は1行目が見出しの例です)

2.同様にBブックのシート1~100の1行目は見出しでしょうか。

3.Aブックのアクティブシート上の特定セル2箇所は、F2とG2のセルで良いですか。もし、指定があるならそのセルを提示してください。
(添付図の黄色のセルです)

4.Bブックのシート1~100ですが、
一番左側のシートをシート1、その右隣をシート2、。。。以降同様
にしますがそれでよいですか。
「エクセルで別ブックの複数シートを参照VB」の回答画像1
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!