将列值转换为行值

我想用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 

=========

我试着先将这个值分组到一个带有分隔符的字段中,然后使用excel函数把数据分成不同的列。 这里是代码分组的值,但我不知道如何告诉excel去第二行,如果有超过10个值。

这里是将这些值分组的代码:

  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个值,它返回到第二行为rest值。

好的,这是我的第二次尝试:

 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 

这次你input这个:

在这里输入图像说明

并得到这个:

在这里输入图像说明

这次它检查ColA的值,只要ColA的值相同,它将把ColB的值放在下一列的右边,每隔10列就有一个中断。

最好的问候Amnney

也许我的英文不够好理解这个问题,但不是你想要的结果吗?

之前:

在这里输入图像描述

后:

在这里输入图像说明