多單元格 文本 合并/條件合并
經常遇到網友問如何將多個單元格中的文本合并到一個單元格中,或者根據某個條件將多個單元格中的文本合并到一個單元格中。
模仿sumif函數(shù),自定義了一個HB函數(shù)供參考。
使用方法:在excel中按住ALT,依次按F11,I,M
將下面的代碼粘貼在剛剛插入的模塊中就可以在工作表中調用函數(shù)HB了。
Function HB(if_range, Optional criteria, Optional hb_range, Optional separator)
If IsMissing(separator) Then separator = " "
If IsMissing(hb_range) Then Set hb_range = if_range
If IsMissing(criteria) Then
For Each c In hb_range.Cells
t = t & separator & c
Next
Else
If Left(criteria, 1) = "F" Then
For i = 1 To if_range.Cells.Count
If InStr(if_range.Cells(i), Mid(criteria, 2)) Then t = t & separator & hb_range.Cells(i)
Next i
Else
For i = 1 To if_range.Cells.Count
If Application.Evaluate(if_range.Cells(i) & criteria) Then t = t & separator & hb_range.Cells(i)
Next i
End If
End If
HB = Mid(t, 2)
End Function
函數(shù)參數(shù)說明
HB(參數(shù)1,參數(shù)2,參數(shù)3,參數(shù)4)
參數(shù)1:查找區(qū)域。用來查找或與參數(shù)2進行比較的區(qū)域
參數(shù)2:條件。如果該參數(shù)省略,則直接合并參數(shù)1中的全部內容。如果該參數(shù)以F開頭,則在參數(shù)1中查找F后所跟字符串。
參數(shù)3:當參數(shù)1符合參數(shù)2的條件時,要返回的內容。該區(qū)域大小必須與參數(shù)1一致。如果省略則等于參數(shù)1。
參數(shù)4:返回結果中的分隔符,如果省略則為空格。
用一個具體的實例來說明一下函數(shù)的用法。
假設A1:B11中有如下數(shù)據
姓名 成績
曹操 99
孫權 96
劉備 96
關羽 90
張飛 59
趙云 89
諸葛亮 100
周瑜 99
大喬 82
小喬 85
公式:=hb(A2:A11)
說明:將A2:A11區(qū)域的文本合并,使用默認分隔符空格
結果:曹操 孫權 劉備 關羽 張飛 趙云 諸葛亮 周瑜 大喬 小喬
公式:=hb(A2:A11,,,"/")
說明:將A2:A1區(qū)域的文本合并,使用分隔符“/”
結果:曹操/孫權/劉備/關羽/張飛/趙云/諸葛亮/周瑜/大喬/小喬
公式:=hb(B2:B11,"=99",A2:A11)
說明:將B2:B11區(qū)域等于99的對應A2:A11區(qū)域合并,使用默認分隔符空格
結果:曹操 周瑜
公式:=hb(B2:B11,">90",A2:A11,",")
說明:將B2:B11中大于90的對應A2:A11區(qū)域合并,使用分隔符“,”
結果:曹操,孫權,劉備,諸葛亮,周瑜
公式:=hb(A2:A11,"F喬")
說明:在A2:A11查找“喬”,返回合并結果,使用默認分隔符空格。
結果:大喬 小喬
=============================================================================================
附件:中文版
學寫個中文版的
Function 條件合并(條件區(qū)域 As Range, Optional 條件 As Variant = "<>", Optional 合并區(qū)域 As Range, Optional 分隔符 As String = "")
Dim 行數(shù) As Integer, 列數(shù) As Integer, 行 As Integer, 列 As Integer
Dim 合并 As String
行數(shù) = 條件區(qū)域.Rows.Count
列數(shù) = 條件區(qū)域.Columns.Count
If 合并區(qū)域 Is Nothing Then Set 合并區(qū)域 = 條件區(qū)域 Else Set 合并區(qū)域 = 合并區(qū)域(1).Resize(行數(shù), 列數(shù))
With Application.WorksheetFunction
For 行 = 1 To 行數(shù)
For 列 = 1 To 列數(shù)
If .CountIf(條件區(qū)域(行, 列), 條件) Then 合并 = 合并 & 分隔符 & 合并區(qū)域(行, 列)
Next
Next
條件合并 = .Substitute(合并, 分隔符, "", 1)
End With
End Function