Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2517|回复: 5

[已解决]能否将二维嵌套数组oRR0直接赋值给表B:J列?

[复制链接]
发表于 2015-3-10 17:37 | 显示全部楼层 |阅读模式
本帖最后由 gwfzh 于 2015-3-13 15:43 编辑

    能否将二维嵌套数组oRR0直接赋值给表B:J列?
各位老师:
        Sub dc()程序是将由 "原始表", "原始表hj", "原始表fhj"得到的各种数据即字典值“ dic(k0(I) & br(j0))”赋值给数组orr0(1 To 3)后,再赋值给该表B:J列(即B:DE:GH:J三个区域),由于每个条目值有3个元素(brr(I, 2), brr(I, 8), brr(I, 10)),经字典值加载后,数组 orr0(I+ 1, j0 + 1) = dic(k0(I) & br(j0)) 变成了二维嵌套数组,现由于数据量大,程序有310多行语句,运行时较慢,能否将二维嵌套数组oRR0不通过循环直接赋值给该表B:J列(即B:DE:GH:J三个区域)?请各位老师帮忙了!谢谢!!! 能否将二维嵌套数组oRR0直接赋值给表BJ列?.zip (28.67 KB, 下载次数: 9)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-3-10 21:13 | 显示全部楼层
楼主解说下程序吧,代码看的有点晕,主要一个问题,就是H表的A列是如何来的?
回复

使用道具 举报

发表于 2015-3-11 09:50 | 显示全部楼层    本楼为最佳答案   
  1. Sub Macro1()
  2. Dim arr, brr, crr, i&, ii&, j%, n&
  3. Set d = CreateObject("scripting.dictionary")
  4. Sheets("H").Activate
  5. arr = Range("a3:a" & Range("a65536").End(xlUp).Row)
  6. For j = 2 To 8 Step 3
  7.     brr = Sheets("" & Cells(1, j)).Range("a2").CurrentRegion
  8.     For i = 3 To UBound(brr)
  9.         d(brr(i, 1)) = i
  10.     Next
  11.     ReDim crr(1 To UBound(arr), 1 To 3)
  12.     For ii = 1 To UBound(arr)
  13.         If d.exists(arr(ii, 1)) Then
  14.             n = d(arr(ii, 1))
  15.             crr(ii, 1) = brr(n, 2)
  16.             crr(ii, 2) = brr(n, 8)
  17.             crr(ii, 3) = brr(n, 10)
  18.         End If
  19.     Next
  20.     Cells(3, j).Resize(UBound(crr), 3) = crr
  21.     d.RemoveAll
  22. Next
  23. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
gwfzh + 3 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2015-3-11 09:53 | 显示全部楼层
gdpgdp317 发表于 2015-3-10 21:13
楼主解说下程序吧,代码看的有点晕,主要一个问题,就是H表的A列是如何来的?

程序中用了2次字典:d0(brr(I, 1)) 和dic(brr(I, 1) & sh.Name) ,d0(brr(I, 1)) = ""是将有数据的装入字典d0,用于表格第一列,dic是将 "原始表", "原始表hj", "原始表fhj"三表中的第2、8、10列装入字典,关键是这三列值装入字典后,再orr0(I+ 1, j0 + 1) = dic(k0(I) & br(j0)) 后,二维数组orr0转换成了嵌套数组,这个二维嵌套数组oRR0怎样直接赋值给该表B:J列,请老师帮忙了!谢谢!!!
回复

使用道具 举报

 楼主| 发表于 2015-3-11 11:01 | 显示全部楼层
本帖最后由 gwfzh 于 2015-3-11 11:29 编辑
dsmch 发表于 2015-3-11 09:50

谢谢“dsmch”老师的帮助!请问,像arr(i,j)(k)这样的数组能否直接向单元格赋值?另代码中“
    brr = Sheets("" & Cells(1, j)).Range("a2").CurrentRegion"语句是否取所有各表的值?也包括 "原始表", "原始表hj", "原始表fhj"三表的值?希望老师能继续解惑!!!谢谢了!!!
  另:能否将arr(i,j)(k)这样的嵌套数组,用循环将其转换成or0(i, jJ) 一个二维数组,也请老师帮忙了!

点评

对的,用一个字典就行了,用不到数组嵌套  发表于 2015-3-11 11:36
回复

使用道具 举报

 楼主| 发表于 2015-3-11 12:05 | 显示全部楼层
本帖最后由 gwfzh 于 2015-3-11 13:09 编辑
gwfzh 发表于 2015-3-11 11:01
谢谢“dsmch”老师的帮助!请问,像arr(i,j)(k)这样的数组能否直接向单元格赋值?另代码中“
    brr =  ...

我有81个表,不知 brr = Sheets("" & Cells(1, j)).Range("a2").CurrentRegion是否影响速度?
另:能否将arr(i,j)(k)这样的嵌套数组,用循环将其转换成or0(i, jJ) 一个二维数组,请老师帮忙了!

点评

直接把二维数组转换为二维数组,搞什么数组嵌套?几万个数据也就是一分钟搞定,莫名其妙  发表于 2015-3-11 13:57
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-19 05:48 , Processed in 0.381001 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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