![将多行数据合并为一行](https://linux22.com/image/1431003/%E5%B0%86%E5%A4%9A%E8%A1%8C%E6%95%B0%E6%8D%AE%E5%90%88%E5%B9%B6%E4%B8%BA%E4%B8%80%E8%A1%8C.png)
我有一张包含人员信息的表格(姓名、健康码、家庭号码、电子邮件等)。但是,这些信息位于不同的行中,并且并非所有行都包含所有信息。
如何将关于一个人的所有信息合并到一行中?
当前的
期望
答案1
我会用 VBa 来做这个
Sub Pirates()
Range("F:I").Cells.Clear
'first, copy the headers
Range("F1").Value = Range("A1").Value
Range("G1").Value = Range("B1").Value
Range("H1").Value = Range("C1").Value
Range("I1").Value = Range("D1").Value
'now, to work out the content
Dim row As Integer
row = 2
Dim resultRow As Integer
resultRow = 2
Dim previousName As String
previousName = Range("A" & row).Value
Do While (Range("A" & row).Value <> "")
Dim currentName As String
currentName = Range("A" & row).Value
If (currentName <> previousName) Then
resultRow = resultRow + 1
previousName = currentName
End If
If Range("A" & row).Value <> "" Then
Range("F" & resultRow).Value = Range("A" & row).Value
End If
If Range("B" & row).Value <> "" Then
Range("G" & resultRow).Value = Range("B" & row).Value
End If
If Range("C" & row).Value <> "" Then
Range("H" & resultRow).Value = Range("C" & row).Value
End If
If Range("D" & row).Value <> "" Then
Range("I" & resultRow).Value = Range("D" & row).Value
End If
row = row + 1
Loop
End Sub
这就是我的 Excel 的样子
在我运行上述宏之后
正如你所见,我选择将结果添加到初始表的一侧,因为它是非破坏性的
答案2
如果任何行中都填充了正确的信息,此宏将用正确的信息填充所有空白单元格。然后,您可以使用高级过滤器复制唯一的行。
Sub CopyData()
Application.ScreenUpdating = False
Dim i As Long
Dim j As Long
Dim k As Long
Dim rownum As Long
Dim colnum As Long
rownum = Application.WorksheetFunction.CountA(Range("A:A"))
colnum = Application.WorksheetFunction.CountA(Range("A1:AAA1"))
For i = 2 To rownum
For j = 1 To colnum
If IsEmpty(Cells(i, j)) = False Then
For k = 1 To rownum
If Trim(Cells(k, 1)) = Trim(Cells(i, 1)) Then
Cells(k, j) = Cells(i, j)
End If
Next k
End If
Next j
Next i
End Sub