ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 关于一维数组和二维数组的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-7-17 21:46 | 显示全部楼层 |阅读模式
新手学数组,有个疑惑
dim arr(1 to 5),我一直以为是有5行1列数组,但是实际上是1行5列数组

之前理解为5行1列数组,主要是受dim arr(1 to 5,1 to 3)影响,我之前一直以为,dim arr(1 to 5),是省略了后面的"1 to 3"
试了下面的代码,确认是1行5列数组
Sub test1()
  Dim arr(1 To 5)
  For x = 1 To 5
    arr(x) = x * 2
  Next x
Range("A1:E1") = arr '事实验证,arr是1行5列数组
Range("A1:A5") = Application.Transpose(arr)
End Sub

但是,我看好多资料,都在讲,这是5行1列数组,是我理解错了吗?

TA的精华主题

TA的得分主题

发表于 2019-7-17 21:58 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
自己debug一下,一切都清楚了。

TA的精华主题

TA的得分主题

发表于 2019-7-17 22:01 | 显示全部楼层
一行五列数组的说法也不对
一维数组是一条线,二维数组是一个面,两者有本质的不同

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-20 23:47 | 显示全部楼层
duquancai 发表于 2019-7-17 21:58
自己debug一下,一切都清楚了。

我发现我理解错误了arr其实是一维数组,在监视窗口中,显示是一维数组
arr.PNG
但是,我在监视Range("A1:E1") = arr时,发现问题,我看不懂这是什么过程了。
range.PNG
可以解释下,这个监视过程是啥意思吗?到底arr的数值是如何赋给Range("A1:E1")?
我在网上查了,好像不能直接用Range("A1:E1") = arr
但是,我在使用过程中,VBA没有提示错误啊。

TA的精华主题

TA的得分主题

发表于 2019-7-21 11:38 | 显示全部楼层
你的程式OK。
改寫成下列的寫法也OK。
Range("A1").Resize(1, 5) = arr

TA的精华主题

TA的得分主题

发表于 2019-7-21 11:47 | 显示全部楼层
楼主就把一维理解为横排,二维理解为竖列吧。一列就是二维的,一横就是一维的。尽管这种理解法不是最严谨,但管用。

TA的精华主题

TA的得分主题

发表于 2019-7-21 13:26 | 显示全部楼层
楼主我来给你答疑:

最初的电脑,DOS系统的,屏幕显示不是多窗口的,而是你打一行代码下去,运行之后,Print一行结果。

那么,考虑到10个数据,你是排成1行10列节省屏幕显示呢?(以便看到之前的代码操作和结果)
还是不管不顾,一下子在屏幕上显示10行 但是每行只有1个数据呢(会把之前的操作和结果全部替换掉!)

因此,毫不犹豫,最初的电脑工程师们选择了一维数组的输出形式是按1行多列,而不是多行一列。

这个就是,中世纪马的屁股宽度确定了英国道路的宽度,继而决定了英国火车铁轨的宽度,最后影响到现代宇宙火箭的直径。

一样的道理。

这么说,你就应该理解了。

紧接着,微软视窗出现了,电子表格软件产生了,
工程师们现在发觉,作为一个有很多行很多列的数据表,由于行的高度基本可以确定(人眼视角)
而列的宽度,往往取决于实际数据的内容的长度。
所以,往下拉展示行数据,比往右拉展示列数据,
可以更好、更多、更有效率的利用屏幕展示更多的数据库信息。

又因为,数据库的结构,也往往是显示单一信息源各种属性的列数基本固定(几十列哪怕几百列)
而不同的信息来源(客户数、日期日志等)需要的行数,大的数据库几乎都要几十万几百万行。

所以,电子表格,被工程师们默认设置为行数,远远比列数多。

因此,二维数组,就成了行向下扩展,列向右扩展的模式。
然而,默认一维数组,无法更改,仍保留为一行多列显示的设置。

因此,arr(1 To 10)是一维数组表示1行10列
而 brr(1 T0 100, 1 To 10) 是二维数组却表示100行10列。

如果需要表示1行10列的二维数组,那么是 crr(1 To 1,1 To 10)

以上解答完毕。

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-21 21:40 | 显示全部楼层
香川群子 发表于 2019-7-21 13:26
楼主我来给你答疑:

最初的电脑,DOS系统的,屏幕显示不是多窗口的,而是你打一行代码下去,运行之后,P ...

谢谢!谢谢!谢谢!谢谢!

TA的精华主题

TA的得分主题

发表于 2020-8-5 11:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
香川群子 发表于 2019-7-21 13:26
楼主我来给你答疑:

最初的电脑,DOS系统的,屏幕显示不是多窗口的,而是你打一行代码下去,运行之后,P ...

学到了,真是涨见识了,大人讲的很详细,万分感谢。

TA的精华主题

TA的得分主题

发表于 2024-1-14 20:21 | 显示全部楼层
香川群子 发表于 2019-7-21 13:26
楼主我来给你答疑:

最初的电脑,DOS系统的,屏幕显示不是多窗口的,而是你打一行代码下去,运行之后,P ...

那么,是否可以这么理解:一行多列是一维数组,多行一列是二维数组呢?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 07:33 , Processed in 0.042748 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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