请写一段VBA代码,帮我解决以下问题:我有一个exl表格,表格中有一个表叫sheet1,sheet1中有两列数据,第一列叫“hospitalID”,第二列叫“tag”。“医院ID”这列数据有重复,对应“tag”中的多个值。请将“hospitalID”去除重复,“tag”中的多个值合并到一个单元格中,呈现形式为“x+y+z”的形式。将新产生的数据写入到sheet2中。另外要求在sheet2中创建一列,命名为“count”。“count”列需要统计sheet1中“hospitalID”每个值的出现的次数。
时间: 2023-09-12 08:12:05 浏览: 61
POI 对exl表格操作中文文档和案例
好的,以下是使用VBA代码实现将“hospitalID”去重、将“tag”中的多个值合并到一个单元格中,并将结果写入到“sheet2”中,并在“sheet2”中创建一列“count”来统计“hospitalID”每个值的出现次数的代码:
```vba
Sub MergeTags()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim lastRow As Long, i As Long
Dim dict As Object
Dim hospitalID As String, tag As String
Dim count As Long
' 获取sheet1和sheet2对象
Set ws1 = ThisWorkbook.Worksheets("sheet1")
Set ws2 = ThisWorkbook.Worksheets("sheet2")
' 获取sheet1中hospitalID和tag列的最后一行行号
lastRow = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row
' 使用字典对象合并tag中的重复值
Set dict = CreateObject("Scripting.Dictionary")
For i = 2 To lastRow
hospitalID = ws1.Cells(i, "A").Value
tag = ws1.Cells(i, "B").Value
If Not dict.Exists(hospitalID) Then
dict(hospitalID) = tag
Else
dict(hospitalID) = dict(hospitalID) & "+" & tag
End If
Next i
' 将去重和合并后的结果写入sheet2中
ws2.Cells(1, "A").Value = "hospitalID"
ws2.Cells(1, "B").Value = "tag"
ws2.Cells(1, "C").Value = "count"
For i = 0 To dict.Count - 1
hospitalID = dict.Keys()(i)
tag = dict.Items()(i)
count = WorksheetFunction.CountIf(ws1.Range("A2:A" & lastRow), hospitalID)
ws2.Cells(i + 2, "A").Value = hospitalID
ws2.Cells(i + 2, "B").Value = tag
ws2.Cells(i + 2, "C").Value = count
Next i
End Sub
```
这段代码首先获取名为“sheet1”和“sheet2”的工作表对象,然后使用字典对象将“sheet1”中的重复“hospitalID”去重,将“tag”中的多个值合并到一个单元格中。最后将去重和合并后的结果写入到“sheet2”中,并在“sheet2”中创建一列“count”来统计“hospitalID”每个值的出现次数。请注意,这段代码假设“sheet1”中“hospitalID”和“tag”列从第二行开始,而“sheet2”中第一行已经有表头了。如需修改,请根据实际情况进行修改。
阅读全文