ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

一维数组赋值和输出的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-6-19 17:32 | 显示全部楼层 |阅读模式

这几天在研究直接通过单元格区域给数组赋值,有些很玄的东西真是搞不懂。特求教于高手。

Sub test2() Dim myData() Dim MyRange As Range Dim i As Integer Set MyRange = Range("A1:A27") ReDim myData(1 To 27) 'myData() = MyRange.Value For i = 1 To 27 myData(i) = Cells(i, 1).Value Next Range("C1:C27").Value = myData() For i = 1 To 27 Cells(i, 5) = myData(i) Next End Sub 在test2过程里面假设A1:A27单元格里面为1到27的数字,如果这样给数组赋值: myData() = MyRange.Value 那么,数组可以用以下方式输出: Range("C1:C27").Value = myData() ’C列得到1到27 但是,不可以按下述方式输出,出现下标越界的错误: For i = 1 To 27 Cells(i, 5) = myData(i) Next 为什么?? 如果以下述方法给数组赋值: For i = 1 To 27 myData(i) = Cells(i, 1).Value Next 那么,用下述语句输出数组时,只能得到第一个值1 Range("C1:C27").Value = myData() ’C列全是1 但是可以用下面的方式得到1到27的结果: For i = 1 To 27 Cells(i, 5) = myData(i) Next 为什么???

Sub test3() Dim myData() Dim MyRange As Range Dim i As Integer Set MyRange = Range("A1:B27") ReDim myData(1 To 27, 1 To 2) myData() = MyRange.Value For i = 1 To 27 myData(i, 1) = Cells(i, 1).Value myData(i, 2) = Cells(i, 2).Value Next ‘Range("C1:D27").Value = myData() For i = 1 To 27 Cells(i, 7) = myData(i, 1) Cells(i, 8) = myData(i, 2) Next i End Sub 对于二维数组,好像没有上面奇怪的问题。

TA的精华主题

TA的得分主题

发表于 2005-6-19 18:12 | 显示全部楼层

myData() = MyRange.Value myData()是垂直数组

For i = 1 To 27 myData(i) = Cells(i, 1).Value Next myData()是水平数组

TA的精华主题

TA的得分主题

发表于 2005-6-19 20:19 | 显示全部楼层
顶2楼!Range("C1:C27").Value = myData() 直接简写成就可以了Range("C1:C27") = myData

TA的精华主题

TA的得分主题

发表于 2005-6-20 12:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Dim myData()定义的是动态数组 ReDim myData(1 To 27)重定义数组 myData() = MyRange.Value又重定义了数组并赋值,这实际是个二维数组,可以用 For i = 1 To 27 Cells(i, 5) = myData(i, 1) Next 传递数组元素到指定单元格中。

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-6-20 15:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

Sub test() Dim myData(1 To 20) Dim i As Integer

For i = 1 To 20 myData(i) = Cells(i, 1).Value Next Range("C1:C20").Value = myData End Sub

我倾向于接受二楼的解释,因为,上面的运行结果还是数组的第一个值。

TA的精华主题

TA的得分主题

发表于 2005-6-20 16:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

我认为CHENJUN兄的解释更透彻。水平数组、垂直数组的概念没有听说过,孤陋寡闻啊。

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-6-20 18:00 | 显示全部楼层
以下是引用button在2005-6-20 16:24:00的发言:

我认为CHENJUN兄的解释更透彻。水平数组、垂直数组的概念没有听说过,孤陋寡闻啊。

确实是我们孤陋寡闻哦,请看贴图,这是下面代码的运行结果。

Sub test() Dim myData(1 To 20) Dim i As Integer

For i = 1 To 20 myData(i) = Cells(i, 1).Value Next 'Range("C1:C20").Value = myData Range(Cells(1, 2), Cells(1, 21)).Value = myData End Sub

TA的精华主题

TA的得分主题

发表于 2005-6-20 20:07 | 显示全部楼层
以下是引用hxhgxy在2005-6-19 17:32:00的发言: 在test2过程里面假设A1:A27单元格里面为1到27的数字,如果这样给数组赋值: myData() = MyRange.Value 那么,数组可以用以下方式输出: Range("C1:C27").Value = myData() ’C列得到1到27 但是,不可以按下述方式输出,出现下标越界的错误: For i = 1 To 27 Cells(i, 5) = myData(i) Next 为什么??

Range("C1:C27").Value = myData() 返回一个1为数组,通常1唯数组可以用例如myData(10)来表示, 等价于myData(10,0)其中0可以省略,excel内定数组由0起始,也可以人为定义起始数,如myData(1 to 10,1 to 1).由Range("C1:C27").Value = myData() 所获得的数组就属于这种情况(列和行对应序号由1开始而不是0,类似于range()的调用)。调用数组可以用:

For i = 1 To 27 Cells(i, 5) = myData(i,1) Next

TA的精华主题

TA的得分主题

发表于 2005-6-20 20:12 | 显示全部楼层

Sub test()

Dim myData(1 To 20)

Dim i As Integer

For i = 1 To 20

myData(i) = Cells(i, 1).Value

Next

Range("C1:C20").Value = Application.Transpose(myData) '垂直与水平一说见 Transpose 说明 End Sub

TA的精华主题

TA的得分主题

发表于 2005-6-20 20:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
以下是引用hxhgxy在2005-6-19 17:32:00的发言: For i = 1 To 27 Cells(i, 7) = myData(i, 1) Cells(i, 8) = myData(i, 2) Next i End Sub 对于二维数组,好像没有上面奇怪的问题。

起始列(或行)为0的1唯数组,0可以省略,起始列(或行)为1的1唯数组1不能省略,多唯数组唯数标示均不可省略

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

本版积分规则

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

GMT+8, 2024-5-4 02:37 , Processed in 0.042865 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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