你如何制作一个dynamic大小的数据表?

我正在使用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]列中列出的月份自动从其他来源提取适当的数据。

有了这个configuration,我可以在表格的任何位置插入一个新的行,下个月会自动以正确的顺序出现在底部(我发现很漂亮)。

但是我需要把它带到下一个自动化水平,以取悦pipe理层。
我该如何做到这一点,以便电子表格在十月份之后自动添加一行。

我一直在考虑使用表格的dynamic范围:

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

…但Excel不会接受这样的表格区域的公式,我假设,因为它不是静态的。
任何人都可以向我解释如何获得我的数据表的function?

您不能dynamic添加具有公式的新行。

这是一个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 

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

我假设你正在使用Excel的内置“表”? 不知道你如何得到这个自动扩展,但你可以使用这个公式,我已经在2007年testing,这工作。

第一个月使用:

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

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

然后使用:

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

其中F2就是当前单元格上方的单元格。 然后把它拖到你想要的地方。

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

工具>devise>工具>转换为范围

为您的新范围使用dynamic名称。 您可以使用INDEX方法或OFFSET方法。 然后使用条件格式 ,使其看起来不错。

我看了John Walkenbach的“Excel 2010 Formulas”,他没有给出任何解决表格问题的方法。 我认为这是因为桌子应该是自动的,所以不幸的是,当你这样做的时候,你会失去一些控制。

您也可以使用VBA将其自动化。