楼主 liuguansky |
Q:如何返回供应商各物料对应的报价次数? 报价次数就是报价不同值的意思.源数据如下图所示
如何做下这样的效果:
A:函数公式法: G2:H19区域数组公式:
- =INDEX(A:B,SMALL(IF(MATCH(A2:A25&B2:B25,A2:A25&B2:B25,)=ROW(1:24),ROW(2:25),4^8),ROW(1:24)),{1,2})&""
I2数组公式下拉:
- =IF(LEN(G2&H2),(COUNT(0/FREQUENCY(IF((K2&L2)=(A$2:A$25&B$2:B$25),D$2:D$25),D$2:D$25))),"")
两次透视法: 先透视一次:行字段供应商\物料代码\价格:列字段价格为计数,再粘贴为值,进行空值填充(F5定位空值-"=向上方向键"-"ctrl+enter"),再透视一次.行字段供应商\物料代码,列字段价格为计数 VBA法:这里需引用MSSCRIPTING.RUNTIME 字典+数组:- Option Explicit
- Sub justest()
- Dim d As New Dictionary, arr, i&, str$, k&, arrs(), arrt(), d1
- arr = Range("A1:d" & Range("A1").End(4).Row).Value
- For i = 2 To UBound(arr, 1)
- str = arr(i, 1) & arr(i, 2)
- If Not d.Exists(str) Then
- k = k + 1: d.Add str, k: ReDim Preserve arrt(1 To 3, 1 To k)
- ReDim Preserve arrs(1 To 1, 1 To k): Set arrs(1, k) = New Dictionary
- arrt(1, k) = arr(i, 1): arrt(2, k) = arr(i, 2)
- End If
- If Not arrs(1, d(str)).Exists(arr(i, 4)) Then
- arrs(1, d(str)).Add arr(i, 4), ""
- arrt(3, d(str)) = arrt(3, d(str)) + 1
- End If
- Next i
- Range("k2:m" & Rows.Count).ClearContents
- Range("k2").Resize(k, 3) = Application.Transpose(arrt)
- End Sub
具体附件如下:
桌面.rar |