• 締切済み

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のデータを移したいです。 よろしくお願い致します

みんなの回答

  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.2

こんにちわ いくつか前提があります。 このマクロは、ファイル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)
回答No.1

> vbaで,vlookup関数を作成したいのですが・・・ 確認させてください。 ・Excel VBAでマクロを作りたいということですよね?Excelのバージョンはいくつですか? ・「vlookup関数を作成したい」ではなくて  「vlookup関数を使用したマクロを作成したい」ということですよね?  マクロの作成は既に御自分で試されましたか?  試された場合、どこまでやって、何が分からないとか補足してください。  マクロのことを何も調べずに、「何をどう書いたらいいか分からないから  とりあえず丸投げ」っていうのは論外ですよ。 ・VLOOKUP関数をファイル2に埋め込むのは駄目なんですか?  駄目ならば、なぜ駄目なのか教えてください。行数が多いからですか? ・ファイル1のsheet1~3(どうでもいいですが、「s hee t」のように 「sheet」という言葉に空白が入るのはなぜですか?)や、ファイル2の行数を教えてください。 ・ファイル2のコード番号は重複する(同じコード番号が何回か出てくる)ことは ないのですか?重複する場合は重量を集計する必要はないですか? ・ファイル1のコード番号は、もちろん重複することはないですよね?

chankaho
質問者

補足

1.vlookup関数を使用したマクロを作成したいです。 2.自分でも作成しましたが、他のファイルから参照することが  わかりません。 3.sheetの要領を最大限に使用したデータなので、  vlookupを使用すると手間がかかってしまいます。  ファイル1のコード表は約12万ほどあります。 4.ファイル2の行数は、書類の多さにより異なります。  もちろん、重複するコードもあります。 5.ファイル1のコードはコード表なので  新しい商品が増えたら増えていきます。

関連するQ&A