ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 字典求救

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2013-5-6 12:26 | 显示全部楼层
一望无垠 发表于 2013-5-6 12:24
谢谢您啦。
基本理解这句 d(arr(i,1))="" 的意思啦。
但怎么通过这句就能求出不重名的名字呢?

关键词进了词典,就将关键词导出。  自己查一下帮助   Keys

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
...

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-5-6 12:35 | 显示全部楼层
张三李四 发表于 2013-5-6 12:26
关键词进了词典,就将关键词导出。  自己查一下帮助   Keys

Keys方法

谢谢这么耐心的讲解。
比如表1中A、B、C、D四个名字
表2中C、D、E、F四个名字
通过循环表1 ,字典中有了ABCD四个关键字,后面Item为空,
再循环表2,字典中有了ABCDEF六个关键字,后面Item为空。
怎么知道表1、表2中ABEF这四个名字为不重复的名字?

TA的精华主题

TA的得分主题

发表于 2013-5-6 12:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
一望无垠 发表于 2013-5-6 12:35
谢谢这么耐心的讲解。
比如表1中A、B、C、D四个名字
表2中C、D、E、F四个名字

这已经超出了一楼主贴的范围了。
可以另外做法。
先将表一读进词典。
再循环读表二,问表二词是否在词典中。


Exists 方法
         

描述

如果在 Dictionary 对象中指定的关键字存在,返回 True,若不存在,返回 False。

语法

object.Exists(key)

Exists 方法语法有如下几部分:

部分 描述
Object 必需的。始终是一个 Dictionary 对象的名字。
Key 必需的。在 Dictionary 对象中搜索的 Key 值。

TA的精华主题

TA的得分主题

发表于 2013-5-6 13:53 | 显示全部楼层
所有人都是懒汉,包括版主,他们是为了省事写成等于空,d(arr(i,1))="" ,我比他们更懒汉,写成等于1(一个字符更省事),d(arr(i,1))=1,反正你关心的是关键字,不关心项,爱等于什么等于什么,如果你高兴可以写成这样的:
d(arr(i,1))="安倍是个乌龟王八蛋,全家死光光" ,这样写也是可以的,不过别让安倍听见了,安倍要是听见了,日本和中国打起来,中国把日本灭了,奥八蚂来找你的麻烦,到时候我可不负责任{:soso_e120:}

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-5-6 13:54 | 显示全部楼层
张三李四 发表于 2013-5-6 12:41
这已经超出了一楼主贴的范围了。
可以另外做法。
先将表一读进词典。

哈哈,这个问题和1楼的意思是一样的。
来自蓝桥版的一段代码:
一工作簿里面有3张工作表上,每张表格的A列都是姓名列,所有这些姓名中有些是重复的,要求编写一段代码,在另一个工作表上显示不重复的姓名:

Sub bcfz()
Dim i&, Myr&, Arr
Dim d, k, t, Sht As Worksheet
Set d =CreateObject("Scripting.Dictionary")
For Each Sht In Sheets
   If Sht.Name <> "Sheet4" Then
       Myr = Sht.[a65536].End(xlUp).Row
       Arr = Sht.Range("a2:a" & Myr)
       For i = 1 To UBound(Arr)
           d(Arr(i, 1)) = ""
       Next
   End If
Next
k = d.keys
Sheet4.[a3].Resize(d.Count, 1) =Application.Transpose(k)
Set d = Nothing
End Sub
就是要用 d(Arr(i, 1)) = “”来求出不重复的姓名。
这个代码里没有用到Exists啊?

TA的精华主题

TA的得分主题

发表于 2013-5-6 14:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
一望无垠 发表于 2013-5-6 13:54
哈哈,这个问题和1楼的意思是一样的。
来自蓝桥版的一段代码:
一工作簿里面有3张工作表上,每张表格的 ...

13楼看错了,以为你要求表二不重复于表一的关键词。
不过,你的12楼与15楼还是不属同一个问题。
12楼要求的是6个关键词中的4个只有出现一次的关键词,15楼求的是全部去重复的关键词。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-5-6 14:15 | 显示全部楼层
张三李四 发表于 2013-5-6 14:02
13楼看错了,以为你要求表二不重复于表一的关键词。
不过,你的12楼与15楼还是不属同一个问题。
12楼要 ...

看看我的理解是否正确:
两个表6个关键词中的4个只有出现一次的关键词
两个表全部去掉重复的关键词
这两个意思应该一样吧,都是把不重复的列出来。
那么又回到了原点:
d(Arr(i,1))=""
是如何把不重复的名字弄出来的?

TA的精华主题

TA的得分主题

发表于 2013-5-6 14:24 | 显示全部楼层
两个表,6个关键词,其中4个是只出现一次,其它2个有多次出现。
1、求多次出的2个,可用 Exists 方法
2、求6个去重复关键词 可用  d(Arr(i,1))=""
3、求 4个只出现一次的可用   d(Arr(i, 1)) =d(Arr(i, 1))+1,最后根据项的数值用循环提取。
4、求任意一个关键词重复几次可用  d(Arr(i, 1)) =d(Arr(i, 1))+1


关键词读进词典后用  k = d.keys  将关键词赋给数组。
数组赋给工作表,请自己翻贴子。

  

TA的精华主题

TA的得分主题

发表于 2013-5-6 21:28 | 显示全部楼层
一望无垠 发表于 2013-5-6 14:15
看看我的理解是否正确:
两个表6个关键词中的4个只有出现一次的关键词
两个表全部去掉重复的关键词

我教给你一个方法,保证你100%的理解透彻VBA字典。

TA的精华主题

TA的得分主题

发表于 2013-5-6 21:46 | 显示全部楼层
想穿裙子老师的一段话:
一、字典关键词 key 的特点: 唯一、不重复。和itme项目有直接关联性。
因此:
1. key是不重复的。因此可以用来:
  a. 排除重复项   应用实例略
  b. 合并同类项   应用实例略
  
2. key对item项的直接关联性,可以用来:
  a. 检索并返回key对应的item项目内容
  b. 快速定位
     如果把item内容设置为:行、或列位置,或单元格地址等,
     那么相当于通过key就可以用来快速定位,直接确定对应位置,
     否则需要对数组进行遍历循环以及比对,因此这个作用对字典用法来说非常重要。

3. 字典中key是否存在的检查,以及不同处理
  
  ………………这个略了,一下子说不完。
  

二、Item项目的基本用法。
1. 统计: 即合并同类项过程中,对相同key的某个属性进行合并、统计。
  a. 计数+1
   b. 数量、金额加总、汇总(包括扣减)
2. 合并: 不可计算部分的信息合并
  a. 字符信息的合并 (处理完成后可以split拆分……)
   b. 查找、替换
  c. 数组形式的处理 (=Array(,,,)……)
3. 字典嵌套
  a. 字典嵌套字典
  b. 字典嵌套数组
4. 特殊处理
  如Item项目为Range对象时,对于Range对象的各种处理方法

希望对你有用
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-12-14 06:28 , Processed in 0.023061 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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