Range関数は、テーブル名、範囲、スピル範囲演算子等の文字列を引数として使えるので、なにかと便利です。
しかし、Range("M01N_[番号,O,W]")というように、列を抜き出してテーブルを作成することは出来ません。
Range("M01N_[番号]") のような一列や、Range("M01N_[[番号]:[O]]")のように列の並びが連続している必要があります。
それなので、関数Range_として再定義しました。
Function Range_(R, Optional S = "")
On Error Resume Next
If TS_(R) Then
If InStr(R, ",") > 0 And InStr(R, "[") > 0 And InStr(R, "]") = Len(R) Then
A = Split(Left(R, Len(R) - 1), "[")
B = Split(A(1), ",")
A = A(0)
M = Range(A).Rows.Count
N = UBound(B) + 1
ReDim S(0 To M, 1 To N)
For J = 1 To N
S(0, J) = B(J - 1)
R = CC(A, "[", B(J - 1), "]")
For I = 1 To M
S(I, J) = DI(R, I)
Next I
Next J
Else
S = Range(R)
End If
Else
S = R
End If
Range_ = S
End Function
(A1) =Range_("M01N_[番号,O,W]") の結果は下記。書式は適当に変えています。