我一直在创建数据透视表,有人知道我要去哪里了吗?

时间:2019-11-12 09:44:50

标签: excel vba excel-formula pivot-table

过去,我创建了很多数据透视表,发现它们是如此有用。

我真的是想按日期将此预测结果放入数据透视表中,以便我可以深入了解CSV导入的信息。经过数小时的头痛和谷歌搜索,几乎每天都要进行2周的访问。我似乎做不到,每次尝试时,都会以数据透视向导将我的数据全部识别为错误。所以我来这里问专业人士。

有人可以帮助我,告诉我我需要做什么才能将SKU代码获取为 ROWS ,将添加的所有日期动态为 COLUMNS 和预测值是 VALUES

Excel数据 Excel Data

失败 Latest Attempt Result

我基本上希望Pivot镜像我已经拥有的内容,以便我可以将数据向下钻取为格式

AttributeError: 'DataFrame' object has no attribute '_get_object_id'

如果有其他选择,但更简单的方法会很棒。

2 个答案:

答案 0 :(得分:1)

我认为您遇到的问题是如何存储原始数据。现在,您正在执行以下操作:

enter image description here

要使数据透视表正常工作,您需要像这样的表格设计:

enter image description here

请注意,相同的SKU代码可以出现多次,但可以在不同的日期(第12和19行,第13和20行,依此类推)出现。

通过这种表格设计,您可以根据需要创建数据透视表:

enter image description here

因此您需要转置数据。我使用了一些公式,可能会对您有所帮助。如果您有很多数据,那么我强烈建议您使用它们,然后粘贴值,否则文件将被严重收取过多费用,速度缓慢等等。这是一种方法。

enter image description here

  1. 首先,计算您获得了多少SKU代码(在我的图像中,只有7个)
  2. 第二,计算您获得的约会次数(在我的图像中,只有2个)
  3. 在原始数据下,将整组SKU代码(7)复制到同一列中的日期(在我的情况下为两次)次数。
  4. 在下一列(“日期”字段)中,您可以使用以下公式:=INDEX($B$1:$C$1;1;COUNTIFS($A$12:A12;A12))
  5. 在下一列(VALUE字段)中,您可以使用:=INDEX($B$2:$C$8;MATCH(A12;$A$2:$A$8;0);MATCH(B12;$B$1:$C$1;0))
  6. 只需向下拖动,您将获得一个新范围,其中数据已正确转置。而且,该新范围是数据透视表的理想来源,可满足您的需求。 粘贴值!
  7. 如果将新的额外行添加到此新范围,则只需更改数据透视表的源,然后该新数据将立即以所需的设计添加到数据透视表中。
  8. 检查完一切之后,当然要删除旧数据!

我已将示例上载到我的Gdrive中,以防它对您有所帮助。 https://drive.google.com/open?id=1ElEPkk5V3QkME7yLPQuGnU7-wd6fQEd_

希望您可以使其适应您的需求。

答案 1 :(得分:0)

感谢您抽出宝贵的时间为我提供帮助,我设法找到了我认为可以分享的解决方案。这不会沿数据透视表的路线进行,而是为我提供了所需的最终结果。

  Sub NormaliseTable()
Application.Calculation = xlManual
' start with the cursor in the table
  Dim rTab As Range, C As Range, rNext As Range
  Set rTab = ActiveCell.CurrentRegion
  If rTab.Rows.Count = 1 Or rTab.Columns.Count = 1 Then
    MsgBox "Not a well-formed table!"
    Exit Sub
  End If
  Workbooks.Add  ' the sheet for the results
  Set rNext = Range("A1")
  For Each C In rTab.Offset(2, 1).Resize(rTab.Rows.Count - 1, _
         rTab.Columns.Count - 1).Cells
If Not (IsEmpty(C.Value) Or C.Value = "0") Then
      rNext.Value = rTab.Cells(C.Row - rTab.Row + 1, 1)
      rNext.Offset(0, 1).Value = rTab.Cells(1, C.Column - rTab.Column + 1)
      rNext.Offset(0, 2).Value = C.Value
      Set rNext = rNext.Offset(1, 0)
    End If
  Next
  ChDir "\\Client\T$"
    ActiveWorkbook.SaveAs Filename:="\\Client\T$\M3-FC-IMPORT.csv", FileFormat _
        :=xlCSV, CreateBackup:=False
    ActiveWorkbook.Save
    ActiveWindow.Close
    Application.Calculation = xlAutomatic
End Sub

如果没有将“应用程序计算”手动进行,则需要几个小时,因此我使用宏及其几乎瞬时的功能将其关闭并打开!

谢谢 山姆