条件转置 - Excel

时间:2014-11-21 21:10:39

标签: excel excel-formula

我有一个列card_id和另一个列日期 现在,对于每列,有b列的多个值

例如:

   column a  column b

   1         10/12/2011    
   1         10/01/2014  
   2         01/02/2013    
   2         01/03/2014   
   2         02/03/2014  
   2         10/09/2014
   3         05/06/2012
   3         02/03/2013

我希望这些显示为:

列a

                date 1        date 2       date 3       date 4
   1         10/12/2011    10/01/2014   -
   2         01/02/2013    01/03/2014   02/03/2014  10/09/2014
   3         05/06/2012    02/03/2013

1 个答案:

答案 0 :(得分:1)

我可能只有你的宏,这里是:

Sub ConsolidateRows_MultipleColumns()
'takes rows and consolidate one or many cells, based on one or many cells matching with above or below rows.

Dim lastRow As Long, i As Long, j As Long
Dim colMatch As Variant, colConcat As Variant

'**********PARAMETERS TO UPDATE****************
Const strMatch As String = "A"    'columns that need to match for consolidation, separated by commas
Const strConcat As String = "B"     'columns that need consolidating, separated by commas - should be rightmost column
Const strSep As String = "|"     'string that will separate the consolidated values, use a value that's not in the consolidated strings
'*************END PARAMETERS*******************

application.ScreenUpdating = False 'disable ScreenUpdating to avoid screen flashes

colMatch = Split(strMatch, ",")
colConcat = Split(strConcat, ",")

lastRow = range("A" & Rows.Count).End(xlUp).Row 'get last row

For i = lastRow To 2 Step -1 'loop from last Row to one

    For j = 0 To UBound(colMatch)
        If Cells(i, colMatch(j)) <> Cells(i - 1, colMatch(j)) Then GoTo nxti
    Next

    For j = 0 To UBound(colConcat)
        Cells(i - 1, colConcat(j)) = Cells(i - 1, colConcat(j)) & strSep & Cells(i, colConcat(j))
    Next

    Rows(i).Delete

nxti:
Next

Columns(strConcat).TextToColumns Destination:=Columns(strConcat).Cells(1, 1), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
    :=strSep

application.ScreenUpdating = True 'reenable ScreenUpdating
End Sub
相关问题