1
ListObjectテーブルの最後の数行のデータを参照する名前付き範囲を作成する必要があります。私はリボン(Formula> Define Name)から手動で行うことができますが、私は3つの範囲でそれぞれ20枚のシートを渡ってこれを行う必要があります。ListObjectsテーブルを参照するVBAで動的な名前付き範囲を作成する
VBAを使用してこれを試してみると、エラー1004が表示され、式に問題があり、式を入力しようとしていない場合は "="を削除するという警告が表示されます。任意のアイデアをどのようにこれを解決するには?
新しいSheet1を開き、コードを試してください。 ListObjectsテーブルを作成し、名前付き範囲を作成しようとします。
Sub test2()
Dim wks As Worksheet, tbl As ListObject
Dim arr()
arr = [{"Date","1/1/2016","2/1/2016","3/1/2016","4/1/2016";"Green",100,200,300,400;"Yellow",350,250,150,50;"Red",10,7,5,3}]
Set wks = ActiveSheet
wks.Range("a1:d5") = WorksheetFunction.Transpose(arr)
Set tbl = wks.ListObjects.Add(xlSrcRange, wks.Range("a1").CurrentRegion, , xlYes)
tbl.Name = "tblTix"
ActiveWorkbook.Names.Add "rngRedLast3Mos", "=OFFSET(tblTix,MATCH(MAX(tblTix[Date]),tblTix[Date],1)-3,MATCH(""Red"",tblTix[#Headers],0)-1,3,1)" 'THIS FAILS
ActiveWorkbook.Names.Add "rngRedLast3Mos", "=OFFSET(Sheet1!$A$1,2,3,3,1)" 'THIS WORKS
ActiveWorkbook.Names.Add "rngRedLast3Mos", "=Sheet1!$D$3:$D$5" 'THIS ALSO WORKS
Debug.Print ActiveWorkbook.Names("rngRedLast3Mos").RefersTo
Debug.Print ActiveSheet.Range("rngRedLast3Mos").Address
End Sub
私は手動で名前マネージャーで範囲を定義する場合、私はこのリファレンスを割り当てることができ、それが動作します:
=OFFSET(tblTix,MATCH(MAX(tblTix[Date]),tblTix[Date],1)-3,MATCH("Red",tblTix[#Headers],0)-1,1,1)
私が間違って何が起こっているのか理解していません。
Yahooの残りのためにそれを実行し、それが動作します!ありがとうございました!私は数時間それを理解しようとしていました。それがなぜ機能するのか、少し説明できますか?マイクロソフトのドキュメントは、この点ではあまり役に立ちません。 – MJA
'Name:='と 'RefersToR1C1:='を追加しました。私はそれが変わっていることを知っています。デフォルトでは、最初の2つのパラメータは名前と参照先です。ほとんどの場合、それらを指定する必要はありませんが、この場合は動作させる必要があります –