Excel精英培训网

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

[分享] 关于数组和单元格赋值的理解

[复制链接]
发表于 2010-8-12 21:23 | 显示全部楼层 |阅读模式
跟兰版学数组学了10讲啦,关于单元格和数组赋值渐渐的开始清晰啦,我把兰版的东东复制下来,加上自己的理解,写出来请大家指点,看我理解的正确不,谢谢各位老师和童鞋。

为了简单期间,我只讨论单行区域和单列区域与数组之间的赋值;

1.单元格给数组变量赋值,变量的定义一定要是Variant类型;(Dim arr as Variant )

2.无论是单行区域还是单列区域,给数组变量赋值后,都生成二维数组;

 arr=range("A1:C1") ; arr=range("A1:A3")  (这两个数组都是二维数组)

3.数组给单元格赋值的时候,只要是二维数组,可以直接进行赋值;

 range("A1:C1")=arr ; range("A1:A3")=arr  (这两个数组都是二维数组)

4.如果是一维数组,可以直接赋值给单行的单元格区域;

range("A1:A3")=arr  (这里的数组arr是一维数组)

5.如果是一维数组,不能直接赋值给单列的单元格区域;

 range("A1:A3")=arr  (此时arr是一维数组,这样是不行的)

如果想要赋值的话,可以转置一下

 range("A1:A3")=application.transpose(arr)  (此时arr是一维数组,经过了转置,可以赋值给单列单元格区域啦)

6.单列的单元格区域,转化成一维数组;

首先的到一个二维数组 
arr=range("A1:A3")  (此时arr是二维数组,这样是不行的)

然后转置一下
arr1=application.transpose(arr) (此时的到的arr1就是一维数组)

7.单行的单元格区域,转化成一维数组;

(1)首先的到一个二维数组, 
    arr=range("A1:C1")  (此时arr是二维数组,这样是不行的)

    然后经过两次转置
    arr1=application.transpose(application.transpose(arr) )(此时的到的arr1就是一维数组)
(2)方法2 (此方法得到苦真人指点,注意,一定不能缺少  & “”,否则还是二维数组)
    arr=[A1:C1 & ""]


注意:千万不要企图把固定大小的VBA数组赋值单元格数据,那是一定会出错的。(这是固定数组的声明 Dim arr(1 to 10, 1  to  2 ) )
[此贴子已经被作者于2010-8-18 11:05:45编辑过]
发表于 2010-8-12 21:28 | 显示全部楼层

爱学习,善思考的好学生,总结的不错
回复

使用道具 举报

 楼主| 发表于 2010-8-18 00:45 | 显示全部楼层

补充,今天在学习的过程中,在兰版和学委的帮助下,搞清楚了向单元格批量赋值的基本方法,其实也是数组向单元格赋值,所以作为补充来写。

1.单行批量赋值

(1)将数值常量赋值给单元格,可以用array函数
 Range("A1:D1") = Array(1, 2, 3, 4) 
 也可以用这种形式
 Range("A4:D4") = [{1,2,3,4}] 
    这种形式实际上是Evaluate函数的缩写;
还有这种形式
 Range("A1:D1") = Split("1,2,3,4", ",")  注意:这种方法赋值进去的是文本型数值;

(2)将文本常量赋值给单元格,和数值常量赋值给单元格一样
 Range("A3:D3") = Array("S1", "S2", "S3", "S4")
Range("A6:D6") = [{"S1","S2","S3","S4"}] 
Range("A1:D1") = Split("S1,S2,S3,S4", ",")

(3)将变量赋值给单元格,可以用array函数
 Range("A2:D2") = Array(S1, S2, S3, S4) (S1,S2,S3,S4在这里是声明并赋值的变量)
 同样可以用Evaluate函数,但是不能用缩写形式,而且需要先把需要处理的内容写成字符串的形式
 s = "{" & S1 & "," & S2 & "," & S3 & "," & S4 & "}" 
Range("A5:D5") = Evaluate(s)

2.单列的批量赋值

(1)array函数法,不过需要用到transpose函数转换一下;

Range("A8:A11") = Application.Transpose(Array(1, 2, 3, 4))  '注:数组里面的1,2,3,4是数值;
Range("B8:B11") = Application.Transpose(Array(S1, S2, S3, S4))  '注:数组里面的S1,S2,S3,S4是变量;
Range("C8:C11") = Application.Transpose(Array("S1", "S2", "S3", "S4")) '注:数组里面的"S1","S2","S3","S4"是文本;

(2)用Evaluate函数或其缩写的形式,不过要注意,逗号需要变成分号;
 
Range("D8:D11") = [{1;2;3;4}] 
s = "{" & S1 & ";" & S2 & ";" & S3 & ";" & S4 & "}"
Range("E8:E11") = Evaluate(s) 
Range("F8:F11") = [{"S1","S2","S3","S4"}]


(3)用Split函数
Range("C8:C11") = Application.Transpose(Split("S1,S2,S3,S4", ","))

3.多行多列的批量赋值(这里以四行两列为例)

只能用Evaluate方法完成,而且不能用缩写形式
 s = "{""S1""," & S1 & ";""S2""," & S2 & ";""S3""," & S3 & ";""S4""," & S4 & "}" 
Range("A13:B16") = Evaluate(s)
   
注:字符串s = "{""S1""," & S1 & ";""S2""," & S2 & ";""S3""," & S3 & ";""S4""," & S4 & "}"
 的实际内容是 "{"S1",1;"S2",2;"S3",3;"S4",4}"
 不过在写字符串的时候,双引号外面要加一层双引号,和变量连接要用&符号


 
示例代码,请下载     
nboRYI7K.rar (9.46 KB, 下载次数: 101)
回复

使用道具 举报

发表于 2010-8-18 16:34 | 显示全部楼层

只是看看
回复

使用道具 举报

发表于 2010-8-18 16:57 | 显示全部楼层

谢谢你总结出来,给我们这些上不了课的同学一些帮助。array函数之前很少用到过,现在学习了。
回复

使用道具 举报

发表于 2010-8-18 20:43 | 显示全部楼层

[em04]
回复

使用道具 举报

发表于 2012-1-24 15:47 | 显示全部楼层
方法2 (此方法得到苦真人指点,注意,一定不能缺少  & “”,否则还是二维数组)
    arr=[A1:C1 & ""]
这个办法好,是不是独孤九式啊{:3512:}
回复

使用道具 举报

发表于 2012-1-29 16:39 | 显示全部楼层
认真学习了一遍,收获很大哦!
回复

使用道具 举报

发表于 2012-2-18 08:00 | 显示全部楼层
都是高人啊,以后得多多向他们请教。
回复

使用道具 举报

发表于 2012-4-6 08:46 | 显示全部楼层
原来都是VB的东东,看都看不懂
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 22:56 , Processed in 0.442043 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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