多列内容显示在一行中

方法 2:使用 WPS 宏(VBA/JSA)

如果您需要频繁执行此操作,可以使用宏来自动化处理:

Sub MergeCaseNumbersToH()
    Dim targetSheet As Worksheet
    Dim lastRow As Long
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
    
    ' 获取当前活动工作表
    Set targetSheet = ActiveSheet
    lastRow = targetSheet.Cells(targetSheet.Rows.Count, "A").End(xlUp).Row
    
    ' 遍历数据,将相同A-F列内容的G列值合并到字典中
    For Row = 2 To lastRow
        ' 使用A-F列的组合作为字典的键
        Dim key As String
        key = targetSheet.Cells(Row, 1).Value & "|" & _
              targetSheet.Cells(Row, 2).Value & "|" & _
              targetSheet.Cells(Row, 3).Value & "|" & _
              targetSheet.Cells(Row, 4).Value & "|" & _
              targetSheet.Cells(Row, 5).Value & "|" & _
              targetSheet.Cells(Row, 6).Value
        
        ' 获取G列的值
        Dim caseNumber As String
        caseNumber = targetSheet.Cells(Row, 7).Value
        
        ' 如果字典中已存在该键,追加G列的值;否则,添加新键值对
        If dict.Exists(key) Then
            dict(key) = dict(key) & ";" & caseNumber
        Else
            dict.Add key, caseNumber
        End If
    Next Row
    
    ' 将合并后的G列值填充到H列
    For Row = 2 To lastRow
        ' 使用A-F列的组合作为字典的键
        key = targetSheet.Cells(Row, 1).Value & "|" & _
              targetSheet.Cells(Row, 2).Value & "|" & _
              targetSheet.Cells(Row, 3).Value & "|" & _
              targetSheet.Cells(Row, 4).Value & "|" & _
              targetSheet.Cells(Row, 5).Value & "|" & _
              targetSheet.Cells(Row, 6).Value
        
        ' 将字典中对应的值填充到H列
        targetSheet.Cells(Row, 8).Value = dict(key)
    Next Row
End Sub

G列为病案号,合并到H列,不能有错误的字符#N/A

要在WPS表格中实现这个功能,可以使用数组公式和一些辅助函数。以下是一个可能的解决方案:

  1. 在H列中输入以下数组公式
  • 选择H2单元格,然后输入以下公式:
=TEXTJOIN(";", TRUE, IF((A2:A1000=A2)*(B2:B1000=B2)*(C2:C1000=C2)*(D2:D1000=D2)*(E2:E1000=E2)*(F2:F1000=F2), G2:G1000, ""))
  • Ctrl + Shift + Enter 键以输入数组公式。这样公式会自动加上 {}
  1. 向下填充公式
  • 将H2单元格的公式向下填充到其他单元格,以应用到整个数据范围。

解释公式:

  • IF((A2:A1000=A2)*(B2:B1000=B2)*(C2:C1000=C2)*(D2:D1000=D2)*(E2:E1000=E2)*(F2:F1000=F2), G2:G1000, "")
    • 这部分公式检查A-F列是否与当前行相同,如果相同则返回G列的病案号,否则返回空字符串。
  • TEXTJOIN(";", TRUE, ...)
    • TEXTJOIN 函数将符合条件的病案号用 ; 连接起来。TRUE 参数表示忽略空值。

注意事项:

  • 确保数据范围(如 A2:A1000)根据实际数据范围进行调整。
  • 如果数据量较大,数组公式可能会导致计算变慢。可以考虑使用辅助列或VBA宏来优化性能。