你如何制作一个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将其自动化。