excel中如何将重复列转化成行(如何用函数或是简单的vba实现)

如图1是源数据,我要是图2的结果。
如图1是源数据,我要是图2的结果。

Option Explicit

Sub 列转行()
Dim arr, dic As Object, i%
arr = Selection
Set dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(arr)
If dic.exists(arr(i, 1)) Then
dic(arr(i, 1)) = dic.Item(arr(i, 1)) & "|" & arr(i, 2)
Else
dic(arr(i, 1)) = arr(i, 2)
End If
Next i

Range("C1").Resize(dic.Count, 1) = Application.Transpose(dic.keys)
Range("D1").Resize(dic.Count, 1) = Application.Transpose(dic.Items)
Range("D1").Resize(dic.Count, 1).TextToColumns Other:=True, OtherChar:="|"

Set dic = Nothing
End Sub

Sub 列转行交互版()
Dim arr, dic As Object, i%, RangA As Range
Set RangA = Application.InputBox(prompt:="请选择原始数据的区域", Type:=8)
arr = RangA
Set dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(arr)
If dic.exists(arr(i, 1)) Then
dic(arr(i, 1)) = dic.Item(arr(i, 1)) & "|" & arr(i, 2)
Else
dic(arr(i, 1)) = arr(i, 2)
End If
Next i

Set RangA = Application.InputBox(prompt:="请选择目标数据的左上角。" & vbCrLf & "右下方数据将被覆盖!", Type:=8)
RangA.Resize(dic.Count, 1) = Application.Transpose(dic.keys)
RangA.Offset(0, 1).Resize(dic.Count, 1) = Application.Transpose(dic.Items)
Application.DisplayAlerts = False
RangA.Offset(0, 1).Resize(dic.Count, 1).TextToColumns Other:=True, OtherChar:="|"
Application.DisplayAlerts = True

Set dic = Nothing
End Sub
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-15
本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网