ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享+测试]替代Vlookup函数,在超大数据量下进行查找

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-1-18 17:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用caoejiangboy在2007-1-17 21:17:13的发言:

请楼主帮忙回答下面两个问题:

(1)“原始数据”可以在单独的一张EXCEL表格中吗?

(2)“查询”一旦Run了之后,字体和格式都返回到原来了,可否让把保持格式不变?

谢谢!

(1)可以

(2)把 Range("b:iv").Clear 改成 Range("b:iv").ClearContents 即可

TA的精华主题

TA的得分主题

发表于 2007-1-18 18:43 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-1-18 18:49 | 显示全部楼层
QUOTE:
以下是引用Long_III在2005-11-25 11:26:28的发言:

再罗说一点,昨天优化了同事的一个查询单价代码,原先我全部采用数组,用find查找单价,200多个表(平均50行)里要运行16秒,而后来采用了dictionary之后,只需1.4秒,连我自己都不敢相信。

思路是,先把要查询的数据放到一个数组里,然后用字典记录下查找的值跟它在数组里的位置,以后就直接用数组查找,找到它在数组的位置(跟本贴一楼的思路一致)

源代码:

怎么没有那个自定义函数Textsht(sht)?

TA的精华主题

TA的得分主题

发表于 2007-1-19 10:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
QUOTE:
以下是引用爱歌学习在2007-1-18 17:45:57的发言:

(1)可以

(2)把 Range("b:iv").Clear 改成 Range("b:iv").ClearContents 即可

(2)把 Range("b:iv").Clear 改成 Range("b:iv").ClearContents 即可

好像不对啊,格式还是和原始数据不一样啊

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-19 11:32 | 显示全部楼层

[转贴]http://www.officefans.net/cdb/viewthread.php?tid=47628&fpage=1&highlight=dictionary

Microsoft Windows Script 技术对象之Dictionary对象说解

QUOTE:

QUOTE:
请先设定引用项目 Windows Script Host Object Model

1.Dictionary对象的属性和说明
      属 性                  说 明
      CompareMode           (仅用于VBScript)设定或返回键的字符串比较模式
      Count                  只读。返回Dictionary里的键/条目对的数量
      Item(key)               设定或返回指定的键的条目值
      Key(key)               设定键值
   1.1.CompareMode 属性
      描述:设置或返回某个 Dictionary 对象中的比较字符串关键字的比较模式。
      语法:object.CompareMode[ = compare]
            CompareMode 属性具有下列部分:
            部分      描述
            object     必需的。总是一个 Dictionary 对象的名称。
            compare   可选的。如果提供的话,compare 是一个代表比较模式的值,该比
                      较模式用于象 StrComp 这样的函数。
                     设置:compare 参数可以具有下列值:
                     常数                值   描述
                     VbUseCompareOption -1   使用 Option Compare 语句的设置值进行比较。
                     VbBinaryCompare      0   进行二进制比较。
                     VbTextCompare        1   进行文字比较。
                     VbDatabaseCompare    2   仅用于 Microsoft Access。进行基于您自己数据库
                                              中信息的比较。
      说明:如果试图对已经包含数据的 Dictionary 对象的比较模式进行更改的话,就会
            出错。
            CompareMode 属性所用的参数值与 StrComp 函数所用的 compare 参数相
            同。可以用大于 2 的值表示使用特定 Locale IDs (LCID) 的比较。
    1.2.Count 属性
      描述:返回集合或 Dictionary 对象中的条目数。只读。
      语法:object.Count
            object 总是"应用于"列表中某一项的名称。
    1.3.Item 属性
      描述:对 Dictionary 对象中指定的 Key,设置或返回一个 Item 。对于集合来说,基于指定的 Key ,返回一个 Item 。读/写属性。
      语法:object.Item(key) [= newitem]
            Item 属性具有下列部分:
            部分     描述
            object    必需的。总是一个集合或 Dictionary 对象的名称。
            key      必需的。与被检索或添加的条目相关联的 Key 。
            newitem  可选的。仅用于 Dictionary 对象;没有用于集合的应用程序。如果
                     提供的话,newitem 是与指定的Key 相关联的新值。
     说明:如果在改变某个 item 时,没有找到 key,则用指定的newitem创建一个新
           的 key 。如果在试图返回某个已存在条目时,没有找到 key,则创建一个新
           key,且其相应的条目为空。
    1.4.Key 属性
      描述:在一个 Dictionary 对象中设置一个 key。
      语法:object.Key(key) = newkey
            Key 属性具有下列部分:
            部分     描述
            object    必需的。总是一个 Dictionary 对象的名字。
            key      必需的。被更改的 Key值。
            newkey   必需的。替换指定 key 的新值。
      说明:如果在更改某个 key 时,没有找到 key,则会出现运行时错误。

2.Dictionary对象的方法和说明
      方 法                     说 明
      Add(key,item)               增加键/条目对到Dictionary
      Exists(key)                 如果指定的键存在,返回True,否则返回False
      Items()                    返回一个包含Dictionary对象中所有条目的数组
      Keys()                    返回一个包含Dictionary对象中所有键的数组
      Remove(key)               删除一个指定的键/条目对
      RemoveAll()               删除全部键/条目对
    2.1.Add方法
      描述:添加一对相对应的关键字和条目到 Dictionary 对象。
      语法:object.Add key, item
            Add方法的语法有如下几部分:
            部分      描述
            Object     必需的。一个 Dictionary 对象的名字。
            Key       必需的。与所添加的条目相关联的关键字。
            Item      必需的。与所添加的关键字相关联的条目。
      说明:如果该关键字已经存在,则产生一个错误。
    2.2.Exists 方法
      描述:如果在 Dictionary 对象中指定的关键字存在,返回 True,若不存在,返回
            False。
      语法:object.Exists(key)
            Exists 方法语法有如下几部分:
            部分           描述
            Object          必需的。始终是一个 Dictionary 对象的名字。
            Key            必需的。在 Dictionary 对象中搜索的 Key 值。
    2.3.Items 方法
      描述:返回一个包含 Dictionary 对象中所有条目的数组。
      语法:object.Items
            object始终是一个 Dictionary 对象的名字。
            说明:下面的代码举例说明了 Items 方法的使用。:

Dim a, d, i             '创建一些变量
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"     '添加一些关键字和条目。
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
a = d.Items             '取得条目

For i = 0 To d.Count -1 '遍历数组
    Print a(i)          '打印条目
Next

2.4.Keys方法
      描述:返回一个数组,该数组包含一个 Dictionary 对象中的全部已有的关键字。
      语法:object.Keys
            object始终是一个 Dictionary 对象的名字。
            说明:下面的代码举例说明了 Keys 方法的使用。

Dim a, d, i             '创建一些变量
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"     '添加一些关键字和条目。
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
a = d.keys              '取得关键字
For i = 0 To d.Count -1 '遍历数组
    Print a(i)          '打印关键字
Next

2.5.Remove 方法
      描述:从一个 Dictionary 对象中删除一个关键字和条目对。
      语法:object.Remove(key)
            Remove 方法语法有如下几部分:
            部分     描述
            Object    必需的。始终是一个 Dictionary 对象的名字。
            Key      必需的。Key 与要从 Dictionary 对象中删除的关键字和条目对相
                     关联。
      说明:如果指定的关键字和条目对不存在,则发生一个错误。
下面的代码举例说明了 Remove 方法的使用:

Dim a, d, i             '创建一些变量
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"     '添加一些关键字和条目
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
a = d.Remove("b")          '删除第二对

2.6.RemoveAll 方法
      描述:RemoveAll 方法从 Dictionary 对象中删除所有关键字和条目对。
      语法:object.RemoveAll
            object始终是一个 Dictionary 对象的名字。
      说明:下面的代码举例说明了 RemoveAll 方法的用法:

Dim a, d, i             '创建一些变量
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"     '添加一些关键字和条目
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
a = d.RemoveAll         '清除字典

TA的精华主题

TA的得分主题

发表于 2007-1-19 11:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢。狠狠学一学。

TA的精华主题

TA的得分主题

发表于 2007-1-19 11:39 | 显示全部楼层

Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"     '添加一些关键字和条目。
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
a = d.Items             '取得条目

For i = 0 To d.Count -1 '遍历数组
    Print a(i)          '打印条目
Next

好像这里的Print语句在VBA中要出错。改为Debug.Print a(i)才行的。

TA的精华主题

TA的得分主题

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

是的,可能这些帮助是用VB里直接copy出来的,所以跟VBA有些不一样

不过不影响大家理解

TA的精华主题

TA的得分主题

发表于 2007-1-25 13:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用爱歌学习在2007-1-18 17:45:57的发言:

(1)可以

(2)把 Range("b:iv").Clear 改成 Range("b:iv").ClearContents 即可

谢谢爱歌学习,谢谢楼主。再问两个问题:

(1)如果数据源在另一个EXCEL表格中,怎么实现?

(2)楼主给出的sample中,数据源中有多少列数据,RUN之后也出现多少列。而我的需求是:数据源中包含许多列,而我只要RUN出其中的几列(两种情况:一、RUN出连续的几列;二、RUN出不连续的几列,是否均可实现),请问如何才能实现?

谢谢解答,感谢!

TA的精华主题

TA的得分主题

发表于 2007-1-26 00:30 | 显示全部楼层

请问:RUN按钮如何随着滚动条浮动.谢谢解答!

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

本版积分规则

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

GMT+8, 2024-6-26 10:17 , Processed in 0.034753 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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