
以下のコードは以前質問させていただいたものになります
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 pain , no gain
-
「別れのない国で住みたい」を...
-
エクセルVBAでEdate関数は使え...
-
翻訳お願いします。日→英
-
これの答えが、 It is importan...
-
添付画像の英文メールに返信し...
-
noの用法について
-
Macにてクイックタイムでの...
-
far but no further
-
This video is no longer avail...
-
Whenの意味合いを教えてください
-
日本語訳お願いいたします。
-
構文について
-
翻訳お願いします
-
no matter what
-
「scenery+関係代名詞」の場合...
-
とある高校英文法についてお伺...
-
At no time in my life have I ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
for whichの使い方
-
誰か教えてください
-
「特になし」を英語で書くとき
-
knowledge on, about, of
-
イェイイェイイェイ イェイイェ...
-
no appleとno applesの違いは?
-
エクセルVBAでEdate関数は使え...
-
英語ができる方、問題をお願い...
-
there is no way to do/of doin...
-
There is not/ There is noの違い
-
no other~について
-
UNI EN ISO 14001
-
no signal
-
NO WAR NO ABE
-
次の並び替え問題を教えてくだ...
-
No problem.とNo wonder.とNo d...
-
dorega tadasii deshouka.
-
英語で「もう2~3日待ってくだ...
-
英文を訳して下さい。
-
I don't knowを I don't no と...
おすすめ情報