请问您可以建议在有或没有VBA的情况下为12个单独的列(位于工作簿中的12个不同Excel工作表中)创建工会列的最佳方法是什么?
有很好的手册如何在没有VBA的情况下对两列进行操作(使用MATCH函数)但是我不知道如何处理多列的情况。
答案 0 :(得分:1)
我认为使用multiple consolidation ranges可以实现数据透视表。需要标签列和每张纸多个列(可以克隆现有的列)。应自动从列表中排序和删除重复项(如果克隆)。
答案 1 :(得分:0)
我假设您的ID都是数字的(否则,如果没有VBA,排序将非常棘手)。您可以修改以下数组公式以满足您的需求(选择一个具有足够行的区域来保存完整的ID堆栈,输入公式,然后使用 ctrl + shift提交公式 + 输入):
{=TRANSPOSE(SMALL(IFERROR(CHOOSE(COLUMN(1:12),Sheet1!A1:A73,Sheet2!A1:A70,Sheet3!A1:A79,Sheet4!A1:A58,Sheet5!A1:A51,Sheet6!A1:A94,Sheet7!A1:A50,Sheet8!A1:A89,Sheet9!A1:A75,Sheet10!A1:A89,Sheet11!A1:A70,Sheet12!A1:A94),FALSE),(COLUMN(INDIRECT("1:"&COUNT(Sheet1!A1:A73,Sheet2!A1:A70,Sheet3!A1:A79,Sheet4!A1:A58,Sheet5!A1:A51,Sheet6!A1:A94,Sheet7!A1:A50,Sheet8!A1:A89,Sheet9!A1:A75,Sheet10!A1:A89,Sheet11!A1:A70,Sheet12!A1:A94))))))}
我将使用较小的版本(2列)来解释它是如何工作的:
{=TRANSPOSE(SMALL(IFERROR(CHOOSE(COLUMN(1:2),A1:A73,C1:C70),FALSE),(COLUMN(1:143))))
首先,COLUMN(OFFSET($A$1,0,0,,2))
返回1到2之间的水平整数数组。将其传递给具有两个单列范围的CHOOSE函数,从A1:A73
和{{}}创建一个73 x 2数组。 {1}}(不是创建锯齿状数组,而是使用C1:C70
填充第二列的最后三个值。)
使用#NA
包裹结果,将三个IFERROR
值转换为#NA
(否则,FALSE
将返回错误。)
接下来,SMALL
返回1到143之间的水平整数数组。将73 x 2数组和1到143之间的整数数组传递给small将返回单个1 x 143数组(水平)排序后的值,然后转置以返回垂直数组作为输出。