如何制作动态大小的数据表?

时间:2011-11-10 23:14:21

标签: excel datatable excel-formula

我正在使用Excel 2010。

我有一个“月度”数据表,看起来与此类似:

MonthBegin    InventoryExpenses  Overhead  TotalSales  TotalSalesIncome  TotalProfit
July-11       $1,500             $4,952    89          $7,139            $687
August-11     $2,200             $4,236    105         $8,312            $1,876
September-11  $1,100             $4,429    74          $6,691            $1,162

以下公式自动传播到[MonthBegin]列中的每个单元格:

=DATE( 2011, 7 + ( ROW( ) - 2 ), 1 )

其他所有colmun都有一个类似的列公式,可以根据[MonthBegin]列中列出的月份自动从其他来源中提取相应的数据。

使用这种配置,我可以在表格的任何位置插入一个新行,下个月将以正确的顺序自动显示在底部(我觉得很漂亮)。

但我需要将其提升到更高的自动化水平,以取悦管理层 我怎样才能使电子表格在月结束时自动为10月添加一行?

我一直在考虑为表格使用动态范围:

=OFFSET(A1,0,0,( ( YEAR( TODAY( ) ) - 2011 ) * 12 ) + ( MONTH( TODAY( ) ) - 7 ),6)

...但Excel不接受表格区域的这样的公式,我假设因为它不是静态的 任何人都可以向我解释如何使用我的数据表获得此功能吗?

3 个答案:

答案 0 :(得分:4)

您不能动态添加仅包含公式的新行。

这是一个VBA事件过程,可以解决这个问题。您需要输入Workbook module

Option Explicit

Private Sub Workbook_Open()
Dim lo As ListObject
Dim iTot As Long
Set lo = ListObjects("MyTable")
iTot = lo.Range.Rows.Count

'Add this statements before the Range with your worksheet name
'ThisWorkbook.Worksheets("Sheet1")
If Now() > Range("A" & iTot).Value Then
    Range("A" & lo.Range.Rows.Count + 1).Formula = "=DATE( 2011, 7 + ( ROW( ) - 2 ), 1 )"
End If
End Sub

不要忘记更改表的名称并添加工作表的名称(请参阅代码中的注释)

答案 1 :(得分:0)

我假设您使用的是Excel内置的“表格”?不知道如何自动扩展,但你可以使用我在2007年测试过的这个公式,这个公式有效。

第一个月使用:

=DATE(YEAR(E1),MONTH(E1),1)

E1是你想要开始的第一个月。

然后使用:

=IF(TODAY()>=F2,DATE(YEAR(F2),MONTH(F2)+1,1),"")

其中F2只是当前单元格上方的单元格。然后将其向下拖动到你想要的位置。

答案 2 :(得分:0)

好的,这是你可能需要做的事情。

工具>设计>工具>转换为范围

为新范围使用动态名称。您可以使用INDEX方法或OFFSET方法。然后使用Conditional Formatting使其看起来不错。

我查看了约翰·沃肯巴赫的“Excel 2010 Formulas”,他没有给出表格问题的任何解决方案。我认为这是因为表格应该是自动的,所以不幸的是,当你这样做时,你会失去一些控制权。

你也可以使用VBA自动化它。