FILTER関数の結果が1行だけの場合、2次元配列ではなくて1次元配列(ベクトル)になってしまうようです。
1次元配列だと UBound(v, 2) は存在しない。
AdvancedFilterで簡単にできることですが、
「無理やり」WorksheetFunction.Filterを使ってC列が"R"の物をJ2に取り出すとき
A B C D E F G H I J K L M
1 No. 名前 分類 値 No. 名前 分類 値
2 101 あ P 10
3 102 い Q 11
4 103 う P 12
5 104 え P 13
6 105 お Q 14
7 106 か Q 15
8 107 き P 16
9 108 く Q 17
10 109 け R 18
Dim r As Range
Dim v
Set r = ActiveSheet.ListObjects("テーブル1").Range
v = WorksheetFunction.Filter(r, Evaluate(r.Columns(3).Address & "=""R"""), "")
On Error Resume Next
If IsEmpty(UBound(v, 2)) Then
Range("J2").Resize(1, UBound(v, 1)).Value = v
Else
Range("J2").Resize(UBound(v, 1), UBound(v, 2)).Value = v
End If
On Error GoTo 0
とか
Dim r As Range
Dim v
Set r = ActiveSheet.ListObjects("テーブル1").Range
v = WorksheetFunction.Filter(r, WorksheetFunction.XLookup(r.Columns(3), "R", True, False), "")
On Error Resume Next
If IsEmpty(UBound(v, 2)) Then
Range("J2").Resize(1, UBound(v, 1)).Value = v
Else
Range("J2").Resize(UBound(v, 1), UBound(v, 2)).Value = v
End If
On Error GoTo 0
こんなコード使う必要まったくなし。