将列值转换为行值

时间:2015-03-20 15:41:42

标签: excel vba excel-vba

我想使用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个值,它会返回第二行以获取其余值。

1 个答案:

答案 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

这次你输入:

enter image description here

得到这个:

enter image description here

这次它会检查ColA的值,并且只要值为 ColA是相同的,它将ColB的值放在右边的下一列中,每隔10列中断一次。

最好的问候 Amnney

也许我的英语不足以理解这个问题,但事实并非如此 你想要的结果呢?

在:

enter image description here

后:

enter image description here