Как создать таблицу данных динамического размера? - PullRequest
4 голосов
/ 11 ноября 2011

Я использую 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] .

При такой конфигурации я могу просто вставить новую строку в любом месте таблицы, и следующий месяц автоматически появится внизу в правильном порядке (который я нахожу изящным).

Но мне нужно перейти на следующий уровень автоматизации, чтобы угодить руководству.
Как я могу сделать так, чтобы электронная таблица автоматически добавляла строку за октябрь после окончания месяца?

Я рассматривал возможность использования динамического диапазона для таблицы:

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

... но Excel не примет такую ​​формулу для области таблицы, я полагаю, потому что она не является статической.
Может кто-нибудь объяснить мне, как получить эту функциональность с моей таблицей данных?

Ответы [ 3 ]

4 голосов
/ 16 ноября 2011

Вы не можете динамически добавить новую строку только с формулой.

Вот процедура события 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

Не забудьте изменить имя вашей таблицы и добавить имя вашей рабочей таблицы (см. Комментарий внутри кода)

0 голосов
/ 11 ноября 2011

Хорошо, вот что вам, вероятно, нужно сделать.

Инструменты> Дизайн> Инструменты> Преобразовать в диапазон

Используйте динамическое имя для вашего нового диапазона. Вы можете использовать метод INDEX или OFFSET. Затем используйте Условное форматирование , чтобы он выглядел красиво.

Я посмотрел в «Формуле Excel 2010» Джона Уокенбаха, и он не дал никакого решения проблемы с таблицей. Я думаю, это потому, что таблицы должны быть автоматическими, поэтому, к сожалению, вы теряете некоторый контроль при этом.

Вы также можете автоматизировать его с помощью VBA.

0 голосов
/ 11 ноября 2011

Я предполагаю, что вы используете встроенную в Excel "таблицу"? Не знаю, как заставить это расширяться автоматически, но вы можете использовать эту формулу, которую я протестировал в 2007 году, которая работает.

Для первого месяца использования:

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

Где E1 - первый месяц, с которого вы хотите начать.

Тогда используйте:

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

Где F2 - просто ячейка над вашей текущей ячейкой. А затем просто перетащите его вниз так далеко, как хотите.

...