首页 > 解决方案 > 在没有查询的情况下将值除以数据透视表中另一列的总和

问题描述

我有一张看起来像这样的桌子

|---------------------------------|
| Date | User | Value A | Value B |
|------|------|---------|---------|
| Day1 |  U1  |   A111  |   B111  |
|------|------|---------|---------|
| Day1 |  U1  |   A112  |   B112  |
|------|------|---------|---------|
| Day2 |  U1  |   A121  |   B121  |
|------|------|---------|---------|
| Day2 |  U2  |   A221  |   B221  |
|---------------------------------|

我需要创建一个为每个用户显示的数据透视表:他的值 A 的总和/所有值 B 的总和。

获得一些这样的:

|---------------------------------------|
| Date | User |    Value A / Value B    |
|------|------|-------------------------|
| Day1 |  U1  | (A111+A112)/(B111+B112) |
|------|------|-------------------------|
| Day2 |  U1  |      A121+(B121+B221)   |
|------|------|-------------------------|
| Day2 |  U2  |      A221+(B121+B221)   |
|---------------------------------------|

我只能使用默认的 Microsoft Excel 2010 并且不能安装任何附加组件,所以我只使用 VBA 和数据透视表来保持工作表始终更新。

谢谢

标签: excelvbapivot-table

解决方案


由于数据透视表不适用于自定义函数,因此您只能使用 VBA。在那里你可以使用类似的东西:

Sub getValues()
Dim LastRow As Long
  Sheets("Sheet1").Columns(1).Copy Destination:=Sheets("Sheet1").Columns(8)
  Sheets("Sheet1").Columns(2).Copy Destination:=Sheets("Sheet1").Columns(9)
  Range("H:I").RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes

  With ActiveSheet
    LastRow = .Cells(.Rows.Count, "H").End(xlUp).Row
  End With

  For i = 2 To LastRow
    Cells(i, 10).Formula = "=" & "SUMIFS(C:C,A:A,H" & i & ",B:B,I" & i & ")/SUMIFS(D:D,A:A,H" & i & ",B:B,I" & i & ")"
  Next i
End Sub

推荐阅读