以下のコードは以前質問させていただいたものになります
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の使い方
-
エクセルVBAでEdate関数は使え...
-
「特になし」を英語で書くとき
-
イェイイェイイェイ イェイイェ...
-
knowledge on, about, of
-
There is no hope that he will...
-
No と Not の違いを教えてください
-
no+比較級について
-
It’s a no slide zone の意味わ...
-
Put the words in the correct ...
-
ain't no ~を教えてください。
-
ポリウレタン繊維について教え...
-
no/any+比較級なのですが、 ...
-
英語で「お久しぶり」は何とい...
-
複数の修飾を受ける名詞を否定...
-
but が、「~以外」…と使う時は?
-
hell hath no fury
-
VBA Scripting.Dictionary 連想...
-
英語が得意な方、日本語に訳し...
-
NO WAR NO ABE
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
for whichの使い方
-
エクセルVBAでEdate関数は使え...
-
誰か教えてください
-
There is not/ There is noの違い
-
次の並び替え問題を教えてくだ...
-
no other~について
-
「特になし」を英語で書くとき
-
there is no way to do/of doin...
-
knowledge on, about, of
-
英語で「もう2~3日待ってくだ...
-
UNI EN ISO 14001
-
no appleとno applesの違いは?
-
英語ができる方、問題をお願い...
-
changeとexchangeのちがい
-
イェイイェイイェイ イェイイェ...
-
この英文の訳し方がわかりませ...
-
I don't knowを I don't no と...
-
VBA Scripting.Dictionary 連想...
-
no + 名詞 は、単数?複数?
-
戦争反対を英語で?
おすすめ情報