ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何合并两个二维数组

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-10-25 22:56 | 显示全部楼层 |阅读模式
需要将两个二维数组头尾合并,两个数组动态数组,结构相同,分别是从两个Sheet上读取的,因为后续需要对合并后的数组进行运算,希望合并后的数组不要改变结构!,谢谢!

TA的精华主题

TA的得分主题

发表于 2013-10-25 23:04 | 显示全部楼层
方法很多,请上传附件,新手求助要上传附件的,没有附件不知道你的是什么数据。

TA的精华主题

TA的得分主题

发表于 2013-10-25 23:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-10-25 23:32 | 显示全部楼层
本帖最后由 香川群子 于 2013-10-25 23:33 编辑

对于经常写代码的人来说,这种问题毫无疑问用VBA数组循环赋值即可,不会怕麻烦。


但对于新手来说,非常希望用几句简单的代码就完成功能……写代码不会、不熟悉,所以怕写代码。
那么,提供一个另类一些的思路:

1. 把【二维数组1】输出到新建工作表A1单元格(或某处指定单元格),形成区域1
2. 把【二维数组2】输出到新建工作表区域1以下的第一个单元格,自然形成合并数据
3. 读取合并数据成为【你想要得到的合并二维数组】

4. 最后删除新建工作表或删除临时使用区域的数据即可。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-10-25 23:42 | 显示全部楼层
示例代码如下:
  1. Sub ArrJoin()
  2.     arr1 = [a1:c3] '二维数组1
  3.     arr2 = [e1:g7] '二维数组2

  4.     '下面开始合并:
  5.     With Worksheets.Add '新建工作表
  6.         .[a1].Resize(UBound(arr1), UBound(arr1, 2)) = arr1 '[a1]写入数组arr1内容
  7.         .[a1].Offset(UBound(arr1)).Resize(UBound(arr2), UBound(arr2, 2)) = arr2 '下面接着写数组arr2内容
  8.         arr3 = .[a1].CurrentRegion '得到合并内容的数组arr3
  9.         Application.DisplayAlerts = False '关闭删除提醒功能
  10.         .Delete '删除新建工作表
  11.     End With

  12.     '到这里目的已经实现
  13.     Stop '停下来观察数组arr3结果
  14. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2013-10-25 23:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
下面是直接循环赋值的代码,其实并不算复杂,但速度效率是最高的。

两个相同结构的数组(列数相同的二维数组)合并,我把它写成了VBA函数。
  1. Sub JoinTest()
  2.     arr1 = [a1].CurrentRegion
  3.     arr2 = [e1].CurrentRegion
  4.     arr3 = JoinArr(arr1, arr2)
  5.     Stop
  6. End Sub

  7. Function JoinArr(arr1, arr2)
  8.     ReDim arr3(1 To UBound(arr1) + UBound(arr2), 1 To UBound(arr1, 2))
  9.     For i = 1 To UBound(arr1)
  10.         k = k + 1
  11.         For j = 1 To UBound(arr1, 2)
  12.             arr3(k, j) = arr1(i, j)
  13.         Next
  14.     Next
  15.     For i = 1 To UBound(arr2)
  16.         k = k + 1
  17.         For j = 1 To UBound(arr2, 2)
  18.             arr3(k, j) = arr2(i, j)
  19.         Next
  20.     Next
  21.     JoinArr = arr3
  22. End Function
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-10-25 23:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
循环变量需要定义为长整型变量,否则速度受影响。

但如果你是初学者就不必放在心上,我也不给你定义变量了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-10-26 20:19 | 显示全部楼层
本帖最后由 xjygjd 于 2013-10-26 20:51 编辑

非常感谢!受教了!看了两个方法,我还数选择后面的循环方法来做,因为存入数组这些数据是通过读取后台打开的Excel文件来获取的,同时因为数据来源文件相当重要,不能随意更改而且该文件的主要使用者根本不懂vba怕出问题。

TA的精华主题

TA的得分主题

发表于 2013-10-26 21:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
香川群子 发表于 2013-10-25 23:32
对于经常写代码的人来说,这种问题毫无疑问用VBA数组循环赋值即可,不会怕麻烦。

不知他后续想干什么,也许根本不需要合并。

TA的精华主题

TA的得分主题

发表于 2014-11-19 20:05 | 显示全部楼层
香川群子 发表于 2013-10-25 23:50
下面是直接循环赋值的代码,其实并不算复杂,但速度效率是最高的。

两个相同结构的数组(列数相同的二维 ...

如果只有一个动态二维数组arr,数据根据条件不断更新,如何新旧数组不断合并(像滚雪球一样)?
相当于,一开始:brr=arr,然后arr动态更新重新赋值(行数不同,列数一样),"brr=brr+arr”,如此arr不断更新并与原数组合并,循环到条件结束。
将arr复制到工作表的方法不想用,请教下如何改代码?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 23:52 , Processed in 0.044574 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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