2016-08-05 19 views
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) 

私が間違って何が起こっているのか理解していません。

答えて

2

変更

ActiveWorkbook.Names.Add "rngRedLast3Mos", _ 
"=OFFSET(tblTix,MATCH(MAX(tblTix[Date]),tblTix[Date],1)-3,MATCH(""Red"",tblTix[#Headers],0)-1,3,1)" 

ActiveWorkbook.Names.Add Name:="rngRedLast3Mos", RefersToR1C1:= _ 
"=OFFSET(tblTix,MATCH(MAX(tblTix[Date]),tblTix[Date],1)-3,MATCH(""Red"",tblTix[#Headers],0)-1,3,1)" 

が同様

+0

Yahooの残りのためにそれを実行し、それが動作します!ありがとうございました!私は数時間それを理解しようとしていました。それがなぜ機能するのか、少し説明できますか?マイクロソフトのドキュメントは、この点ではあまり役に立ちません。 – MJA

+1

'Name:='と 'RefersToR1C1:='を追加しました。私はそれが変わっていることを知っています。デフォルトでは、最初の2つのパラメータは名前と参照先です。ほとんどの場合、それらを指定する必要はありませんが、この場合は動作させる必要があります –

関連する問題