以下のコードは以前質問させていただいたものになります
https://oshiete.goo.ne.jp/qa/12707381.html
以下要約
AブックのC列に果物名前(果物名に重複無し)
Bブックの各シートC列に果物名前(ブック上果物名に重複無し)、D列に値段が記載
AブックのD列にBブックの該当する果物値段を貼り付け
検索で引っかかった場合その果物は検索を止め、該当しなかった果物は該当なし記載となる
Aブックの特定セル2箇所(F2,G2)に50や100と入力すると
Bブックのシート50~100を参照しにいきます
質問
Bブックの各シートI列に生産国、K列にコメントが記載されており、
AブックのH列に生産国、J列にコメントを反映させ、
該当しなかったセルには同様に該当なし記載となるよう以下のコードに追加できますでしょうか
よろしくお願いいたします。
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
No.2ベストアンサー
- 回答日時:
前回回答者です。
#1様のアドバイスに従い、改造してみました。又、エラーメッセージに最大終了番号を表示するように修正しました。
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 ("開始番号または終了番号が誤っています。最大終了番号=" & max_sheet_no)
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) = Array(ts.Cells(wrow, "D").Value, ts.Cells(wrow, "I").Value, ts.Cells(wrow, "K").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)(0)
ws.Cells(wrow, "H").Value = dicT(ws.Cells(wrow, "C").Value)(1)
ws.Cells(wrow, "J").Value = dicT(ws.Cells(wrow, "C").Value)(2)
Else
ws.Cells(wrow, "D").Value = "該当なし"
End If
Next
MsgBox ("完了")
End Sub
tatsumaru77様
この度もありがとうございます。
希望通り動作することができました!
めぐみん_様もありがとうございます。
No.1
- 回答日時:
直接の回答ではないですが、
>VBA Scripting.Dictionary 連想配列 複数参照する方法
としてはItem側を配列にすれば宜しいのでは?
Dictionaryオブジェクト変数名.Add キー値, Array(セル1値, セル2値, セル3値)
で追加していって
書き出す際には0スタートである事を間違えず)
= Dictionaryオブジェクト変数名(キー値)(ItemのインデックスNo) 'セル1値ならインデックスNoは 0
どのセルを追加していきたいのか、どこのセルにどの配列の値を入れたいのかで出来るのではないかなと。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Excel(エクセル) 【マクロ】【VBA】同じフォルダ内にあるエクセルのデータを転記したい【ブック1からブック2へ】 9 2023/08/10 07:51
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) マクロで最終行を取得したい 4 2023/05/28 12:14
- Visual Basic(VBA) VBAで、シート間の転記するコードをFOR~NEXTで教えてください。 9 2023/04/30 20:04
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
for whichの使い方
-
no appleとno applesの違いは?
-
誰か教えてください
-
次の並び替え問題を教えてくだ...
-
エクセルVBAでEdate関数は使え...
-
英語ができる方、問題をお願い...
-
少し長いですけど、英訳お願い...
-
「ザクとは違うのだよザクとは...
-
There is not/ There is noの違い
-
no+名詞の時、名詞は単数形でも...
-
no + 名詞 は、単数?複数?
-
イェイイェイイェイ イェイイェ...
-
戦争反対を英語で?
-
この英文の訳し方がわかりませ...
-
There is no evidence that peo...
-
NO WAR NO ABE
-
Access:クエリーにて集計後に...
-
1、Rstudioで回帰直線を求める...
-
カーソル宣言をIFで分けられま...
-
複数テーブルのGROUP BY の使い...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
for whichの使い方
-
前置可能な語句を含む複数の修...
-
エクセルVBAでEdate関数は使え...
-
誰か教えてください
-
「特になし」を英語で書くとき
-
英語ができる方、問題をお願い...
-
イェイイェイイェイ イェイイェ...
-
no other~について
-
knowledge on, about, of
-
There is not/ There is noの違い
-
there is no way to do/of doin...
-
次の並び替え問題を教えてくだ...
-
no appleとno applesの違いは?
-
changeとexchangeのちがい
-
英語で「もう2~3日待ってくだ...
-
noの後の語
-
no + 名詞 は、単数?複数?
-
a basic rule of medical scien...
-
Do you have no money?⇒Y/N
-
UNI EN ISO 14001
おすすめ情報