乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > 零基础学Excel VBA-WE009【一对多的Vlookup应用(VBA)】更新-excel下标

零基础学Excel VBA-WE009【一对多的Vlookup应用(VBA)】更新-excel下标

作者:乔山办公网日期:

返回目录:excel表格制作

一、简单演示和代码展示

零基础学Excel VBA-WE009【一对多的Vlookup应用(VBA)】更新

零基础学Excel VBA-WE009【一对多的Vlookup应用(VBA)】更新

零基础学Excel VBA-WE009【一对多的Vlookup应用(VBA)】更新

二、新对象/方法的介绍

1. Sort

排序,可以指设置 1~3 个排序条件,Key1、2、3,优先级最高的是 Key1。

2. IsEmpty

按字面理解就可以,往往是用来确定一个变量是否已经被赋值。这里用来判断一个单元格是否为空。

3. Offset

返回的是单元格,括号的两个参数依次为行偏移量和列偏移量。比如本例中的(1, 0),就是向下偏移 1 行。

4. EntireRow

通过某个单元格定位整行。

5. Dictionary

一种比较常用的对象,储存数据的方式为:关键字(称为 Key) - 条目(称为 Item)。

6. UBound

返回数组维可用的最大下标,因为有时候数组维不是从 1 开始的,所以,需要跟 LBound 一起,来确定一个数组的大小。

7. IsArray

检查变量是否为数组。

8. Exists

Dictionary 专用。如果在 Dictionary 对象中指定的关键字存在,返回 True,若不存在,返回 False。注意,是跟 Dictionary 的关键字,也就是 Key 来比较的,而不是条目。

8. Add

在 Dictionary 的使用就是新增一组数据,两个参数依次为 Dictionary 的 Key 和 Item。

9. Keys

也是 Dictionary 专用。返回一个数组,该数组包含一个 Dictionary 对象中的全部已有的关键字。注意,这个数组的下维是从 0 开始而不是 1 。如果 Dictionary 中没有任何内容时,这个数组的下维是 -1 。

10. Resize

调整指定区域的大小。返回 Range 对象,该对象代表调整后的区域。两个参数依次为新区域的行数,新区域中的列数。

11. Transpose

转置行列。d.keys是个一维数组,我们可以简单的理解它是一组横着的数,经过 Transpose 以后,就变成了一组竖着的数。

12. RemoveAll

也是 Dictionary 专用,清空内容,释放资源和内存,也可以用 Set d = Nothing。

三、执行思路及过程分析

【1】合并 型号 和 价格 都相同的行

针对上期所说的,同一种型号出现重复价格的问题,但城市是不同的,我们又需要保留城市的信息,这就用到行合并的功能。

为了方便对比,先把 A 列和 B 列的内容,合并成临时列 D 列。

接着,对数据进行排序。

行合并的原理非常原始——对排序后 D 列,进行上一行和下一行进行比较,如果内容相同,就说明 A 列的型号和 B 列的价格都是一样的,然后我们再看 C 列,然后 C 列的内容也相同,说明是个完全重复的行,直接删掉;如果不同,那就把 C 列的内容进行合并,再删掉。

完成以后,临时列 D 的内容清空。

【2】增加辅助列

第二步,跟上期一样的,我们需要用到辅助列——在 型号 后面增加一个数字,数字代表这个型号出现的次数。

【3】获取 型号 的列表

第三步跟上一期不同,上期通过一个 辅2 列来获取列表,在 VBA 这里,就可以用 Dictionary。

先把 A 列的内容,赋予给 allA 这个变量,allA 实际上就是一个数组了。

然后,把 allA 的每一个元素取值,写进字典 d。这里需要注意两个点:

1、如果 A 列只有一行内容,allA 就不是一个数组,UBound(allA) 就会出错,所以用了个 IsArray(allA) 的判断。

2. 字典 d 增加数据时,我们只用到 Key 的值,所以 Item 可以取任何值。

现在,我们已经把型号列表保存在字典 d 的 Key里了,只需要把这些 Key 写到 G 列就可以了。这里,我们用了个 Resize 函数和 Transpose 函数。

当然,用 For 循环也可以做到的,效率就没那么高了。

【4】对 价格1~6 列写入公式

公式还是跟上期的一样,只是在 VBA 这里,需要转换为 R1C1 的样式,具体怎么转换,我这里就不讲解了。

【5】总结

本期的实例,除了 Vlookup 的一对多应用,还有 2 个比较实用的模块:

1. 删除重复行,或者合并部分内容重复的行。

2. 用 Dictionary 提取某列的唯一值。稍作一下变动,也可以实现提取多列的——主要是 allA(i, 1) 的 1 变成变量 j,然后再嵌套一个外层 For j 的循环。有兴趣的朋友,可以自己研究研究。

四、本期完整代码文字版

由于现在代码都变得比较长,代码不再直接放出,如果需要文字版代码,请留言,我会再第一时间发给你。

零基础学Excel VBA-WE009【一对多的Vlookup应用(VBA)】更新

相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网