[[20200709150257]] 『VBA VLOOKUP関数で最終行を取得したい』(おみ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA VLOOKUP関数で最終行を取得したい』(おみ)

同ブックにデータを入力するsheetと、マスタsheetがあります。
今はデータsheetのA2から最終行まで=VLOOKUP(C2,マスタ!A2:B3254,2,0)をコピーしているのですが、データsheetのC2の最終行と、マスタsheetの検索範囲の最終行を都度取得してVLOOKUPするマクロを作りたいと思っています。
データsheetのA2から最終行に入った値は、後ほど操作をするので関数が入るのは避けたいです。

下記のような指令があるのですが、ここに2つの最終行を取得して、ループ捜査を加えたいのですがご教授いただけませんでしょうか?

Sub 別のシートからVLookup()

  Dim tbl As Range
  Dim key
  Dim ret As String

  Set tbl = Sheets("マスター").Range("A2:B3254")

    key = Range("C2").Value

  On Error Resume Next

        ret = WorksheetFunction.VLookup(key, tbl, 2, False)
  On Error GoTo 0

  Range("A2").Value = ret

End Sub

< 使用 Excel:Excel2016、使用 OS:Windows8 >


 Sub 別のシートからVLookup()
  Dim tbl As Range
  Dim key As Variant
  Dim ret As String
  Dim i As Long
  With Worksheets("マスター")
    Set tbl = .Range("B2", .Cells(.Rows.Count, "A").End(xlUp))
  End With
  For i = 2 To Cells(Rows.Count, "C").End(xlUp).Row
    key = Range("C" & i).Value
    On Error Resume Next
    ret = WorksheetFunction.VLookup(key, tbl, 2, False)
    On Error GoTo 0
    Range("A" & i).Value = ret
    ret = Empty 'エラー行で前の行の値を返すのを防ぐ
  Next i
 End Sub

(アクロスラッシャー) 2020/07/09(木) 16:22


>関数が入るのは避けたいです。

計算後に、値に変換することでもよいです。

 Sub test()
    Dim wsData As Worksheet

    Set wsData = Worksheets("データ")

    With wsData.Range("c2", wsData.Range("c2").End(xlDown)).Offset(, -2)
        .Formula = "=iferror(vlookup(c2,マスタ!a:b,2,false),"""")"
        .Value = .Value
    End With

 End Sub

(マナ) 2020/07/09(木) 20:57


アクロスラッシャー様、マナ様ありがとうございます。
理想通りの動作が出来ました。値に直すは頭になかったので、いろいろやってみます。
(おみ) 2020/07/10(金) 15:26

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.