• 締切済み

【VBA】Vlookupのエラー処理

VBAでWorksheetFunction.VLookupを利用しています。 エラーが発生した場合も、「参照先の表をもとに値を表示する」ようにしたいのですが、可能でしょうか。 【参照先の表】  一列目      二列目  あ        か  い        き  う        く  え        け  お        こ  ※エラー時    ん ※「あ」のときは「か」を表示させる。 ※「さ」のときは「ん」を表示させる。 エラー時に「ん」を表示させたいということではなく、 「表を参照して「ん」を表示させたい」という要望です。 (表を変更すればコードを変更せずとも表示を変えられる仕様) 言葉足らずかもしれませんが、ご協力お願いします。

みんなの回答

  • SI299792
  • ベストアンサー率47% (774/1619)
回答No.5

具体的なことが何一つ書いてないので、画像の様な表で、 C2に入力、D2に表示とします。 Application.VLookup を使った方法と、On Errorを使った方法。2種類乗せます。 Option Explicit ' Sub Macro1()   Dim OutData As Variant '   OutData = Application.VLookup([C2], [A:B], 2, 0) '   If IsError(OutData) Then     OutData = Application.VLookup("※エラー時", [A:B], 2, 0)   End If   [D2] = OutData End Sub ' Sub Macro2()   Dim OutData As String '   On Error Resume Next   OutData = WorksheetFunction.VLookup([C2], [A:B], 2, 0)   On Error GoTo 0 '   If OutData = "" Then     OutData = Application.VLookup("※エラー時", [A:B], 2, 0)   End If   [D2] = OutData End Sub

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

質問する意味がよく判らない質問だ。 エクセル関数の中には(VBAのWFで同型の関数を使うときも)、エラーの際のとび先とか、defalt値を書いておく仕組みはない。 VBAなら「ON ERRORを書」いて、エベント的にとらえて、強制的にある決まった値(行き先)を 返すとか、しかないだろう。 ーー そのコードは、Googleででも「エクセル VBA WorksheetFunction エラー 処理」や 「VBA worksheetfunction エラーの対処」 で照会してみましたか。 やって見ると https://excel-ubara.com/excelvba4/EXCEL207.html に出くわした。 それによると、質問のケースは 下記データ例でやって見た A列  B列  D列 R列 あ か い い き け なし <===ここ う く う え け い お こ ーー 標準モジュールに Sub test1() On Error Resume Next Range("E2") = Application.WorksheetFunction.VLookup(Range("D2"), Range("A1:B10001"), 2, False) If Err Then Range("E2") = "なし" End If On Error GoTo 0 End Sub のように「なし」にして、(普通は)次のステップに進むのだろう。 ーー また、その(持ってくる)値の置き場所だが、 (1)B列のセルを番地で指定(B6のように)、 (2)他の列の決まったセル(例一定の$C$1のような)の値 (3)プログラムに定数として、(「ん」を)組み込む) のどれを言っているのかな。 ーー (3)はWEB例(上記例も)では「ん」は、「なし」だが。 (1)、(2)でもどういうコードになるかわかるだろう。 質問は(1)(2)の特殊ケースかと思うが、具体的には? ーー そもそもエクセル関数のVLOOKUP関数でやれないのか。VBAを使わなくても。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.3

No.1の蛇足です。 VLookupを使わずにFindにして見つからなかった時の処理にすると Sub Test2() Dim mRng As Range Set mRng = Range("A1:B5").Find(What:=Range("C1").Value, LookIn:=xlValues, LookAt:=xlWhole) If Not mRng Is Nothing Then Range("D1").Value = mRng.Offset(0, 1).Value Else Range("D1").Value = Cells(Rows.Count, "B").End(xlUp).Value End If End Sub

回答No.2

できる。エラーが起きたら、ここに飛ぶというステートメントを使う。そのサブルーチンで、エラーコードを判定すれば良い。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.1

一列目がA列で二列目がB列 C1を検索値として結果をD1に出しているとして エラーの場合にB列の最終行のデータをD1に表示する場合です。 Sub Test() On Error GoTo VlookupErr Range("D1").Value = WorksheetFunction.VLookup(Range("C1").Value, Range("A1:B5"), 2, False) On Error GoTo 0 Exit Sub VlookupErr: Range("D1").Value = Cells(Rows.Count, "B").End(xlUp).Value Resume Next End Sub

関連するQ&A