各寄稿者の合計のみが必要な場合は、次のExcel式を使用して行うことができます。JPM、CITG、BAMLなどの寄稿者名に基づいて基準を変更します。
方式:
=SUMIF($C$2:$C$13,"*JPM*",$B$2:$C$13)
出力
JPM CITG BAML BCG CIBC DB
2432.74 500 500 500 1812.84 1812.84
これで十分ですか?それ以外の場合は、分散ピボットビューで各貢献者の価格を表示しますか?
OPの要求は、各寄稿者の行ごとに価格を並べ替えることであるため、VBAスニペットがコーディングされます。視覚的に理解しやすくするために、ソリューションピボットがソースデータの横に表示されます。
以下は、解決と出力の手順です。
- シートにボタンを追加します。
- ボタンをダブルクリックして追加します
Call splitSortPivot()
- Excelプロジェクトにモジュールを追加します
- モジュールをダブルクリックして、次のコードをコピーします
- 保存、コンパイル
コード:
Option Explicit
Public Sub splitSortPivot()
Dim ws As Worksheet
Dim sourceRange As Range
Dim rng As Range
Dim i, j, k As Integer
Dim sourceArray As Variant
Dim arrangersArray As Variant
Dim ary As Variant
Set ws = Worksheets("Sheet1")
Set sourceRange = ws.Range("B2:C13")
'Based on the number of records +2 you have in source sheet (Sheet1)
'you may set the first dimension's upper bound of the array
'+1 for header and +1 for total --> in current case 12 + 1 + 1 = 14
'even setting this number can be done programmatically using used rows in C column.
ReDim arrangersArray(0 To 13, 5)
'This code can be optimized to add names programmatically
arrangersArray(0, 0) = "JPM"
arrangersArray(0, 1) = "CITG"
arrangersArray(0, 2) = "BAML"
arrangersArray(0, 3) = "BCG"
arrangersArray(0, 4) = "CIBC"
arrangersArray(0, 5) = "DB"
sourceArray = sourceRange.Value
For j = LBound(sourceArray, 1) To UBound(sourceArray, 1)
If InStr(1, sourceArray(j, 2), ",") > 0 Then
ary = Split(sourceArray(j, 2), ",")
For k = LBound(ary) To UBound(ary)
For i = LBound(arrangersArray, 2) To UBound(arrangersArray, 2)
If arrangersArray(0, i) = Trim(ary(k)) Then
arrangersArray(j, i) = sourceArray(j, 1)
arrangersArray(13, i) = arrangersArray(13, i) + arrangersArray(j, i)
End If
Next i
Next k
Else
For k = LBound(arrangersArray, 2) To UBound(arrangersArray, 2)
If arrangersArray(0, k) = sourceArray(j, 2) Then
arrangersArray(j, k) = sourceArray(j, 1)
arrangersArray(13, k) = arrangersArray(13, k) + arrangersArray(j, k)
End If
Next k
End If
Next j
'Output the processed array into the Sheet.
Range("G1").Resize(UBound(arrangersArray) + 1, _
UBound(Application.Transpose(arrangersArray))) = arrangersArray
End Sub
出力スクリーンショット:
