如何在Excel中处理任意数量的任意数量的项目集

时间:2009-05-07 17:25:45

标签: excel report

我有一个特定的案例,但这个问题也适用。当数据量是任意的时,如何处理Excel中的数据?

在我的特定情况下,我有一个程序可以生成1到10组数据,每组由5个任意(但同样)长的数组组成(或者你可以认为它是一个有5列的表)。我希望能够将这些数据转储到Excel中,将命名范围应用到它(这很多,我已经完成),然后在Excel中操作它来创建报告。理想情况下,我想尽可能少用VBA(没有一个是最好的)。我们的想法是,这些报告的最终用户应该能够更改格式(或生成相同数据的全新报告),而无需更改我的程序。

基本上,报告应该是1-10个表格,5个数组中的每个元素都有一行(每个数组都有一列)。

希望这个例子能说清楚我在问什么。除了在VBA中编写完整的东西之外,Excel还提供了哪些选项来处理这些任意数量的数据?

3 个答案:

答案 0 :(得分:1)

您可以将所有数据集中的所有数据放入单个工作表中的单个大范围内。您还可以使用一列来标识特定行来自哪个数据集

对于报告,如果需要总结数据的某些方面,则数据透视表(在“数据”菜单上)是合理的选择。您可以将数据集列用作数据透视表中的页面字段,以便每个数据集都可以显示在单独的报告中

如果您需要在生成报告之前过滤数据集,还可以使用“高级过滤器”(也在“数据”菜单上)将相应的记录过滤到新工作表。然后,您可以从该新工作表中生成数据透视表

存在一些风险因素:

  • 数据集的大小可能超过工作表上的最大行数(Excel 2007中为1,048,576; Excel 2003中为65,536)
  • 给定字段中不同值的数量可能超过数据透视表中的数字(Excel 2007中为1,048,576; Excel 2003中为32,500)
  • 用户可能会发现高级过滤器和/或数据透视表过于难以使用

如果您的数据可能超过任何最大尺寸,则Excel不太可能是用于该数据的合适程序(除了作为某种数据库的前端)

答案 1 :(得分:1)

我不确定我是否理解“然后在Excel中操作它以创建报告”,正如我可以想象的那样,在Excel中生成报告的方式过多,但我有一个建议可能会对你有所帮助(我已经发表了澄清问题的评论,但唉,我的代表仍然太低了!)。如果您需要澄清/示例代码,请告诉我,我很乐意帮忙。

由于您已经有了命名范围,因此可以使用queryTable / listObject实际指向同一工作簿中的另一个工作表。这使用Excel文件DSN(通过ODBC,它应该在所有工作站上使用Excel),我已经多次使用这个技巧来处理我需要报告的变量数据。如何执行此操作取决于您正在运行的Excel版本。我恰好正在运行2007,所以其中的方向是“数据选项卡/来自其他来源/来自Microsoft查询”,选择“Excel文件”,浏览到您的文件(您可能必须首先保存,因为这是你所在的同一个人,并选择你所追求的命名范围。如果您熟悉MS Query,那么它应该是直接的。

现在,新queryTable的DSN将在连接字符串中具有对工作簿的硬编码引用。要更新它,您需要在workbook_open事件中使用一小部分VBA代码。它应该看起来像:

Sub Workbook_Open()
   Dim MyLocation as String
   MyLocation = ThisWorkbook.Path & "\" ThisWorkbook.Name
   Sheet1.ListObjects(1).queryTable.ConnectionString = _
         "ODBC;DSN=Excel Files;DBQ=" & _
         MyLocation & ";DriverId=1046;MaxBufferSize=2048;PageTimeout=5;"
End Sub

显然,对于多个查询,您需要做一些For Eaching,但这就是要点。请告诉我这是否是您正在寻找的内容,我可以为您提供更深入的解释,包括创建查询的好处,方法,代码示例(而不是通过MSQuery手工制作),其他版本的不同方向等等。

注意:这种方法也适用于数据透视表,但我觉得它们对于简单数据集(如您描述的数据)来说很麻烦。

答案 2 :(得分:0)

这可能有用:

http://www.exceluser.com/solutions/variablelists_xl12.htm

我最终采用了这种技术。我只是比我可能需要的更复制我的公式,并编写了一个小的VBA函数来隐藏未使用的行。这不是最优雅的解决方案,但它可以完成工作。