|
本帖最后由 luqiwe 于 2015-9-27 20:26 编辑
假定:array1={1,2;3,4;5,6} //引用某工作簿1连续区域
array2={a,b;c,d} // 引用某工作簿2连续区域
问题:如何使用公式得到:{1,2;3,4;5,6;a,b;c,d}?
这是个数组扩限的合并问题,在VBA中用UNION等函数可很轻易地处理这个问题,但VBA涉及宏开关及工作簿格式问题,在应用场景中这是大忌,如果你张口说要用到代码,起码要吓倒一大片,而且不易为人接受。但MS并末提供工作表函数,我们最好的选择是用数组公式来处理,倒又该如何处理,以下是我在为用户服务中提供的一种思路(本贴并末提供附件,但因为公式极为通用,故大家可以按照以下提示自建一个供测试)。
前提:本工作簿已经定义名称array1:引用外部工作簿1某连续区域,array2:引用外部工作簿2某连续区域,可通过以下公式生成内存二维数组或定义名称
=IF(ROW(INDIRECT("$1:$"&(ROWS(array1)+ROWS(array2))))<ROWS(array1)+1,INDEX(array1,N(IF(1,ROW(INDIRECT("$1:$"&(ROWS(array1)+ROWS(array2)))))),N(IF(1,TRANSPOSE(ROW(INDIRECT("$1:$"&COLUMNS(array1))))))),INDEX(array2,N(IF(1,ROW(INDIRECT("$1:$"&(ROWS(array1)+ROWS(array2))))-ROWS(array1))),N(IF(1,TRANSPOSE(ROW(INDIRECT("$1:$"&COLUMNS(array2))))))))
应用场景:
企业报表体系是按月分工作表建立的,比如成本计算表,假设完成1月报表后,直接复制成2月报表,一般地需要修改报内公式以便适应不同数据源(企业数据源一般地也是根据业务进展逐月形成相关基础报表),在维护报表公式过程中极易看错行列导致公式修改成错的,我在为企业服务过程中采用的一个解决方案就是各月数据源统一到二维数组中,再对二级数组做后续操作,这样工作表间的公式无需修改
直接复制就可了,当然以上公式过于复杂,不易操作,希望MS在今后能推出直接合并任意数组的函数。
|
|