【问题标题】:How do you make a dynamically-sized data table?如何制作动态大小的数据表?
【发布时间】:2011-12-26 15:04:21
【问题描述】:

我正在使用 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 不会接受这样的表格区域公式,我假设因为它不是静态的。
谁能向我解释如何使用我的数据表获得此功能?

【问题讨论】:

  • 您是要永久添加月份还是滚动月份,即添加新月份并删除旧月份?
  • @Jon49 永久添加。随着时间的推移,桌子应该会变长。

标签: excel datatable excel-formula


【解决方案1】:

您不能动态仅使用公式添加新行。

这里有一个 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

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

【讨论】:

    【解决方案2】:

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

    第一个月使用:

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

    其中 E1 是您要开始的第一个月。

    然后使用:

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

    其中 F2 是当前单元格上方的单元格。然后把它往下拉到你想去的地方。

    【讨论】:

    • 我已经拥有该功能,形式为 =DATE( 2011, 7 + ( ROW( ) - 2 ), 1 ) 作为列公式。它会自动输入到整个列的每个单元格中,并且仅取决于表格的总高度。这就是为什么我想让表格高度动态化。 :)
    【解决方案3】:

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

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

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

    我查看了 John Walkenbach 的“Excel 2010 公式”,但他没有为表格问题提供任何解决方案。我认为这是因为表格应该是自动的,所以不幸的是,当你这样做时你会失去一些控制。

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

    【讨论】:

      猜你喜欢
      • 2017-06-29
      • 2013-07-27
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      相关资源
      最近更新 更多