请写一段VBA代码,帮我解决以下问题:我有一个exl表格,表格中有一个表叫sheet1,sheet1中有两列数据,第一列叫“hospitalID”,第二列叫“tag”。“医院ID”这列数据有重复,对应“tag”中的多个值。请将“医院ID”去除重复,“tag”中的多个值合并到一个单元格中,呈现形式为“x+y+z”的形式。将新产生的数据写入到sheet2中。
时间: 2023-12-25 19:04:43 浏览: 63
可以使用以下的VBA代码实现:
```
Sub CombineTags()
'定义变量
Dim lastRow As Long
Dim hospitalID As String
Dim tag As String
Dim newTag As String
Dim i As Long
Dim j As Long
Dim k As Long
'设置起始行数
i = 2
j = 2
k = 1
'获取sheet1中最后一行的行号
lastRow = Sheets("sheet1").Cells(Rows.Count, "A").End(xlUp).Row
'循环处理sheet1中每一行数据
Do While i <= lastRow
'获取当前行的医院ID和tag值
hospitalID = Sheets("sheet1").Cells(i, "A").Value
tag = Sheets("sheet1").Cells(i, "B").Value
'如果当前医院ID已经处理过,则直接跳过
If InStr(Sheets("sheet2").Range("A:A").Text, hospitalID) > 0 Then
i = i + 1
GoTo skip
End If
'将当前医院ID写入sheet2的第一列
Sheets("sheet2").Cells(j, "A").Value = hospitalID
'将当前医院ID对应的所有tag值合并到一个单元格中
newTag = tag
For k = i + 1 To lastRow
If hospitalID = Sheets("sheet1").Cells(k, "A").Value Then
newTag = newTag & "+" & Sheets("sheet1").Cells(k, "B").Value
End If
Next k
'将合并后的tag值写入sheet2的第二列
Sheets("sheet2").Cells(j, "B").Value = newTag
'设置下一行的起始位置
j = j + 1
skip:
'处理下一行数据
i = i + 1
Loop
End Sub
```
这个代码会将sheet1中的数据逐行处理,对于每个医院ID,只处理一次。对于每个医院ID,它对应的所有tag值会合并到一个单元格中,然后写入到sheet2中。在写入数据之前,代码会检查sheet2中是否已经存在当前医院ID的数据,如果存在,则会直接跳过。
阅读全文