ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

请教个简单数组写法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-4-21 15:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
aw是range类型的变量

TA的精华主题

TA的得分主题

发表于 2006-4-23 00:24 | 显示全部楼层

还是 copymemory 效率高些:

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)


Sub xxx()
Dim arr1(), arr2(1 To 3, 1 To 4)
arr1 = Range("a1:a12")
CopyMemory ByVal VarPtr(arr2(1, 1)), ByVal VarPtr(arr1(1, 1)), 12 * 16'variant需要16个字节存储空间
Range("b1:e3") = arr2
End Sub

TA的精华主题

TA的得分主题

发表于 2006-4-23 00:29 | 显示全部楼层

copymemory可以实现不同维数数组间的转换,如:

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Dim a(5, 7) As Byte, b(15, 2) As Byte, c(47) As Byte, d(2, 3, 3) As Byte '定义48个元素的四个数组用于测试


Sub xxxx()
Dim i As Integer, j As Integer, k As Integer

For i = 0 To 5 '随机定义数组a
For j = 0 To 7
a(i, j) = Int(Rnd * 128)
Next
Next

Debug.Print "array a():" '数组a( 6 行8 列)
For i = 0 To 5
For j = 0 To 7
Debug.Print Right(Space(5) & a(i, j), 5);
Next
Debug.Print
Next
Debug.Print

Debug.Print "array b():" '数组b( 16 行 3 列)
CopyMemory b(0, 0), a(0, 0), 48
For i = 0 To 15
For j = 0 To 2
Debug.Print Right(Space(5) & b(i, j), 5);
Next
Debug.Print
Next
Debug.Print


Debug.Print "array c():" '数组c( 48 行 1 列)
CopyMemory c(0), b(0, 0), 48
For i = 0 To 47
Debug.Print Right(Space(5) & c(i), 5)
Next
Debug.Print

Debug.Print "array d():" '数组d( 3 行 4 列 4 层)
CopyMemory d(0, 0, 0), c(0), 48
For i = 0 To 2
For j = 0 To 3
For k = 0 To 3
Debug.Print Right(Space(5) & d(i, j, k), 5);
Next
Debug.Print
Next
Debug.Print "---------------------------"
Next
End Sub

返回:

array a():
31 125 7 49 46 62 19 60
32 80 69 20 120 83 64 49
13 100 58 96 76 106 2 26
9 13 42 16 0 68 84 69
105 10 24 86 58 45 19 90
118 67 11 96 51 59 62 26

array b():
31 24 106
32 11 68
13 49 45
9 20 59
105 96 19
118 16 64
125 86 2
80 96 84
100 46 19
13 120 62
10 76 60
67 0 49
7 58 26
69 51 69
58 62 90
42 83 26

array c():
31
32
13
9
105
118
125
80
100
13
10
67
7
69
58
42
24
11
49
20
96
16
86
96
46
120
76
0
58
51
62
83
106
68
45
59
19
64
2
84
19
62
60
49
26
69
90
26

array d():
31 7 46 19
9 42 0 84
125 49 62 60
13 16 68 69
---------------------------
32 69 120 64
105 24 58 19
80 20 83 49
10 86 45 90
---------------------------
13 58 76 2
118 11 51 62
100 96 106 26
67 96 59 26
---------------------------

TA的精华主题

TA的得分主题

发表于 2006-4-23 01:21 | 显示全部楼层

谢谢northwolves,第一次认识这东西,好。

TA的精华主题

TA的得分主题

发表于 2006-4-23 05:05 | 显示全部楼层

回答十楼

aw = Sheets("sheet1").Cells(1, 1).Resize(12, 1),这句的aw是一个Variant类型的变量赋值后为二维数组

Cells的Index属性用法是顺序从左到右,比如Range("A2"),可以表示为Cells(257)

十二,十三楼的代码 楼的代码,收藏学习,谢谢。

TA的精华主题

TA的得分主题

发表于 2006-7-15 01:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
反正我觉得循环挺好的为什么一定要用数组呢,用了数组就要多一次赋值

TA的精华主题

TA的得分主题

发表于 2006-7-15 09:39 | 显示全部楼层
QUOTE:
以下是引用northwolves在2006-4-23 0:29:56的发言:

copymemory可以实现不同维数数组间的转换,如:

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Dim a(5, 7) As Byte, b(15, 2) As Byte, c(47) As Byte, d(2, 3, 3) As Byte '定义48个元素的四个数组用于测试


Sub xxxx()
Dim i As Integer, j As Integer, k As Integer

For i = 0 To 5 '随机定义数组a
For j = 0 To 7
a(i, j) = Int(Rnd * 128)
Next
Next

Debug.Print "array a():" '数组a( 6 行8 列)
For i = 0 To 5
For j = 0 To 7
Debug.Print Right(Space(5) & a(i, j), 5);
Next
Debug.Print
Next
Debug.Print

Debug.Print "array b():" '数组b( 16 行 3 列)
CopyMemory b(0, 0), a(0, 0), 48
For i = 0 To 15
For j = 0 To 2
Debug.Print Right(Space(5) & b(i, j), 5);
Next
Debug.Print
Next
Debug.Print


Debug.Print "array c():" '数组c( 48 行 1 列)
CopyMemory c(0), b(0, 0), 48
For i = 0 To 47
Debug.Print Right(Space(5) & c(i), 5)
Next
Debug.Print

Debug.Print "array d():" '数组d( 3 行 4 列 4 层)
CopyMemory d(0, 0, 0), c(0), 48
For i = 0 To 2
For j = 0 To 3
For k = 0 To 3
Debug.Print Right(Space(5) & d(i, j, k), 5);
Next
Debug.Print
Next
Debug.Print "---------------------------"
Next
End Sub

返回:

array a():
   31  125    7   49   46   62   19   60
   32   80   69   20  120   83   64   49
   13  100   58   96   76  106    2   26
    9   13   42   16    0   68   84   69
  105   10   24   86   58   45   19   90
  118   67   11   96   51   59   62   26

array b():
   31   24  106
   32   11   68
   13   49   45
    9   20   59
  105   96   19
  118   16   64
  125   86    2
   80   96   84
  100   46   19
   13  120   62
   10   76   60
   67    0   49
    7   58   26
   69   51   69
   58   62   90
   42   83   26

array c():
   31
   32
   13
    9
  105
  118
  125
   80
  100
   13
   10
   67
    7
   69
   58
   42
   24
   11
   49
   20
   96
   16
   86
   96
   46
  120
   76
    0
   58
   51
   62
   83
  106
   68
   45
   59
   19
   64
    2
   84
   19
   62
   60
   49
   26
   69
   90
   26

array d():
   31    7   46   19
    9   42    0   84
  125   49   62   60
   13   16   68   69
---------------------------
   32   69  120   64
  105   24   58   19
   80   20   83   49
   10   86   45   90
---------------------------
   13   58   76    2
  118   11   51   62
  100   96  106   26
   67   96   59   26
---------------------------




请教个简单数组写法

请教个简单数组写法

TA的精华主题

TA的得分主题

发表于 2006-7-15 11:39 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-11-19 10:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
从今天开始研究神奇的数组

TA的精华主题

TA的得分主题

发表于 2007-11-19 10:29 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-15 18:02 , Processed in 0.044857 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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