ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 小白看“蓝桥玄霜”老师的实例学字典

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-17 10:41 | 显示全部楼层
蓝桥玄霜 发表于 2014-8-17 08:31
可以写成  Range("g2",Range("g1“)).End(xlDown)
自己多试试进步会很快。

Sub 测试()
  Dim arr1() As Variant, arr2() As Variant
  arr1 = [a1:a10].Value
  MsgBox "转置前的最大上界:" & UBound(arr1)
  For i = 1 To UBound(arr1)
    MsgBox (arr1(i, 1))
  Next
  
  arr2 = WorksheetFunction.Transpose(arr1)
  MsgBox "转置后的最大上界:" & UBound(arr2)
  For i = 1 To UBound(arr2)
    MsgBox (arr2(i))   '这是一维还是二维?是一维怎么上限是1而不是0? 改成0就报错:下标越界
  Next
  
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-17 10:44 | 显示全部楼层
jiminyanyan 发表于 2014-8-16 21:12
继续努力。。。。。。。。。

老师帮我看看,学习中又遇到问题了,一列单元格区域赋值给数组,转置前应该是二维,转置后,这是一维数组还是二维数组呀?

TA的精华主题

TA的得分主题

发表于 2014-8-17 10:55 | 显示全部楼层
转置后的数组arr2是一维数组,但是一维数组也可以任意指定起始下标的,比如可以声明:arr(3 to 16)
在没有指定的情况下,大都是从0开始的。
可以在本地窗口中看到。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-17 11:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 renahu 于 2014-8-17 11:09 编辑
蓝桥玄霜 发表于 2014-8-17 10:55
转置后的数组arr2是一维数组,但是一维数组也可以任意指定起始下标的,比如可以声明:arr(3 to 16)
在没有 ...


可是这个arr2并没有声明:arr(1 to 10) 呀?它下限怎么从1而不是从0开始了?而且UBound(arr2)显示是10而不是9,显然它已经把下限定为1了,是不是转置后的数组,如果是一维数组的话,下限一定是1而不是0?

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-17 11:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
呵呵,本来学字典,现在先学学数组

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-17 22:20 | 显示全部楼层
jiminyanyan 发表于 2014-8-16 21:12
继续努力。。。。。。。。。

您好,18楼中山菊花版主的代码有些疑问,您能帮看看吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-17 22:21 | 显示全部楼层
unsamesky 发表于 2014-8-16 13:10

您好,18楼中山菊花版主的代码有些疑问,您能帮看看吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-18 20:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
实例5  前期绑定的字典实例
一、问题的提出:
有多列多行数据,其中有重复的行,要求编写一段代码,求得不重复的行数据。
如图实例5-1所示。
  1. Sub 保留原数据()  ‘by:ldy888
  2. ‘前期绑定,需先引用c:\windows\system32\scrrun.dll
  3.      Dim d As New Dictionary,t
  4.      For i = 2 To 5
  5.          Set d(Cells(i, 1) & "") = Range(Cells(i, 1), Cells(i, 4))
  6. Next
  7. t=d.items        
  8. [A11].Resize(d.Count, 4) = Application.Transpose(Application.Transpose(t))
  9. End Sub
复制代码
三、代码详解
1、Dim d As New Dictionary, t  :本段代码需要先引用微软的脚本运行时库Microsoft Scripting Runtime,可在VBE窗口,从菜单-工具-引用,然后勾选Microsoft Scripting Runtime,或者点击浏览,在添加引用对话框中选择c:\windows\system32\scrrun.dll,并打开,确定。完成引用。在本声明语句中把字典d声明为New Dictionary。这就是”前期绑定”了。上面的实例用的是创建对象语句:
Set d = CreateObject("Scripting.Dictionary"),称为”后期绑定”。不需要先引用脚本运行时库。
2、Set d(Cells(i, 1) & "") = Range(Cells(i, 1), Cells(i, 4)) :把单元格对象加入字典,它对应的项是同一行的单元格区域。注意,这里用了Set,和前面的几例不一样哦。如果用Typename(d(Cells(i, 1) & "")),得到的是一个Range对象。这里的Cells(i, 1) & ""也可以用Cells(i, 1).Value来代替。
3、t=d.items   :把字典d中存在的所有的关键字对应的项赋给变量t。得到的是一个一维数组,下限为0,上限为d.Count-1。
4、[A11].Resize(d.Count, 4) = Application.Transpose(Application.Transpose(t)) :这句用了两次工作表转置函数Transpose之后赋给A11单元格开始的区域中。没明白两次置换是何目的?

TA的精华主题

TA的得分主题

发表于 2014-8-23 21:23 | 显示全部楼层
renahu 发表于 2014-8-18 20:55
实例5  前期绑定的字典实例
一、问题的提出:
有多列多行数据,其中有重复的行,要求编写一段代码,求得 ...

http://club.excelhome.net/thread-1063511-1-1.html

TA的精华主题

TA的得分主题

发表于 2014-8-23 21:25 | 显示全部楼层
renahu 发表于 2014-8-18 20:55
实例5  前期绑定的字典实例
一、问题的提出:
有多列多行数据,其中有重复的行,要求编写一段代码,求得 ...

将一维数组t  变为二维
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-20 06:24 , Processed in 0.041947 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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