プロが教える店舗&オフィスのセキュリティ対策術

「商品別部品一覧表」という元ブックがあります。
A列:コード B列:部品名 が入力されています。
(C列以降も入力がありますが今回は関係ないので省略します。)
    A列    B列
2行目 コード   部品名
    12345678  モーター
    87654321  電線

「リスト」という別ブックがあり、A列:コード B列:商品名 が入力されています。
    A列    B列
4行目 コード   商品名
    12345678  モーター(200V)
    87654321  電線(2sq)

やりたいことは「リスト」のコードから「商品別部品一覧表」のコードと一致するコードを検索し、
該当「リスト」のコードと同行にある商品名を「商品別部品一覧表」の部品名への転記です。


Sub データ検索転記()
Dim I As Long
Dim xlBook
Set xlBook = Workbooks.Open("リスト")
I = 5
Do While Range("A" & I).Value <> ""
ThisWorkbook.Worksheets("リスト").Range("A" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("リスト").Range("A" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
I = I + 1
Loop
xlBook.Close
MsgBox ("完了")
End Sub

上記のように他のサイトに記載されていたものを自分で訳して変更しつつやってみましたが解釈が名違っているのか上手くいきません。
社内にExcel関係が強い方がおらず、私一人がデータ入力の効率化を任されてしまった為
どのようにすればよいのかわかりません。
大変初歩的な質問で申し訳ないのですが、どなたかごご指導いただけないでしょうか?

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

  • 情報不足で申し訳ございません。
    補足させて頂きます。
    1. マクロは元ブックにあります。
    2. 「商品別部品一覧表」のシート名は「商品名」となります。
    3. 別ブック「リスト」はExcelです。(.xlsx)となります。
    4. 「リスト」のシート名は「リスト」です。
    5. ブックは両方ともデスクトップにあるものとします。
    6. マクロ実行後、「商品別部品一覧表」のB列は「リスト」のB列の通り モーター(200V) 電線(2sq)になれば良いです。
    7. 「商品別部品一覧表」のコードが「リスト」に存在しない場合、「商品別部品一覧表」のB列には存在しなかったという事が分かるように【*】などの記号や【FALSE】の文字など何かしらが入れば良いです。

    大変お手数をおかけしますが、よろしくお願い致します。

      補足日時:2021/06/24 09:16

A 回答 (6件)

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



Option Explicit

Sub データ検索転記()
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim wrow As Long
Dim dicT As Object
Dim xlBook As Workbook
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim key As Variant
Dim fname As String
Set dicT = CreateObject("Scripting.Dictionary")
fname = ThisWorkbook.Path & "\" & "リスト.xlsx"
Set xlBook = Workbooks.Open(fname)
Set ws1 = xlBook.Worksheets("リスト")
maxrow1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row '最大行取得
For wrow = 5 To maxrow1
key = ws1.Cells(wrow, "A").Value
dicT(key) = ws1.Cells(wrow, "B").Value
Next
Set ws2 = ThisWorkbook.Worksheets("商品名")
maxrow2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row '最大行取得
For wrow = 3 To maxrow2
key = ws2.Cells(wrow, "A").Value
If dicT.exists(key) = True Then
ws2.Cells(wrow, "B").Value = dicT(key)
Else
ws2.Cells(wrow, "B").Value = False
End If
Next
xlBook.Close
MsgBox ("完了")
End Sub
    • good
    • 1
この回答へのお礼

マクロの作成ありがとうございます。

fname = ThisWorkbook.Path & "\" & "リスト.xlsx"

上記の所でコンパイルエラーが出てしまいました。
修正候補 ステートメントの最後
との表示があります。

どういったエラーなのか分からないのですが
修正は可能でしょうか?

お礼日時:2021/06/24 13:08

No5です。


誤記訂正します。
誤 C:\Users\xxxxxx\Desktop\.xlsx
正 C:\Users\xxxxxx\Desktop\リスト.xlsx

というファイル名をfnameに格納しています。
    • good
    • 1

Set dicT = CreateObject("Scripting.Dictionary")


これは、Dictionaryオブジェクト(連想配列)を作成しています。
Dictionaryオブジェクトについては、下記URLを参照ください。
https://www.sejuku.net/blog/29736
https://hirachin.com/post-3000/
Dictionaryオブジェクトは覚えておくとかなり有効な武器になります。
ぜひ、マスターしてください。


fname = ThisWorkbook.Path & "\" & "リスト.xlsx"
フルパスのファイル名を作成しています。
ファイルのオープンはフルパスでないとエラーが発生するケースが多々ありますので、フルパスで指定するようにしてください。

ThisWorkbook.Pathがマクロのあるファイルの格納フォルダになります。
今回はデスクトップ上にあるので
C:\Users\xxxxxx\Desktop
のような値になるはずです。(xxxxxxはあなたのユーザー名)
これに \ と リスト.xlsxをつけて
C:\Users\xxxxxx\Desktop\.xlsx
というファイル名をfnameに格納しています。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
Dictionaryオブジェクトは一度チェックしましたが理解できないままだったので今回のマクロを使いながら勉強していきたいと思います。

ファイルを開く構文もエラーになりやすかったので、今後は今回のマクロを元に作成したいと思います。

ありがとうございました。

お礼日時:2021/06/24 14:33

>どういったエラーなのか分からないのですが


>修正は可能でしょうか?

すみません。こちらでは、エラーになっていません。

考えられるのは、
コピペでなく、この行を手打ちで打ち込んだのでしょうか。
もしそうであれば、打ち間違いの可能性があります。

また、私が、提示したマクロにあなたがなにか他の行を追加(もしくは変更等)していて、
実際のマクロが提示した内容と違っていることはないでしょうか。
その影響で、エラーが発生しているのかも知れません。
    • good
    • 1
この回答へのお礼

コピペではなく全て手打ちで入力していました。
エラーが発生した行をコピペしたら上手く作動いたしました。
大変失礼致しました。

このような素晴らしいマクロを作成して頂きありがとうございます。

今後の為にも1点質問させて頂きたのですが、

Set dicT = CreateObject("Scripting.Dictionary")
fname = ThisWorkbook.Path & "\" & "リスト.xlsx"

上記2行はどのような意味になるのでしょうか?

ご回答いただけるとありがたいです。

お礼日時:2021/06/24 14:01

補足要求の追加です。


5.「リスト」ブックは、「商品別部品一覧表」ブックと同じフォルダ内にありますか。

6.マクロ実行後に
「商品別部品一覧表」のB列は、
モーター
電線
になれば良いのですか。
それとも
モーター(200V)
電線(2sq)
になれば良いですか。どちらでしょうか。

7.「商品別部品一覧表」のコードが「リスト」に存在しない場合、
B列にはなにを設定すれば良いのでしょうか。
    • good
    • 1
この回答へのお礼

コメントありがとうございます。
質問内容の方に補足させて頂きました。
ご面倒をおかけいたしますが、ご指導のほどよろしくお願いします。

お礼日時:2021/06/24 09:17

補足要求です。


1.マクロがあるのは、商品別部品一覧表の元ブックでしょうか。
2.商品別部品一覧表のシート名はなんでしょうか。
3.「リスト」ブックの拡張子は何でしょうか。(.xlsxですか)
4.「リスト」ブックのシート名は「リスト」であってますか。
    • good
    • 1

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

このQ&Aを見た人はこんなQ&Aも見ています