0

私がここに持っているのはこのようなマトリックスです

    id  value  
     1   A 
     2   B
     3   C
     1   D 
     3   E
     1   F

私がする必要があるのは、私が価値の中に持っているものを合計し、

    id  value  
     1   A, D, F 
     2   B
     3   C, E

重複したものを削除するのは良いことですが、必須ではありません。私は3番目の列でこの式を試しましたが...

 =IF(COUNTIF(A:A,A1)>1,CONCATENATE(B1,",",VLOOKUP(A1,A1:B999,2)),B1)   

VLOOKUPは1つの値を返すだけです。つまり、複数の重複を処理することはできません。

VBAを試してみましたが、初めてで複雑になり、さらにExcelVBAに関する適切なドキュメントが見つかりません。すべての提案をいただければ幸いです。ありがとう

4

2 に答える 2

3

次のVBA関数とのこのリンクはあなたを助けるかもしれません:

Function vlookupall(sSearch As String, rRange As Range, _
    Optional lLookupCol As Long = 2, Optional sDel As String = ",") As String
'Vlookupall searches in first column of rRange for sSearch and returns
'corresponding values of column lLookupCol if sSearch was found. All these
'lookup values are being concatenated, delimited by sDel and returned in
'one string. If lLookupCol is negative then rRange must not have more than
'one column.
'Reverse("moc.LiborPlus.www") PB 16-Sep-2010 V0.20
Dim i As Long, sTemp As String
If lLookupCol > rRange.Columns.Count Or sSearch = "" Or _
    (lLookupCol < 0 And rRange.Columns.Count > 1) Then
    vlookupall = CVErr(xlErrValue)
    Exit Function
End If
vlookupall = ""
For i = 1 To rRange.Rows.Count
    If rRange(i, 1).Text = sSearch Then
        If lLookupCol >= 0 Then
            vlookupall = vlookupall & sTemp & rRange(i,lLookupCol).Text
        Else
            vlookupall = vlookupall & sTemp & rRange(i).Offset(0,lLookupCol).Text
        End If
        sTemp = sDel
    End If
Next i
End Function
于 2013-01-15T17:23:42.197 に答える
1

ピボットテーブルはどうですか:Dそしてデータを好きな場所にコピーします:D

これは、試してみたい場合の別の方法です:)特に、各行に関数を使用したくないが、ボタンをクリックして必要なデータを出力する場合(大きなデータセットの場合)。

サンプルコード:(シート、範囲は自分に合わせて設定できます)

Option Explicit

Sub groupConcat()
Dim dc As Object
Dim inputArray As Variant
Dim i As Integer

    Set dc = CreateObject("Scripting.Dictionary")
    inputArray = WorksheetFunction.Transpose(Sheets(4).Range("Q3:R8").Value)

       '-- assuming you only have two columns - otherwise you need two loops
       For i = LBound(inputArray, 2) To UBound(inputArray, 2)
            If Not dc.Exists(inputArray(1, i)) Then
                dc.Add inputArray(1, i), inputArray(2, i)
            Else
                dc.Item(inputArray(1, i)) = dc.Item(inputArray(1, i)) _ 
                & "," & inputArray(2, i)
            End If
       Next i

    '--output into sheet
    Sheets(4).Range("S3").Resize(UBound(dc.keys) + 1) = _ 
              Application.Transpose(dc.keys)
    Sheets(4).Range("T3").Resize(UBound(dc.items) + 1) = _ 
              Application.Transpose(dc.items)

    Set dc = Nothing
End Sub

出力:

ここに画像の説明を入力してください

于 2013-01-15T17:29:06.673 に答える