2016-04-24 261 views
0

我有這張表;如何在Excel中的特定單元格中組合列值?

Table enter image description here

我希望能夠列出這些選項與選項價值觀在一個單元格像這樣每一個給定的產品ID:Image enter image description here

還要記住我在該表中列出了1800個產品ID,因此手動提取數據非常困難。

謝謝。

+0

請顯示您的代碼 –

+0

我試圖結合一些基本功能無濟於事,我目前在我的桌子上沒有代碼。 –

回答

0

這UDF會給你一定的產品ID有一定的選擇您所需的輸出:

Function UDF_ListValues(prodId As Variant, attrib As String, R As Range) 

    Dim colValues As Collection 
    Dim curRow As Range 
    Dim found As Boolean 
    Dim value As Variant 
    Dim first As Boolean 

    If R.Columns.Count <> 3 Then 
     UDF_ListValues = xlErrNA 
    Else 
     Set colValues = New Collection 
     For Each curRow In R.Rows 
      If curRow.Cells(1, 1).value = prodId And curRow.Cells(1, 2).value = attrib Then 
       found = False 
       For Each value In colValues 
        If curRow.Cells(1, 3).value = value Then 
         found = True 
         Exit For 
        End If 
       Next 
       If Not found Then colValues.Add curRow.Cells(1, 3) 
      End If 
     Next 

     first = True 
     For Each value In colValues 
      If first Then 
       UDF_ListValues = attrib & ":" 
       first = False 
      Else 
       UDF_ListValues = UDF_ListValues & "¦" 
      End If 

      UDF_ListValues = UDF_ListValues & value 
     Next 

     Set colValues = Nothing 
    End If 

End Function 

要在你的榜樣得到確切的輸出一樣,你可以按如下調用細胞F2這個功能:

= UDF_ListValues(E2, "Size", $A$2:$C$22) & ";" & UDF_ListValues(E2, "Colour", $A$2:$C$22) 

或者您可以輕鬆修改代碼以自動列出所有發生的選項。

+0

非常感謝,作品像魅力。 @NiH –

0

如果在Office 365最新更新或使用在線應用程序,你可以使用以下數組公式:

="Size:" & TEXTJOIN("|",TRUE,IF(($A$2:$A$12=E2)*($B$2:$B$12="Size"),$C$2:$C$12,"")) & ";Colour:" & TEXTJOIN("|",TRUE,IF(($A$2:$A$12=E2)*($B$2:$B$12="Colour"),$C$2:$C$12,"")) 

作爲數組公式,它必須與確認退出時按Ctrl-Shift鍵輸入編輯模式而不是輸入或製表符。如果做得好,Excel將把公式編號爲{}

enter image description here

0

請嘗試此方法。

Sub Macro() 
Dim lngRow As Long 
For lngRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1 
If StrComp(Range("A" & lngRow), Range("A" & lngRow - 1), vbTextCompare) = 0 Then 
If Range("B" & lngRow) <> "" Then 
Range("B" & lngRow - 1) = Range("B" & lngRow - 1) & "|" & Range("B" & lngRow) 
End If 
Rows(lngRow).Delete 
End If 
Next 
End Sub 
相關問題