經(jīng)常碰到有人想把相同的內(nèi)容對應(yīng)數(shù)據(jù)合并顯示,說得有點(diǎn)繞,看下圖就明白:
右邊的很不利于統(tǒng)計(jì)數(shù)據(jù),只適合看。既然很多人問,就說說如用用自定義函數(shù)的方法實(shí)現(xiàn)。
為什么不用公式呢?因?yàn)楣诫y度很多,Excel公式對處理文本合并的功能很弱。
Alt + F11,進(jìn)入代碼編輯界面。再新建一個(gè)模塊,插入如下代碼:
- Public Function SLookUp(
- lookup_value As String,
- table_array As Range,
- col_index_num As Long,
- Optional delimiter As String = ","
- ) As String
- '單元格選區(qū)優(yōu)化,避免選擇整列之后,遍歷過多無用的單元格'
- Dim row_max As Long
- row_max = Cells(65536, table_array.Columns(1).Column).End(xlUp).Row
- Dim arr As Variant, i As Long
- arr = table_array.Resize(row_max - table_array.Row + 1).Value
- For i = 1 To UBound(arr)
- '判斷是否等于查找的值'
- If arr(i, 1) = lookup_value Then
- '返回并組合對應(yīng)列的值'
- SLookUp = SLookUp & delimiter & arr(i, col_index_num)
- End If
- Next
- '去掉開頭的分隔符'
- SLookUp = Mid(SLookUp, Len(delimiter) + 1)
- End Function
對應(yīng)的參數(shù)含義如下:
lookup_value: 必填,要查找的值
table_array: 必填,查找范圍
col_index_num: 必填,返回第幾列的值
delimiter: 選填,分隔字符
該自定義函數(shù)原理很簡單。循環(huán)遍歷單元格的值,只要碰到和條件相同的值,就找合并內(nèi)容。
其中為了避免使用自定義函數(shù)時(shí),選中整列,導(dǎo)致遍歷了很多無需遍歷的單元格。其中加了優(yōu)化選區(qū)的處理。
用法和Vlookup差不多,或者說我把這個(gè)自定義函數(shù)設(shè)計(jì)得和Vlookup差不多。如下圖:
以E2單元格的公式為例,解析一下用法:
第1個(gè)參數(shù)是D2,即查找D2的值;
第2個(gè)參數(shù)是A:B,即在A:B列中查找;
第3個(gè)參數(shù)是2,即合并A:B列中的第2列找到的值;
第4個(gè)參數(shù)沒填,則默認(rèn)使用逗號分隔。
當(dāng)然,你也可以把第4個(gè)參數(shù)寫成你需要的分隔符:
聯(lián)系客服