excel 需要根据行中的数据合并行

9nvpjoqh  于 2022-11-26  发布在  其他
关注(0)|答案(1)|浏览(106)

具体来说
当前状态:

Job Name     Sales Person    Job Value
Job ABC      John Doe        $200
Job ABC      Martha Doe      $200
Job ABC      Bill Anyguy     $200

通过宏实现的预期结果:

Job Name     Sales Person                          Job Value
Job ABC      John Doe, Martha Doe, Bill Anyguy     $200
von4xj4u

von4xj4u1#

我将基于以下假设给予一个解决方案

  • 如果员工的工作相同,则将其分组
  • 作业已经订购,因此,例如,在第一列中,您不会有job1job2job1等情况,而只有job1job1job2
  • 相同的作业具有相同的价格,否则在分组时将记录最后一个作业

一个解决方案可以是运行以下Excel宏ExampleMacro并进行以下设置。此代码将筛选第一个工作表[此处为TotalList ],并复制第二个工作表[此处为Grouped ]中的内容
注意:请使用我使用过的名称,或者如果您愿意更改名称,请相应地更改以下宏的代码。否则它将无法工作

Sub ExampleMacro()

Dim i As Integer
Dim j As Integer
Dim x As String
Set ShMaster = ThisWorkbook.Sheets("TotalList")
Set ShSlave = ThisWorkbook.Sheets("Grouped")

'cleanup for next macro executions
ShSlave.UsedRange.Clear

'copying the headers
ShSlave.Range("A1").Value = ShMaster.Range("A1").Value
ShSlave.Range("B1").Value = ShMaster.Range("B1").Value
ShSlave.Range("C1").Value = ShMaster.Range("C1").Value

'start processing
j = 2

'starting to check the master rows
For i = 2 To ShMaster.UsedRange.Rows.Count

    x = (ShMaster.Range("B" & i).Value)
    'checking if the job in the next rows is the same
    While StrComp((ShMaster.Range("A" & i).Value), (ShMaster.Range("A" & (i + 1)).Value), vbTextCompare) = 0
        x = x & ", " & (ShMaster.Range("B" & (i + 1)).Value)
        i = i + 1
    Wend
    
    'searching where to copy
    While ShSlave.Range("A" & j).Value <> ""
        j = j + 1
    Wend
    
    'copying
    ShSlave.Range("A" & j).Value = ShMaster.Range("A" & i).Value
    ShSlave.Range("B" & j).Value = x
    ShSlave.Range("C" & j).Value = ShMaster.Range("C" & i).Value

Next i
End Sub

相关问题