[[20200928135051]] 『VBAでVlookUPをつくりましたがエラー404がでます=x(パンジービオラ) ページの最後に飛ぶ

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

 

『VBAでVlookUPをつくりましたがエラー404がでます。』(パンジービオラ)

VBAに挑戦しています。
別のシート(マスタ)に登録してあるコードを入力用シートにてコードを抽出したいと考えています。

マスタシート:A列に名前 B列にコードを入力してあります。
入力用シート:A列にコードを入力したく、B列に名前が入っています。

この場合下記のようなものを作ってみましたが、404のエラーが出てしまいました。
どこが違うか教えていただけるとありがたいです。
よろしくお願いします。

Sub A_コードをつける()

    Dim SerchKey As Range '検索値
    Dim SerchRange As Range '検索範囲
    Dim OutputRange As Range '出力範囲
    Dim i As Long

    Set SerchKey = Worksheets("入力用").Range("B2:B1000")
    Set SerchRange = Worksheets("マスタ").Range("A2:B500")
    Set OutputRange = Worksheets("入力用").Range("A2:A1000")

    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

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


VLOOKUPをつくったのではなく、使っただけですよね? 日本語は正確に。

デバッグの基本はステップ実行し、変数内容を調べることから。 人にやらせるのではなく、自分でやるものです。 そうしないと、どの行でエラーになったのかも説明できないでしょう?

そして、エラーコードは404ですか? 元データがどこまで入力されているかに関係なく、999回ループしているので、空欄検索しようとして、1004のエラーになりそうですが。

また、入力用データが999行あるのに、マスタデータは499行しかないので、見つからない場合も想定すべき。
(???) 2020/09/28(月) 14:21


失礼しました。

VlookUPを使用して の間違いでした。
また404ではなく、400エラーだったです。

ただ、一行ずつマクロを実行しましたら、確かに「1004」エラーになりました。
空欄検索のためのエラーということなので、改めて調べてみます。

ありがとうございました。
(パンジービオラ) 2020/09/28(月) 14:50


横からですが、↓のようにすれば、わざわざVBAでループ処理を使ってVLOOKUP関数を実行しなくてもよいかもです。
    Sub さんぷる()
        With Worksheets("入力用").Range("A2:A1000")
            .Formula = "=VLOOKUP(B2,マスタ!$A$2:$B$500,2,FALSE)"
            .Value = .Value
        End With
    End Sub

(もこな2 ) 2020/09/29(火) 08:06


もこな2様

ご連絡遅くなりまして申し訳ございません。
ご回答ありがとうございました。

早速実行してみましたところこの方法でもできるんですね。
シンプルですごいです。

ただ、A列にコードが表示されましたが、B列は毎回行数が変わるので、
B列がない部分はA列が#N/Aになってしまいました。
表示が出ない方法はあるのでしょうか。
(パンジービオラ) 2020/10/09(金) 15:15


>B列は毎回行数が変わるので、B列がない部分はA列が#N/Aになってしまいました。
えっと、そもそもご自身が提示したコードも含めて何がどのような動き(命令)になっているか理解してますか?
そこが理解出来れば、いろんなアプローチを思いつきそうな気がしますが・・・・・

    Sub B列最終行までにしてみる()
        Dim 最終行 As Long

        With Worksheets("入力用")
            最終行 = .Cells(.Rows.Count, "B").End(xlUp).Rows
            If 最終行 < 2 Then Exit Sub

            With .Range("A2:A" & 最終行)
                .Formula = "=VLOOKUP(B2,マスタ!$A$2:$B$500,2,FALSE)"
                .Value = .Value
            End With
        End With
    End Sub
    '---------------------------------------------------------------
    Sub エラー値をクリアしてみる()
        With Worksheets("入力用").Range("A2:A1000")
            On Error Resume Next
            .SpecialCells(xlCellTypeFormulas, 16).ClearContents
            On Error GoTo 0

            .Formula = "=VLOOKUP(B2,マスタ!$A$2:$B$500,2,FALSE)"
            .Value = .Value
        End With
    End Sub
    '---------------------------------------------------------------
    Sub エラー値にならない数式にしてみる()
        With Worksheets("入力用").Range("A2:A1000")
            .Formula = "=IFERROR(VLOOKUP(B2,マスタ!$A$2:$B$500,2,FALSE),"""")"
            .Value = .Value
        End With
    End Sub

(もこな2) 2020/10/13(火) 14:45


↑について、ミスがありましたので編集しました。

(もこな2) 2020/10/14(水) 09:02


もこな2様

再度のご回答ありがとうございました。
VBAはきちんと理解できていないので、ネットの力を借りてばかりです。
そのため、応用がきかず。

今回は「 エラー値にならない数式にしてみる」をコピーさせていただき、
他のVLOOKUPを使用している部分に当てはめてみようと思います。

いろいろ式を考えてくださりありがとうございました。
(パンジービオラ) 2020/10/15(木) 15:09


コメント返信:

[ 一覧(最新更新順) ]


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