如何使用 Excel 公式从多个工作表创建唯一列表
How To Create A Unique List From Multiple Sheets Using Excel Formula
我正在处理工资单 sheet,我需要从工作簿中的多个 sheet 中提取 唯一员工 ID 并将它们放在另一个 sheet.
中的相同工作簿
尽管我能够创建一个公式来获取那些 唯一列表 但是我无法使其成为 动态,因为每个月我都会在工作簿中导入一个新的 sheet 并且应该考虑到这一点,这不适用于我的公式。
我曾尝试使用 INDIRECT
函数动态引用所有 sheet,但没有成功,可能是我在这里做错了什么。我知道可以使用 Power Query 来完成,但我不想更改数据库的结构,也可以使用 VBA,但是我不愿意,特别想用Excel公式.
来完成
我在 Master_List 单元格 A2
中使用的以下公式
="ID_"&SORT(SUBSTITUTE(UNIQUE(
FILTERXML("<a><b>"&SUBSTITUTE(TEXTJOIN(",",,Blad1:Blad3!A2:A1000)
,",","</b><b>")&"</b></a>","//b")),"ID_","")+0)
我尝试将其用作公式中的 SHEETS
定义名称,但它给出 #REF 错误
=SUBSTITUTE(GET.WORKBOOK(1),"["&GET.WORKBOOK(16)&"]","")&T(NOW())
上面的公式,是用来抓取其他sheet的数据进行计算的,试过用INDIRECT
函数包裹在公式中实现,但是不行,我知道为什么是否有可能使其动态化或是否有任何解决方法。我希望能够解释。感谢您付出的努力和时间。
注意:这是为查询创建的示例数据。
如果您坚持使用公式,以下是我为完成这项工作所做的工作:
- 我在名称管理器中创建了一个名称公式:
SHEETNAME
。它指的是:=REPLACE(GET.WORKBOOK(1),1,FIND("]",GET.WORKBOOK(1)),"")
- 假设您至少有两张纸(一张 'Master' 和任何其他纸的 ID 在 A 列中;
现在我在masterlist的A2
中使用了:
=UNIQUE(FILTERXML("<t><s>"&REDUCE("",SEQUENCE(SHEETS()-1,,2),LAMBDA(a,b,TEXTJOIN("</s><s>",,a,INDIRECT(INDEX(SHEETNAME,b)&"!A2:A100"))))&"</s></t>","//s"))
注意 1: 我假设您只有 A2:A100
范围内的 ID,以保持它相当简单。
注意 2: TEXTJOIN()
的这种使用可以相当快地达到它的极限。
注意 3: 您可以尝试嵌套第二个 UNIQUE()
以确保每次迭代处理尽可能少的记录。这有望确保不会很快达到 TEXTJOIN()
的限制。
我正在处理工资单 sheet,我需要从工作簿中的多个 sheet 中提取 唯一员工 ID 并将它们放在另一个 sheet.
中的相同工作簿尽管我能够创建一个公式来获取那些 唯一列表 但是我无法使其成为 动态,因为每个月我都会在工作簿中导入一个新的 sheet 并且应该考虑到这一点,这不适用于我的公式。
我曾尝试使用 INDIRECT
函数动态引用所有 sheet,但没有成功,可能是我在这里做错了什么。我知道可以使用 Power Query 来完成,但我不想更改数据库的结构,也可以使用 VBA,但是我不愿意,特别想用Excel公式.
我在 Master_List 单元格 A2
中使用的以下公式="ID_"&SORT(SUBSTITUTE(UNIQUE(
FILTERXML("<a><b>"&SUBSTITUTE(TEXTJOIN(",",,Blad1:Blad3!A2:A1000)
,",","</b><b>")&"</b></a>","//b")),"ID_","")+0)
我尝试将其用作公式中的 SHEETS
定义名称,但它给出 #REF 错误
=SUBSTITUTE(GET.WORKBOOK(1),"["&GET.WORKBOOK(16)&"]","")&T(NOW())
上面的公式,是用来抓取其他sheet的数据进行计算的,试过用INDIRECT
函数包裹在公式中实现,但是不行,我知道为什么是否有可能使其动态化或是否有任何解决方法。我希望能够解释。感谢您付出的努力和时间。
注意:这是为查询创建的示例数据。
如果您坚持使用公式,以下是我为完成这项工作所做的工作:
- 我在名称管理器中创建了一个名称公式:
SHEETNAME
。它指的是:=REPLACE(GET.WORKBOOK(1),1,FIND("]",GET.WORKBOOK(1)),"")
- 假设您至少有两张纸(一张 'Master' 和任何其他纸的 ID 在 A 列中;
现在我在masterlist的A2
中使用了:
=UNIQUE(FILTERXML("<t><s>"&REDUCE("",SEQUENCE(SHEETS()-1,,2),LAMBDA(a,b,TEXTJOIN("</s><s>",,a,INDIRECT(INDEX(SHEETNAME,b)&"!A2:A100"))))&"</s></t>","//s"))
注意 1: 我假设您只有 A2:A100
范围内的 ID,以保持它相当简单。
注意 2: TEXTJOIN()
的这种使用可以相当快地达到它的极限。
注意 3: 您可以尝试嵌套第二个 UNIQUE()
以确保每次迭代处理尽可能少的记录。这有望确保不会很快达到 TEXTJOIN()
的限制。