Excel⼀对多查⾃定义函数
经常碰到有⼈想把相同的内容对应数据合并显⽰,说得有点绕,看下图就明⽩:
右边的很不利于统计数据,只适合看。既然很多⼈问,就说说如⽤⽤⾃定义函数的⽅法实现。为什么不⽤公式呢?因为公式难度很多,Excel公式对处理⽂本合并的功能很弱。
Alt + F11,进⼊代码编辑界⾯。再新建⼀个模块,插⼊如下代码:column函数和vlookup函数
1. Public Function SLookUp(
2.    lookup_value As String,
3.    table_array As Range,
4.    col_index_num As Long,
5.    Optional delimiter As String = ","
6.    ) As String
7.
8.    '单元格选区优化,避免选择整列之后,遍历过多⽆⽤的单元格'
9.    Dim row_max As Long
10.    row_max = Cells(65536, table_array.Columns(1).Column).End(xlUp).Row
11.
12.    Dim arr As Variant, i As Long
13.    arr = table_array.Resize(row_max - table_array.Row + 1).Value
14.
15.    For i = 1 To UBound(arr)
16.        '判断是否等于查的值'
17.        If arr(i, 1) = lookup_value Then
18.            '返回并组合对应列的值'
19.            SLookUp = SLookUp & delimiter & arr(i, col_index_num)
20.        End If
21.    Next
22.
23.    '去掉开头的分隔符'
24.    SLookUp = Mid(SLookUp, Len(delimiter) + 1)
25. End Function
对应的参数含义如下:
lookup_value:必填,要查的值
table_array:必填,查范围
col_index_num:必填,返回第⼏列的值
delimiter:选填,分隔字符
该⾃定义函数原理很简单。循环遍历单元格的值,只要碰到和条件相同的值,就合并内容。
其中为了避免使⽤⾃定义函数时,选中整列,导致遍历了很多⽆需遍历的单元格。其中加了优化选区的处理。
⽤法和Vlookup差不多,或者说我把这个⾃定义函数设计得和Vlookup差不多。如下图:
以E2单元格的公式为例,解析⼀下⽤法:
第1个参数是D2,即查D2的值;
第2个参数是A:B,即在A:B列中查;
第3个参数是2,即合并A:B列中的第2列到的值;
第4个参数没填,则默认使⽤逗号分隔。
当然,你也可以把第4个参数写成你需要的分隔符:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。