- 締切済み
vbaでvlookup
vbaプログラムについて どなたかお願いします。 vbaで,vlookup関数を作成したいのですが・・・ ファイル1にコード番号、JANコード、商品名、重量の データがs hee t1~ 3まであります。 ファイル2にコード番号があります。 ファイル1からJANコード、商品名、重量を ファイル2に持ってくるにはどうしたらよいのでしょうか? もし、よろしければプログラムを教えていただけ ないでしょうか? 具体的には、 (ファイル1)s hee tがたくさんあります。 コード番号 J AN 商品名 重量 1 10 00 りんご 1 0 2 10 01 みかん 2 0 3 10 02 ぶどう 1 0 : : : : i i i i (ファイル2) コード番号 J AN 商品名 重量 3 空白 空白 空白 8 空白 空白 空白 1 空白 空白 空白 5 空白 空白 空白 : : : : i i i i この空白にファイル1のデータを移したいです。 よろしくお願い致します
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ki-aaa
- ベストアンサー率49% (105/213)
こんにちわ いくつか前提があります。 このマクロは、ファイル1に書いてあります。 ファイル1には、コード番号 J AN 商品名 重量 だけしかない事 データは2行目から シート数はいくつあってもかまいません。 データの中に、スラッシュ"/"が無いこと。"/"をプログラムで使用しています。 コード番号が8桁以上の数字のみだと、 実行が遅くなるのでプログラムの変更が必要になります。 ファイル2のシート名は、"Sheet1"です。 Option Explicit Sub test() Dim ファイル1_dec As Object 'Scripting.Dictionary Dim i As Long, j As Long, n As Long Dim ファイル1ABCD列配列 As Variant Dim ファイル2ABCD列配列 As Variant Dim 配列 Dim ws1 As Worksheet Dim ws2 As Worksheet Dim wb2 As Workbook On Error Resume Next Set wb2 = Workbooks("ファイル2.xls") If Err.Number > 0 Then MsgBox "ファイル2.xlsが開かれていません" Exit Sub End If On Error GoTo 0 Set ファイル1_dec = CreateObject("Scripting.Dictionary") 'New Dictionary ThisWorkbook.Activate For Each ws1 In ThisWorkbook.Worksheets ファイル1ABCD列配列 = ws1.Range("A2", ws1.Cells(Rows.Count, 1).End(xlUp)).Resize(, 4).Value For i = 1 To UBound(ファイル1ABCD列配列) If Not ファイル1_dec.exists(ファイル1ABCD列配列(i, 1)) Then '初出なら ファイル1_dec.Add ファイル1ABCD列配列(i, 1), _ ファイル1ABCD列配列(i, 2) & "/" & _ ファイル1ABCD列配列(i, 3) & "/" & _ ファイル1ABCD列配列(i, 4) 'keyに追加、itemにb/c/d End If Next i Next ws1 Set ws2 = wb2.Worksheets("Sheet1") ws2.Range("B2:D" & Rows.Count).ClearContents ファイル2ABCD列配列 = ws2.Range("A2", ws2.Cells(Rows.Count, 1).End(xlUp)).Resize(, 4).Value For i = 1 To UBound(ファイル2ABCD列配列) If ファイル1_dec.exists(ファイル2ABCD列配列(i, 1)) Then 配列 = Split(ファイル1_dec.Item(ファイル2ABCD列配列(i, 1)), "/") ファイル2ABCD列配列(i, 2) = 配列(0) ファイル2ABCD列配列(i, 3) = 配列(1) ファイル2ABCD列配列(i, 4) = 配列(2) End If Next ws2.Range("A2").Resize(UBound(ファイル2ABCD列配列), 4).Value = ファイル2ABCD列配列 Erase ファイル1ABCD列配列, ファイル2ABCD列配列 Set ファイル1_dec = Nothing Set wb2 = Nothing Set ws1 = Nothing Set ws2 = Nothing End Sub
- nao-y
- ベストアンサー率58% (111/190)
> vbaで,vlookup関数を作成したいのですが・・・ 確認させてください。 ・Excel VBAでマクロを作りたいということですよね?Excelのバージョンはいくつですか? ・「vlookup関数を作成したい」ではなくて 「vlookup関数を使用したマクロを作成したい」ということですよね? マクロの作成は既に御自分で試されましたか? 試された場合、どこまでやって、何が分からないとか補足してください。 マクロのことを何も調べずに、「何をどう書いたらいいか分からないから とりあえず丸投げ」っていうのは論外ですよ。 ・VLOOKUP関数をファイル2に埋め込むのは駄目なんですか? 駄目ならば、なぜ駄目なのか教えてください。行数が多いからですか? ・ファイル1のsheet1~3(どうでもいいですが、「s hee t」のように 「sheet」という言葉に空白が入るのはなぜですか?)や、ファイル2の行数を教えてください。 ・ファイル2のコード番号は重複する(同じコード番号が何回か出てくる)ことは ないのですか?重複する場合は重量を集計する必要はないですか? ・ファイル1のコード番号は、もちろん重複することはないですよね?
補足
1.vlookup関数を使用したマクロを作成したいです。 2.自分でも作成しましたが、他のファイルから参照することが わかりません。 3.sheetの要領を最大限に使用したデータなので、 vlookupを使用すると手間がかかってしまいます。 ファイル1のコード表は約12万ほどあります。 4.ファイル2の行数は、書類の多さにより異なります。 もちろん、重複するコードもあります。 5.ファイル1のコードはコード表なので 新しい商品が増えたら増えていきます。