在Excel中处理任意数量的任意数量的项目的方法

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

在我的具体情况下,我有一个程序产生1到10组数据,每组由5个任意(但相同)长的数组组成(或者你可以认为它是一个5列的表)。 我希望能够将这些数据转储到Excel中,对其应用命名范围(这一点,我已经完成了),然后在Excel中操作它来创build一个报告。 理想情况下,我想用尽可能小的VBA来做到这一点(不会是最好的)。 这个想法是,这些报告的最终用户应该能够改变格式(或生成相同数据的全新报告),而不必改变我的程序。

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

希望这个例子清楚地表明我在问什么。 除了在VBA中编写整个代码之外,Excel还能为您提供如何处理这些任意数量的数据?

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

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

如果您在生成报告之前需要过滤数据集,也可以使用高级filter(也在数据菜单上)将适当的logging过滤到新的工作表。 然后,您可以从该新工作表生成数据透视表

有一些风险因素:

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

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

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

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

现在,新的queryTable的DSN将在连接string中具有对工作簿的硬编码引用。 要更新这个,你将需要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 

显然,多个查询你需要做一些为了Eaching,但这是主要的。 让我知道这是你在找什么,我可以给你一个更深入的解释,好处,方法,代码示例创build查询(而不是通过MSQuery手),不同的方向为其他版本等等

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

这可能是有用的:

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

我结束了这个技术。 我只是复制了我的公式进一步比我可能需要,并写了一个小的VBA函数来隐藏不被使用的行。 这不是最优雅的解决scheme,但它完成了工作。