這就能做到:
Sub sumdevice()
Dim ws As Worksheet
Dim rng As Range
Dim rng2 As Range
Dim cel As Range
Dim lstRow As Long
Set ws = Sheets("Sheet11") 'change this to your sheet name
Set rng = ws.Range(ws.Cells(1, 1), ws.Cells(ws.Rows.Count, 3).End(xlUp))
rng.Copy ws.Range("F1")
Set rng2 = ws.Range(ws.Cells(1, 6), ws.Cells(ws.Rows.Count, 8).End(xlUp))
With rng2
.Value = .Value
.RemoveDuplicates Array(1, 2, 3), xlYes
End With
ws.Range("I1").Value = "Volume"
lstRow = ws.Range("H" & ws.Rows.Count).End(xlUp).Row
Set rng2 = ws.Range("I2:I" & lstRow)
For Each cel In rng2
cel.Value = ws.Evaluate("=SUMIFS($D:$D,$A:$A," & cel.Offset(, -3).Address(0, 0) & ",$B:$B," & cel.Offset(, -2).Address(0, 0) & ",$C:$C," & cel.Offset(, -1).Address(0, 0) & ")")
Next cel
End Sub
它基本上覆制並粘貼在列中的數據A-C到F-H,然後刪除重複。然後在第一列中,它提供了SUMIFS()公式的值。
而你需要/只需要VBA?您可以使用數據透視表來做到這一點...... –
是的,它必須由VBA完成。數據需要採用標準的Excel單元格格式才能與其他公司工具一起使用。 – zaanwar
據我所見,這是一個3嵌套循環解決方案。您應該循環搜索第一列,直到找到相同的單元格內容,然後循環搜索第二列,直到找到相同的單元格內容,然後再次在第三列中執行相同的操作,最後在第三個循環內執行單元格的平均值。將平均值保存到一個數組,並保存在該數組中前三列中找到的單元格內容。 – gmeroni