我想使用excel 2010 VBA实现一个函数来将值从一个列转移到另一个行,如果同一行中有超过10个值,则第11个值返回到第二行。
例如:
======
ColA ColB
1111 AAA
1111 BBB
1111 CCC
1111 DDD
1111 EEE
1111 FFF
1111 GGG
1111 HHH
1111 III
1111 JJJ
1111 KKK
1111 LLL
2222 MMM
2222 OOO
2222 PPP
ColA Val1 Val2 Val3 Val4 Val5 Val6 Val7 Val8 Val9 Val10
1111 AAA BBB CCC DDD EEE FFF GGG HHHH III JJJ
1111 KKK LLL
2222 MMM OOO PPP
======
我试图首先使用分隔符",#34;将值分组到一个字段中。然后我使用excel函数将数据分成不同的列。这里是分组值的代码,但我不知道如果有超过10个值,如何告诉excel去第二行。
这是将值分组的代码:
Sub combineValues()
Dim dic As Dictionary
Dim key, val, i, p, k
Set dic = New Dictionary
For i = 1 To Worksheets(1).Range("A65536").End(xlUp).Row
key = Worksheets(1).Cells(i, 1).Value
val = Worksheets(1).Cells(i, 2).Value
If dic.Exists(key) Then
dic.Item(key) = dic.Item(key) & ", " & val
Else
dic.Add key, val
End If
Next
p = 1
For Each k In dic.Keys
Worksheets(2).Cells(p, 1) = k
Worksheets(2).Cells(p, 2) = dic.Item(k)
p = p + 1
Next
End Sub
使用代码,我可以将值分组到一行,如下所示:
ColA ColB
1111 AAA,BBB,CCC,DDD,EEE,FFF,GGG,HHH,III,JJJ,KKK,LLL
2222 MMM,OOO,PPP
然后我使用excel函数将所有这些值分成不同的字段,主要是这样:
ColA Val1 Val2 Val3 Val4 Val5 Val6 Val7 Val8 Val9 Val10 Val11 Val12
1111 AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK LLL
2222 MMM OOO PPP
但问题是我不想在同一行中出现超过10个值,我想知道是否有超过10个值,它会返回第二行以获取其余值。
答案 0 :(得分:1)
好的,这是我的第二次尝试:
Sub test2()
Dim search As Long
Dim j As Long
Dim l As Long
Dim cCount As Long
Dim aCount As Long
aCount = 1
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
l = 2
j = i
cCount = 0
search = Cells(i, 1).Value
Worksheets("test").Cells(aCount, 1).Value = Cells(i, 1).Value
While search = Cells(j, 1).Value
If l = 12 Then
aCount = aCount + 1
Worksheets("test").Cells(aCount, 1).Value = Cells(i, 1).Value
l = 2
Else
Worksheets("test").Cells(aCount, l).Value = Cells(j, 2).Value
j = j + 1
l = l + 1
cCount = cCount + 1
End If
Wend
aCount = aCount + 1
i = i + cCount - 1
Next i
End Sub
这次你输入:
得到这个:
这次它会检查ColA的值,并且只要值为 ColA是相同的,它将ColB的值放在右边的下一列中,每隔10列中断一次。
最好的问候 Amnney也许我的英语不足以理解这个问题,但事实并非如此 你想要的结果呢?
在:
后: