こういう書き方もあると思います。参考にしてください。
Sub test()
Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet
Dim lastRow As Long
Dim rng As Range
Dim s As String
Dim t As Variant
Dim k As Long
Dim p As Long
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
Set ws3 = Worksheets("Sheet3")
lastRow = ws1.Cells(Rows.Count, "A").End(xlUp).Row
Set rng = ws2.Range("A1").CurrentRegion '変換テーブル
p = 1 'Sheet3の2行目から書き出し
For k = 2 To lastRow
If ws1.Cells(k, "B") = "〇" Then
s = ws1.Cells(k, "A")
t = Application.VLookup(s, rng, 2, False)
If Not IsError(t) Then
p = p + 1
ws3.Cells(p, "A") = s
ws3.Cells(p, "B") = t
Else
Debug.Print s & " はテーブルにありませんでした"
End If
End If
Next
End Sub
ワークシート関数 VLOOKUP を使った例を書きました。
ワークシート関数 を使う場合は、頭にWorksheetFunctionを付けると学習されたかと思います。
エラーにならなければ、Application.ワークシート関数 と同じです。
エラーになる場合の振る舞いが異なります。
下記の即効テクニック記事に書かれていますので、そちらを読んでみて下さい。
https://www.moug.net/tech/exvba/0100035.html
私は、On Error Goto xx というのが苦手なので、Application.派です。