我尝试使用textjoin函数执行此操作,但无法完全弄清楚。我具有以下动态范围:
Product Problem Type
A Type1
A Type2
A Type1
A Type1
B Type2
B Type2
B Type3
C Type3
C Type1
C Type2
D Type3
D Type3
E Type1
我可以很容易地在一个单独的列中按总和(类似于SQL)进行分组,按产品类型对Type1和Type2进行求和(不要对Type3求和)。我的目标是创建一个像这样的一个单元格(不确定常规excel公式是否可以实现)
“ A-4,B-2,C2,E-1”。本质上,它在一个单元格中找到唯一的产品类型,并将乘积的Type1和Type2相加。有可能吗?
由于A的类型为type1 / type2,因此该公式会将不同的乘积值返回到每个字母旁边带有数字4的一个单元格中。注意:如果我创建“总计”列并将groupby公式放在其中,则可以可以通过在公式末尾使用B2:B14&D2:D14而不是sum(countif)部分来使其工作。
{=TEXTJOIN(", ", TRUE, IF(MATCH(B2:B14, B2:B14, 0)=MATCH(ROW(B2:B14), ROW(B2:B14)), B2:B14&SUM(COUNTIFS(B:B,B2,C:C,{"Type1","Type2"})), ""))}
答案 0 :(得分:1)
假设产品范围为Col A
,问题范围为Col B
。
这将利用Col D
,并在完成后将您的输出放在单元格D1
上。如果列D中有数据,请更改代码以使用其他列。
您需要调整第三行以反映工作表名称(将Sheet3
与工作表名称交换并保留引号
Option Explicit
Sub Zero()
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet3")
Dim Product As Range, MyString As String
Application.ScreenUpdating = False
With ws
.Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row).AdvancedFilter xlFilterCopy, , .Range("D1"), True
For Each Product In .Range("D2:D" & .Range("D" & .Rows.Count).End(xlUp).Row)
MyString = MyString & Product & "-" & (Application.WorksheetFunction.CountIfs(.Range("A:A"), Product.Value, .Range("B:B"), "Type1") + _
Application.WorksheetFunction.CountIfs(.Range("A:A"), Product.Value, .Range("B:B"), "Type2")) & ", "
Next Product
.Range("D1:D" & .Range("D" & .Rows.Count).End(xlUp).Row).ClearContents
.Range("D1") = Left(MyString, Len(MyString) - 2)
End With
Application.ScreenUpdating = True
End Sub