我有以下数据,可以通过以下链接看到:
Example of Input and desired Output Data
使用以下逻辑:
从“Sheet1”中提取所有JPM(编曲者)的总值,并将其绘制在表2中,在JPM列的每一行下。
例如,如果“Sheet2”中的B1等于BAML,则在工作表1中搜索BAML并从F列中提取其所有总值并插入BAML列下的“Sheet2”中。
请注意:例如,BAML可以单独存在于单元格中,也可以位于C列单元格中的任何其他位置。
我需要帮助和助手来开发一个宏,它可以在“Sheet2”中显示上面数据链接中所示的输出。我不确定,我将如何解决这个问题。
非常感谢任何帮助。
亲切的问候
输入数据(Sheet1)
输出数据(Sheet2)
答案 0 :(得分:1)
如果您只需要每个cotributor的总数,您可以使用以下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()
代码:
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
输出屏幕截图: