构build选定图纸名称的dynamic列表

这是这个问题的后续问题

最终目标是在数据validationselect列表中使用定义的名称,例如“Sheetnames”。 工作表名称应该是所有工作表名称的列表,除了包含设置信息的两个工作表。 目前他们被称为“主索引”和“进步”。 我正在尝试避免使用VBA,但如果必须的话,将采用它。

我曾经尝试过

Defined Name "Sheetnames" =TRANSPOSE(GET.WORKBOOK(1,'Master Index'!$E$4)&T(NOW())) 

这显然是VBA代码中的一些旧内置dynamic拉入工作簿中的工作表名称列表。 转置将水平数组转换为垂直,并且是完全可选的。 now()是一个易失性函数,可以随时重新计算公式,添加,删除或重命名工作表。

sheetnames的当前输出是一个如下所示的数组:

 [DRAWING LIST work in progress.xlsm]Master Index [DRAWING LIST work in progress.xlsm]Progress [DRAWING LIST work in progress.xlsm]Highway [DRAWING LIST work in progress.xlsm]Structural [DRAWING LIST work in progress.xlsm]Hydrology [DRAWING LIST work in progress.xlsm]Electrical 

我玩弄了一个数组公式(不是我的强项),并将其简化为表格名称:

 =RIGHT(Sheetnames,LEN(Sheetnames)-LEN(Workbook_Name)-2) 

这给了一个很好的列表,如下所示:

 Master Index Progress Highway Structural Hydrology Electrical 

所以我最初尝试着假设书中的前两张是没有使用过的两张,试图用INDEX和OFFSET来定义这个名字,但失败了。

由于有可能重新排列这些纸张,使得这两个纸张不是前两个,而且他们可以被重新命名为别的东西,所以我使用下面的方式来拉出有问题的纸张的纸张名称。 我为每张纸重复一次配方。

 =MID(CELL("address",Progress!A:Z),FIND("]",CELL("address",Progress!A:Z))+1,FIND("'",CELL("address",Progress!A:Z),2)-1-FIND("]",CELL("address",Progress!A:Z))) 

在上面的情况下,我得到:

 Progress 

由于我使用INDEX / OFFSET来定义SHEETNAMES的一部分作为名字列表的想法在我的脸上爆炸了,我有一个大脑放屁,不能想到如何获得名单自动列表定义名称使用在数据validation。

因为我正在尝试自动执行此操作,所以我正在尝试绕过将公式向下复制X行数的步骤。 再次,如果它是唯一的方式,我会走这条路。 只是想避免它。

我的示例数据列表应该如下所示:

 Highway Structural Hydrology Electrical 

更新:

目前的公式我正在和不知道该去哪里或正确的path是:

 =AGGREGATE(14,6,ROW(INDEX(A:A,1,1):INDEX(A:A,COUNTA(Sheetnames),1))/(RIGHT(Sheetnames,LEN(Sheetnames)-LEN(Workbook_Name)-2)<>MID(CELL("address",Progress!A:Z),FIND("]",CELL("address",Progress!A:Z))+1,FIND("'",CELL("address",Progress!A:Z),2)-1-FIND("]",CELL("address",Progress!A:Z)))),ROW(INDEX(A:A,1,1):INDEX(A:A,COUNTA(Sheetnames)-1,1))) 

目前我只testing排除进度表。 目前这导致了6,这是最大的数组条目,其中包含一个名称不等于“进步”

基本的思维过程

AGGREGATE(大或小,忽略错误,生成数字索引和除以个案不等于排除表名,从1到1 **的索引号小于工作簿中的页数)。

当两张纸都被排除在外时,**将增加到2。

我不希望得到6的结果,而是希望{1,3,4,5,6},{6,5,4,3,1}或这些数字的一些其他排列。

然后,我可以转身,并转储到一个定义的名称

 INDEX(SHEETNAMES,{1,3,4,5,6}) 

并再次卡住。

更新二

我得到它的工作SORTA

  =RIGHT(INDEX(Sheetnames,AGGREGATE(14,6,ROW(INDEX(A:A,1,1):INDEX(A:A,COUNTA(Sheetnames),1))/(RIGHT(Sheetnames,LEN(Sheetnames)-LEN(Workbook_Name)-2)<>MID(CELL("address",Progress!A:Z),FIND("]",CELL("address",Progress!A:Z))+1,FIND("'",CELL("address",Progress!A:Z),2)-1-FIND("]",CELL("address",Progress!A:Z)))),ROW(INDEX(A:A,1,1):INDEX(A:A,COUNTA(Sheetnames)-1,1)))),LEN(INDEX(Sheetnames,AGGREGATE(14,6,ROW(INDEX(A:A,1,1):INDEX(A:A,COUNTA(Sheetnames),1))/(RIGHT(Sheetnames,LEN(Sheetnames)-LEN(Workbook_Name)-2)<>MID(CELL("address",Progress!A:Z),FIND("]",CELL("address",Progress!A:Z))+1,FIND("'",CELL("address",Progress!A:Z),2)-1-FIND("]",CELL("address",Progress!A:Z)))),ROW(INDEX(A:A,1,1):INDEX(A:A,COUNTA(Sheetnames)-1,1)))))-LEN(Workbook_Name)-2) 

神圣的丑陋,但作为CSE的公式,它的作品! 然而…你如何在定义名称中input一个CSE公式?

更新三

我得到它在电子表格中工作,但我不能让它在定义名称中工作

到目前为止,我的工作是:

 Defined Name "Sheetnames" (Characters 56) =TRANSPOSE(GET.WORKBOOK(1,'Master Index'!$E$4)&T(NOW())) Defined Name "Workbook_Name" (Characters 41) =MID(Sheetnames,2,FIND("]",Sheetnames)-2) Defined Name "Department_Index" (Characters 178) =AGGREGATE(14,6,ROW(INDEX($A:$A,1,1):INDEX($A:$A,COUNTA(Sheetnames),1))/((Sheetnames<>exclude1)*(Sheetnames<>exclude2)),ROW(INDEX($A:$A,1,1):INDEX($A:$A,COUNTA(Sheetnames)-1,1))) Defined Name "Departments" (Characters 103) =RIGHT(INDEX(Sheetnames,Department_Index),LEN(INDEX(Sheetnames,Department_Index))-LEN(Workbook_Name)-2) 

更新四

我没有意识到我有坐在E4的公式。 我现在已经在E4中定义了这个公式:

 Defined Name "wbFilename" =MID(CELL("filename",PROJ_NAME),FIND("[",CELL("filename",PROJ_NAME))+1,FIND("]",CELL("filename",PROJ_NAME))-FIND("[",CELL("filename",PROJ_NAME))-1) Defined Name "PROJ_NAME" ='Master Index'!$B$1 

而更新“Sheetnames”现在是:

 Defined Name "Sheetnames" =TRANSPOSE(GET.WORKBOOK(1,wbFilename)&T(NOW())) 

现在我卡住了,因为我无法使用数据validation工作