大家都知道,Excel除了有丰富的菜单功能,还有强大的各种函数,通过各种函数的嵌套可以解决工作中遇到的大部分问题。除了Excel自带的函数,我们还可以根据实际需求随心所欲地写出一些自定义函数,如本次将要介绍的自定义函数-数量明细。 功能:列出某个产品名称从上到下出现对应数量,中间用逗号连接,出现次数不确定。 自定义函数必须放在开发工具中的模块并启用宏,源代码与注解如下: Public Function ShowNum(RngsAs Range, Rng As Range) '定义数组变量 Dim Arr As Variant '把Rngs单元格区域装入数组 Arr = Rngs.Value '如果Rngs单元格区域列数不等于2,就返回提示'第一个参数只支持两列。'并结束运行函数。 If Rngs.Columns.Count <> 2 ThenShowNum = '第一个参数只支持两列。': Exit Function '如果Rngs单元格区域行数等于1,就直接返回单元格区域第二个单元格的值并结束运行函数。 If Rngs.Rows.Count = 1 Then ShowNum =Rngs(2).Value: Exit Function '如果Rng单元格不是单个单元格,就返回提示' 第二个参数只支持单个单元格。'并结束运行函数。 If Rng.Cells.Count <> 1 ThenShowNum = ShowNum & ' 第二个参数只支持单个单元格。': Exit Function '定义以下循环需要的临时变量i,Nam,对象d Dim i As Long, Nam As String, d AsObject '创建字典对象并赋值给对象d Set d =CreateObject('scripting.dictionary') '把Rng单元格赋值给变量Nam Nam = Rng.Value '循环把数组第1列和第2列装入字典,并把同类项对象数量用逗号连接 For i = 1 To UBound(Arr) d(Arr(i, 1)) = d(Arr(i, 1))& ',' & Arr(i, 2) Next i '取出与Rng单元格值相同对象的连接字符,由于第1次赋值d(Arr(i, 1)) 为空,前面会多一个逗号,所以结果要从第2个字符开始截取。 ShowNum = Mid(d(Nam), 2, Len(d(Nam))) End Function
使用示例请看以下动画:
|
|
来自: L罗乐 > 《VBA基础入门教程》