ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何采用嵌套循环将多个一维数组合并成二维数组

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-11-15 10:45 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
在用循环赋值的时候遇到了问题
我用不同的方式分别给15个一维数组赋了值
15个数组的元素数量相同 但是采用的是选取方式录入元素 所以元素个数不确定
分别是arr1(),arr2(),...,arr15()

在这里我想讲15个数组合并成一个二维数组arr16()
其中 数组的元素个数为新数组的行数  数组数量为新数组的列数
于是有了下面的代码

For i = 1 to x step1 (这里x是之前数组含有的元素数量)
For t = 1 to 15 (已有的一维数组个数)
arr16(i,t)=arr & t & (i)
Next t
Next i

当我这么写时 会提示arr未定义
于是我换了种写法

arr16(i,t)=arr & t & (i)
改成了
arr16(i,t)="arr" & t & "("& i & ")"
这个时候arr16赋值的内容就变成了文本 而不是对应数组的元素

所以我想问下各位大佬 如何采用嵌套循环的方式将多个一维数组合并成二维数组

TA的精华主题

TA的得分主题

发表于 2019-11-15 10:54 | 显示全部楼层
你想用字符串来表示变量的名称?上传一个附件吧,不一定非要这么处理。如果非要这么处理,可以使用CallByName,参考以下贴子的3楼。
http://club.excelhome.net/thread-1501449-1-1.html

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-15 11:20 | 显示全部楼层
大灰狼1976 发表于 2019-11-15 10:54
你想用字符串来表示变量的名称?上传一个附件吧,不一定非要这么处理。如果非要这么处理,可以使用CallByNa ...

附件的话,我传不出来,我可以大概说一下
是一个模块文件,带有用户界面,点击不同的按钮选取不同区域给不同数组赋值
不同按钮采用的都是click来调用模块里的sub过程
最后再点击整合按钮将所有数组合并为一个二维数组
模块和用户界面 可以导出

TA的精华主题

TA的得分主题

发表于 2019-11-15 13:13 | 显示全部楼层
你不给我一个示例,我就给你一个示例,但是不会涉及你复杂的要求,只有关键部分(以字符串为名称调用数组,并把多个一维数组合并成二维数组)的处理,附件也不需要,只给你代码。
  1. Public arr1, arr2, arr3, arr4

  2. Sub test()
  3. Dim arrRst(7, 1 To 4), arrTmp
  4. Dim i&, j&
  5. arr1 = Array(1, 2, 3, 4)
  6. arr2 = Array(5, 6, 7, 8)
  7. arr3 = Array(9, 10, 11, 12)
  8. arr4 = Array(13, 14, 15, 16, 17, 18, 19, 20)
  9. For i = 1 To 4
  10.   arrTmp = CallByName(Me, "arr" & i, VbGet)
  11.   For j = 0 To UBound(arrTmp)
  12.     arrRst(j, i) = arrTmp(j)
  13.   Next j
  14. Next i
  15. [a2].Resize(8, 4) = arrRst
  16. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-15 14:16 | 显示全部楼层
大灰狼1976 发表于 2019-11-15 13:13
你不给我一个示例,我就给你一个示例,但是不会涉及你复杂的要求,只有关键部分(以字符串为名称调用数组, ...

十分感谢
我的之前回复的意思是
其他部分都写好了 但是在循环那部分卡住了
所以来论坛里求助
看了以后发现感觉理论上应该只有CallByName能处理的比较符合我的预想

另外也再次感谢大佬的帮助
在之前你在二楼发的链接中我也看到了3L关于CallByName 的部分示例,只是确实无法Get到用法
看了在4L的示例后大概明白了意思
非常感谢

TA的精华主题

TA的得分主题

发表于 2019-11-15 20:41 来自手机 | 显示全部楼层
本帖最后由 lss001 于 2019-11-16 13:20 编辑

提供另一思路!!!
Sub 合并一维组成二维()
    ar1 = Array(1, 2)
    ar2 = Array(3, 4, 5)
    ar3 = Array(6, 7, 8, 9)
    hb = Array(ar1, ar2, ar3) '合并一维
    t = UBound(hb)
    ReDim Ur(t)
    For i = 0 To t: Ur(i) = UBound(hb(i)): Next
    s = Application.Max(Ur)
    ReDim arr(s, t) '转二维
    For i = 0 To t
      For j = 0 To UBound(hb(i))
        arr(j, i) = hb(i)(j)
      Next
    Next
    [a1].Resize(s + 1, t + 1) = arr
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-10-18 16:29 , Processed in 0.034515 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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