「商品別部品一覧表」という元ブックがあります。
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関係が強い方がおらず、私一人がデータ入力の効率化を任されてしまった為
どのようにすればよいのかわかりません。
大変初歩的な質問で申し訳ないのですが、どなたかごご指導いただけないでしょうか?
No.3ベストアンサー
- 回答日時:
以下のマクロを標準モジュールに登録してください。
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
マクロの作成ありがとうございます。
fname = ThisWorkbook.Path & "\" & "リスト.xlsx"
上記の所でコンパイルエラーが出てしまいました。
修正候補 ステートメントの最後
との表示があります。
どういったエラーなのか分からないのですが
修正は可能でしょうか?
No.6
- 回答日時:
No5です。
誤記訂正します。
誤 C:\Users\xxxxxx\Desktop\.xlsx
正 C:\Users\xxxxxx\Desktop\リスト.xlsx
というファイル名をfnameに格納しています。
No.5
- 回答日時:
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に格納しています。
ご回答ありがとうございます。
Dictionaryオブジェクトは一度チェックしましたが理解できないままだったので今回のマクロを使いながら勉強していきたいと思います。
ファイルを開く構文もエラーになりやすかったので、今後は今回のマクロを元に作成したいと思います。
ありがとうございました。
No.4
- 回答日時:
>どういったエラーなのか分からないのですが
>修正は可能でしょうか?
すみません。こちらでは、エラーになっていません。
考えられるのは、
コピペでなく、この行を手打ちで打ち込んだのでしょうか。
もしそうであれば、打ち間違いの可能性があります。
また、私が、提示したマクロにあなたがなにか他の行を追加(もしくは変更等)していて、
実際のマクロが提示した内容と違っていることはないでしょうか。
その影響で、エラーが発生しているのかも知れません。
コピペではなく全て手打ちで入力していました。
エラーが発生した行をコピペしたら上手く作動いたしました。
大変失礼致しました。
このような素晴らしいマクロを作成して頂きありがとうございます。
今後の為にも1点質問させて頂きたのですが、
Set dicT = CreateObject("Scripting.Dictionary")
fname = ThisWorkbook.Path & "\" & "リスト.xlsx"
上記2行はどのような意味になるのでしょうか?
ご回答いただけるとありがたいです。
No.2
- 回答日時:
補足要求の追加です。
5.「リスト」ブックは、「商品別部品一覧表」ブックと同じフォルダ内にありますか。
6.マクロ実行後に
「商品別部品一覧表」のB列は、
モーター
電線
になれば良いのですか。
それとも
モーター(200V)
電線(2sq)
になれば良いですか。どちらでしょうか。
7.「商品別部品一覧表」のコードが「リスト」に存在しない場合、
B列にはなにを設定すれば良いのでしょうか。
コメントありがとうございます。
質問内容の方に補足させて頂きました。
ご面倒をおかけいたしますが、ご指導のほどよろしくお願いします。
No.1
- 回答日時:
補足要求です。
1.マクロがあるのは、商品別部品一覧表の元ブックでしょうか。
2.商品別部品一覧表のシート名はなんでしょうか。
3.「リスト」ブックの拡張子は何でしょうか。(.xlsxですか)
4.「リスト」ブックのシート名は「リスト」であってますか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) VBA でvlookup エラーなどは削除したい 8 2022/12/30 04:03
- Visual Basic(VBA) VBA 税率を判定表する方法を教えて下さい。 10 2022/03/28 11:21
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBA シート間の転記で、条件の追加コードの書き方について教えて下さい。 13 2023/02/26 09:31
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
Exel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について
Visual Basic(VBA)
-
エクセルVBA→他ブックを参照して、条件に一致したシート名をセルに記入したい。 VBAの難しさに悶え
Visual Basic(VBA)
-
VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。
Visual Basic(VBA)
-
-
4
エクセル vba ある検索値を別ブックから参照し一致したすべての行で特定の列の値を返す
Visual Basic(VBA)
-
5
【VBA】2つのシートの値を比較して条件一致したら、同じ行の隣の値を別ブックへ転記したいです。 VB
Visual Basic(VBA)
-
6
VBAで別ブックの列を検索し、該当があれば行ごと新規ブックにコピーしたい。
Excel(エクセル)
-
7
EXCEL VBA Dictionaryで複数の値を格納→離れた位置に出力する方法
Excel(エクセル)
-
8
【VBA】指定した検索条件に一致したら別シートに転記したい
Visual Basic(VBA)
-
9
エクセルで複数列の検索をマクロで行いたい
Excel(エクセル)
-
10
外部データ参照
Visual Basic(VBA)
-
11
VBA Scripting.Dictionary 連想配列 複数参照する方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで空白行を削除する ...
-
マクロで最終行を取得してコピ...
-
【VBA】条件に一致しない行を削...
-
マクロにて指定の文字間の文字...
-
VBAでの重複データに色付け
-
【VBA】条件に一致しない行を削...
-
Access2003レポート:最終ペー...
-
VB.net
-
エクセルのデータがない行には...
-
列から特定の文字列検索→該当以...
-
EXCEL VBAでA列にある空白行よ...
-
【至急】Excel 同一人物の情報...
-
エクセルマクロでグループごと...
-
条件に合った行を削除するマク...
-
EXCEL2007マクロ/オートフィル...
-
数値に見えるものはすべて数値...
-
Excel97 指定した行だけマク...
-
Excel VBAでオートフィルタで抽...
-
VBでスプレッドをしようする際...
-
Excel VBA オートフィルタの結...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで空白行を削除する ...
-
数値に見えるものはすべて数値...
-
エクセルのデータがない行には...
-
マクロで最終行を取得してコピ...
-
【VBA】条件に一致しない行を削...
-
【VBA】条件に一致しない行を削...
-
エクセルのVBAで指定した行数の...
-
VB.net
-
Excel VBAでオートフィルタで抽...
-
マクロにて指定の文字間の文字...
-
Excel97 指定した行だけマク...
-
EXCEL VBAでA列にある空白行よ...
-
excel2021で実行できないマクロ...
-
Excel 別ブックから該当データ...
-
VBAでの重複データに色付け
-
Excel VBA オートフィルタの結...
-
エクセルで階層図を作る方法
-
VBAで特定の行と一つ上の行を削...
-
【至急】Excel 同一人物の情報...
-
Excelで、マウスで範囲を選択し...
おすすめ情報
情報不足で申し訳ございません。
補足させて頂きます。
1. マクロは元ブックにあります。
2. 「商品別部品一覧表」のシート名は「商品名」となります。
3. 別ブック「リスト」はExcelです。(.xlsx)となります。
4. 「リスト」のシート名は「リスト」です。
5. ブックは両方ともデスクトップにあるものとします。
6. マクロ実行後、「商品別部品一覧表」のB列は「リスト」のB列の通り モーター(200V) 電線(2sq)になれば良いです。
7. 「商品別部品一覧表」のコードが「リスト」に存在しない場合、「商品別部品一覧表」のB列には存在しなかったという事が分かるように【*】などの記号や【FALSE】の文字など何かしらが入れば良いです。
大変お手数をおかけしますが、よろしくお願い致します。