如果值匹配,将单元格数据连接成另一个数据

我在同一张Excel表中有两columns A and B 我想,如果在Column B两个值匹配,那么它应该复制相关的值在同一行中的值。

例如

 Column A Column B xyz 1 abc 1 pqr 1 eee 2 qqq 3 www 4 oop 5 

Desierd输出

 column A Column B xyz,abc,pqr 1 eee 2 qqq 3 www 4 oop 5 

你可以使用一个用户定义的函数(又名UDF)。 把它放到模块表中。

 Public Function conditional_concat_strs(rSTRs As Range, rCRITs As Range, rCRIT As Range, Optional sDELIM As String = ", ") Dim c As Long, sTMP As String Set rSTRs = rSTRs.Cells(1, 1).Resize(rCRITs.Rows.Count, rCRITs.Columns.Count) For c = 1 To rCRITs.Cells.Count If rCRITs(c).Value2 = rCRIT Then _ sTMP = sTMP & rSTRs(c).Value & sDELIM Next c conditional_concat_strs = Left(sTMP, Application.Max(Len(sTMP) - Len(sDELIM), 0)) End Function 

像任何本地工作表函数一样使用。

通过标准连接字符串

你也可以使用这个:

 Public Sub combine() Dim row, result, lastRow As Integer Dim isExist As Boolean With Sheets("sheetname") 'get the last use row lastRow = .Range("A1").SpecialCells(xlCellTypeLastCell).row 'Loop from row 1 to last row For row = 1 To lastRow Step 1 'set the start row for result. result = 1 'Reset flag isExist = False 'Loop result count column until blank Do While .Range("F" & result) <> "" 'check count If .Range("B" & row) = .Range("F" & result) Then isExist = True 'If old, combine .Range("E" & result) = .Range("E" & result) & "," & .Range("A" & row) Exit Do End If 'increase row result = result + 1 Loop 'If new, add new record If Not isExist Then .Range("E" & result) = .Range("A" & row) .Range("F" & result) = .Range("B" & row) End If Next row End With End Sub 

在这里,为我的代码testing证据:

在这里输入图像描述

我用column A & B作为input, column E & F作为输出。

如果有任何问题,请告诉我。

还有一个公式解决scheme(辅助列):

假设数据是列A:B …

  • 在C1中写下这个公式: =IF(A1<>A2,B2,D1&","&B2)
  • 在D1中写下这个公式: =IF(A2<>A3,A2,"")
  • 筛选D列空白,然后删除可见细胞。