2016-08-05 7 views
1

ListObject 테이블에서 마지막 몇 행의 데이터를 참조하는 명명 된 범위를 만들어야합니다. 리본에서 수식 (수식> 이름 정의)을 수동으로 수행 할 수 있지만이 작업은 3 개의 범위로 20 개의 시트에 걸쳐 수행해야합니다.ListObjects 테이블을 참조하는 VBA에서 동적 명명 된 범위를 만듭니다.

VBA를 사용하여이 방법을 사용하면 오류가 발생하고 수식 입력에 문제가 있다는 경고가 나타나고 "="을 제거해야합니다. 어떤 아이디어가 이것을 해결하는 방법?

새로운 코드를 시도하려면 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

야후 나머지 그렇게, 그것을 작동합니다! 고맙습니다! 나는 그것을 몇 시간 동안 알아 내려고 노력했다. 그게 왜 효과가 있는지 조금 설명해 주시겠습니까? Microsoft의 문서는이 점에서별로 도움이되지 않습니다. – MJA

+1

'Name : ='과'RefersToR1C1 : ='을 추가했습니다. 나는 그것이 이상하다는 것을 안다. 왜냐하면 기본적으로 첫 번째 2 매개 변수는 이름과 참조이며, 대부분의 경우에는 지정할 필요가 없지만이 경우에는 작동하도록해야한다. –