繁体   English   中英

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

[英]Concatenate cell data into another data if values matches

我在同一个excel表中有两columns A and B 我正在尝试,如果在Column B两个值匹配,那么它应该在同一行中复制相关值A

例如

桌子

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

期望输出

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

在这里,我的代码的测试证据:

在此处输入图片说明

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

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

对此也有一个公式解决方案(带有辅助列):

假设数据是列 A:B ...

  • 在 C1 中写下这个公式: =IF(A1<>A2,B2,D1&","&B2)
  • 在 D1 中写下这个公式: =IF(A2<>A3,A2,"")
  • 在 D 列上过滤空白,然后删除可见单元格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM