ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3310|回复: 5

[原创] 二维数组扩限合并的通用公式

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-9-26 15:31 | 显示全部楼层 |阅读模式
本帖最后由 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在今后能推出直接合并任意数组的函数。

TA的精华主题

TA的得分主题

发表于 2015-9-26 16:25 | 显示全部楼层
这样的公式最好是有附件来说明,不知道楼主是分享呢?还是求助呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-9-26 17:51 | 显示全部楼层
本帖最后由 luqiwe 于 2015-9-26 18:00 编辑
apirl2008 发表于 2015-9-26 16:25
这样的公式最好是有附件来说明,不知道楼主是分享呢?还是求助呢?

算分享吧, 同时也欢迎有提供更好的思路,公式作用说明如下:
假定:array1={1,2;3,4;5,6}                      //对应某工作簿1连续区域
          array2={a,b;c,d}                           // //对应某工作簿2连续区域
使用公式可得到:{1,2;3,4;5,6;a,b;c,d}

TA的精华主题

TA的得分主题

发表于 2016-3-3 14:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
老师您好,我看了些您的帖子,关于百度地图信息搜索的问题您比较精通,我目前有个小需求想请您帮忙帮处理一下,不会让您白整的您放心,谢谢您,如果方便能加我微信或者QQ么?微信QQ同号:84974447,求求您了。。。

TA的精华主题

TA的得分主题

发表于 2016-9-3 11:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主,你好,根据你的公式,我将2个动态的数组合并成一个新数组后,定义新数组名称,在数据验证中以序列调用名称方式,显示源当前错误,如何解决这个问题呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-12 09:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
丝米 发表于 2016-9-3 11:38
楼主,你好,根据你的公式,我将2个动态的数组合并成一个新数组后,定义新数组名称,在数据验证中以序列调 ...

请上附件,以便帮你测试
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 09:31 , Processed in 0.043012 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表