EXCEL VBAについて教えて頂けないでしょうか。
EXCEL VBAについて教えて頂けないでしょうか。 sheet1(部品表)のH5以下の文字列によって、sheet3(材質コード)のB列の対応するコード番号をsheet1(部品表)のO列に表示させるということをしようと下記コードを実行してみたのですが worksheetfunctionクラスのvlookupプロパティを取得できません。とエラーが出てしまうのですが、どうしたら正常に実行できるのでしょうか。 Sub 材質コード取得() Dim SerchKey As Range '検索値 Dim SerchRange As Range '検索範囲 Dim OutputRange As Range '出力範囲 Dim i As Long Set SerchKey = Worksheets("部品表").Range("H5:H605") Set SerchRange = Worksheets("材質コード").Range("A1:B600") Set OutputRange = Worksheets("部品表").Range("O5:O605") Application.ScreenUpdating = False For i = 1 To SerchKey.Rows.Count OutputRange(i, 1) = WorksheetFunction.VLookup(SerchKey(i, 1), SerchRange, 2, False) Next Application.ScreenUpdating = True End Sub sheet1やsheet3の行が今後増えても大丈夫なように、まだ空白の600行分まで指定しているのがまずいのでしょうか? sheet3(材質コード)は現在59行目まで使用しており、今後行が増える可能性があります。 VLOOKUP関数で表示させれば良いのは承知しておりますが、他の方も使用するので予期せぬ使用方法をされて関数が壊れたまま使用されるのを避けるためVBAで行えればと思っております。 何卒教えて頂けないでしょうか。 よろしくお願いいたします。
補足です。 H列が空白であったり、H列に材質が書かれているけれどsheet3に 対応する材質名が無ければsheet1のO列は空白ということがしたいです。
Excel | Visual Basic・48閲覧・25
ベストアンサー
WorksheetFunction だとエラーで止まってしまいます。 Application.Vlookup を使うといいです。 データの範囲は汎用的に都度取得するようにしました。 またセルを特にRange変数で扱う必要はないと思うので変更しました。 Sub test() Dim SerchRange As Range Dim i As Long Dim ck As Variant Application.ScreenUpdating = False With Worksheets("材質コード") Set SerchRange = .Range("A1:B" & .Cells(Rows.Count, "A").End(xlUp).row) End With With Worksheets("部品表") For i = 5 To .Cells(Rows.Count, "H").End(xlUp).row ck = Application.Vlookup(.Cells(i, "H").value, SerchRange, 2, False) If IsError(ck) = False Then .Cells(i, "O").value = ck End If Next i End With Application.ScreenUpdating = True End Sub
1人がナイス!しています
質問者からのお礼コメント
ご回答ありがとうございます!! しかもとてもスマートなコードを教えて頂けて恐縮です。 おかげさまで求めていた以上の結果が出せました。 Application.Vlookup を使用するのですね!今後はそのように致します。 素早く素晴らしいご回答、誠に感謝しております。 本当にありがとうございます。
お礼日時:1/21 10:57