vba 按照c列的相同手机号合并a列的账号,账号以逗号分隔,不使用字典
时间: 2024-03-27 16:35:27 浏览: 44
vba_ExcelVBA_
可以使用数据透视表来实现,具体步骤如下:
1.选择C列和A列,然后插入一个数据透视表,将C列拖到行区域,将A列拖到值区域,将值区域的汇总方式设置为“文本连接”,并将连接符号设置为“,”。
2.将数据透视表的行区域中的手机号复制并粘贴到新的一列中,然后删除数据透视表。
3.使用VBA代码将新的一列中的手机号去重,并将每个手机号对应的账号合并为一个新的字符串,然后写入新的两列中。
以下是完整的VBA代码:
```
Sub MergeAccount()
Dim lastRow As Long
Dim dict As Object
Dim key As Variant
Dim i As Long, j As Long
Dim phoneArr() As String, accountArr() As String
Dim phone As String, account As String, newAccount As String
'获取数据最后一行
lastRow = Range("C" & Rows.Count).End(xlUp).Row
'将手机号和账号存入数组中
ReDim phoneArr(1 To lastRow)
ReDim accountArr(1 To lastRow)
For i = 1 To lastRow
phoneArr(i) = Range("C" & i).Value
accountArr(i) = Range("A" & i).Value
Next i
'将手机号去重并合并账号
Set dict = CreateObject("Scripting.Dictionary")
For i = 1 To lastRow
phone = phoneArr(i)
account = accountArr(i)
If Not dict.exists(phone) Then
dict.Add phone, account
Else
newAccount = dict(phone) & "," & account
dict.Item(phone) = newAccount
End If
Next i
'将手机号和账号分别写入新的两列中
Range("E1:F1").Value = Array("手机号", "账号")
j = 2
For Each key In dict.keys
Range("E" & j).Value = key
Range("F" & j).Value = dict.Item(key)
j = j + 1
Next key
End Sub
```
请注意,在使用这个方法时,如果原始数据中的手机号存在重复的情况,透视表会将它们合并成一个,因此最终结果中可能会存在一些不需要合并的账号。如果需要避免这种情况,可以先对手机号进行去重。
阅读全文