質問内容をみると、そもそもVLOOKUP関数をよく理解していないと思われます。
さらに、最初のご質問のあったソースコードですが、いくつかの問題があります。
'受給者証番号を元に氏名、所属先、所属先事業者章番号をVBAで入力
Dim TCBsNum As String '氏名
Dim ACAft As String '所属先
Dim ACBusinessNo As String '所属先事業者章番号
Dim ACBnsName As String '事業所及びその他の事業所
On Error Resume Next
'氏名
TCBsNum = WorksheetFunction.VLookup(ACYear, Sheet1.Range("A5:L1000"), 4)
'所属先
ACAft = WorksheetFunction.VLookup(ACYear, Sheet1.Range("A5:L1000"), 3)
'所属先事業者章番号
ACBusinessNo = WorksheetFunction.VLookup(ACYear, Sheet1.Range("A5:L1000"), 12)
'事業所及びその他の事業所 D5
ACBnsName = WorksheetFunction.VLookup(Sheet6.Range("G5"), Sheet2.Range("A5:L1000"), 2)
On Error GoTo 0
1.VLOOKUPの引数の検索値の引数が ACYear になっている
質問では、「受給者証番号」が引数になるので、ACYearではなく、 ACBusinessNo となるはずです。
また、写真を良くみると、1111111 になってします。VLOOKUP関数では、表示上同じでも、数値と文字列が異なる場合、エラーとなってしまいます。受給者証番号は、文字列なのか数値なのか?その定義がとても重要になってきます。セルの書式設定を確認しましょう。
2.VLOOKUPの引数の範囲の引数が、間違っている(A列から指定)
写真の映像を見る限り、受給者証番号がある列は、B列です。よって、"B5:L1000"のように指定します。
3.変数 ACBusinessNo に値を代入していない。
正しいコードを書いても、引数に何も代入しなければ、マクロは動きません。
ACBusinessNoに受給者証番号を代入するコードを初めに書きましょう。
もしかすると、代入しているかもしれませんが・・・
4.VLOOKUPの最後の引数 検索方法を指定していない。
このようなシステムでは、曖昧は許されません。完全一致が条件となります。その為にも、最後の引数 検索方法に FALSE を設定するようにしましょう。
5. エラー回避について
このような場合、結果が正常なのか異常なのか不安になる場合があります。
もし、入力した受給者証番号がテーブルに存在しない場合の処置をした方が良いと思います。
全く異なるなりますが、即席のサンプルで実行した例を載せてみます。
参考にして、自分で考え、作り上げて下さい。
VBA
1Sub test01()
2 Dim x As Long
3 Dim i As Long
4
5 x = 0
6 Range("G2").Activate
7 Do Until ActiveCell.Offset(x, 0).Value = ""
8RE1:
9 If Not IsNumeric(ActiveCell.Offset(x, 0).Value) Then GoTo ERR1
10 For i = 2 To 5
11 On Error GoTo ERR1
12 ActiveCell.Offset(x, i - 1).Value = Application.WorksheetFunction.VLookup(ActiveCell.Offset(x, 0).Value, Range("名簿"), i, False)
13 Next i
14 x = x + 1
15 Loop
16 Exit Sub
17
18ERR1:
19 ActiveCell.Offset(x, 1).Value = "該当なし"
20 x = x + 1
21 GoTo RE1
22End Sub
最後になりますが、何でもVBAではなく、関数や機能も組み合わせて、システムを構築することも考えると、もっとスマートにできるかもです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/13 10:41
2016/12/14 01:17