2 комплект листа.
1) Лист 1 называется DataSheet
и отражает ваш лист ввода данных.
2) Sheet2 называется ChartData
и содержит как преобразованный набор данных для построения диаграммы, так и саму диаграмму. Вот как вы на самом деле хотите, чтобы ваш набор данных для построения диаграмм. Поэтому, если вы можете изменить формат своего отчета, всегда старайтесь создать таблицу в виде «плоского файла», как показано на рисунке.
Вот как это выглядит в состоянии «после»:
Таблица данных:
В ячейку B2
в dataSheet
вы можете ввести 4-значный код для построения диаграммы.
Обратите внимание на начальный ', чтобы сохранить 0 в начале.
Формулы в строке 4:
A) F4 для p
:
=IFERROR(SUMPRODUCT(OFFSET($A$6,0,SUM(COLUMN(H1)-1),COUNTA(Codes),1),--(LEFT(Codes,4)=$B$2),OFFSET($A$6,0,SUM(COLUMN(F1)-1),COUNTA(Codes),1))/H4,"")
Это относится к расчету p
B) G4 для A
:
=SUMPRODUCT(OFFSET($A$6,0,SUM(COLUMN(G1)-1),COUNTA(Codes),1),--(LEFT(Codes,4)=$B$2))
Это суммирует для заданного 4-значного начального кода столбец G.
C) H4 для B
:
=SUMPRODUCT(OFFSET($A$6,0,SUM(COLUMN(H1)-1),COUNTA(Codes),1),--(LEFT(Codes,4)=$B$2))
Это суммирует для заданного 4-значного начального кода столбец H.
Вы можете скопировать и вставить их в блоки по 3, чтобы установить формулы для будущих диапазонов, то есть выберите F4: H4 и скопируйте в I4: K4 и т. д., и формулы будут работать для нового диапазона. Извините, я еще не настроил их, поэтому могу как-то затянуть.
Приветствуйте @Tom Sharpe и @shrivallabha.redij за решение загадки sumproduct, здесь, что является частью решения.
Таблица данных:
A) Формула в B4:
=DataSheet!F2
Это гарантирует, что в качестве даты начала будет установлена первая дата в вашем диапазоне.
B) Формула в B5 для перетаскивания столбца B вниз:
=IF(ROWS($B$4:$B5) <=INT(COLUMNS(dates)/3),$B$4+ROWS($B$5:$B5)*7,NA())
Это обеспечивает еженедельное увеличение даты (т. е. плюс 7 дней) в течение необходимого количества недель. Поскольку каждая дата повторяется 3 раза, количество столбцов в динамическом диапазоне dates
, который охватывает все даты в строке 2 таблицы данных, делится на 3, чтобы получить количество недель, которое должно быть фактически нанесено на график. Если это число превышено, выводится #N/A, поскольку оно не будет нанесено на график.
C) Формула в C4, которая перетаскивается вниз по столбцу C и через столько столбцов, сколько вы используете, то есть в столбец E в показанном примере:
=IFNA(INDEX(SOquestions.xlsb!dataRange,MATCH($B4,dates,0)+COLUMNS($E:E)-1),NA())
Это извлекает значения p, A and B
для даты столбца B. dataRange
— это динамический диапазон, в котором хранятся ваши исходные расчеты в dataSheet
. Если вы откроете Диспетчер имен, выберите dataRange
, а затем поместите курсор в диапазон ссылок, динамический диапазон, на который он ссылается, будет выделен «марширующими муравьями»:
а>
Если столбец даты (B) имеет значение #N/A на листе chartData
, то соответствующие значения p,A и B по умолчанию равны #N/A, поэтому они не отображаются.
Построение диаграммы:
Сама диаграмма представляет собой комбинированную диаграмму, которая имеет 4 динамических ряда.
Ряды добавляются обычным способом, но вы ссылаетесь на динамический ряд, которому предшествует Sheetname!
; как на картинке. Вы используете pSeries,aSeries, bSeries
и dateSeries
для сюжета.
Ось диаграммы должна быть настроена для обработки еженедельных точек данных.
Настройка комбо-диаграммы:
Примечание p нанесено на вспомогательную ось X и отформатировано в процентах.
Процесс обновления:
1) Добавить новые строки в таблицу данных
2) Скопируйте блок из трех столбцов в следующий столбец. Обратите внимание, что в первом столбце блока есть +7 для увеличения недели.
3) Перейдите к ChartData
и перетащите формулы вниз в столбцах B:E.
4) Выберите интересующий вас код, в dataSheet
ячейке B2 и все обновится.
Требуются именованные диапазоны:
Используются динамические именованные диапазоны. Ctrl и F3 вызовут Диспетчер имен, чтобы вы могли добавить их.
Формулы для динамических именованных диапазонов:
Коды
=OFFSET(DataSheet!$A$6,0,0,COUNTA(DataSheet!$A$6:$A$1048576),1)
диапазон данных
=OFFSET(DataSheet!$F$4,0,0,1,COUNT(DataSheet!$F$2:$XFD$2))
даты
=OFFSET(DataSheet!$F$2,0,0,1,COUNT(DataSheet!$F$2:$XFD$2))
pСерия
=OFFSET(DataSheet!$P$11,0,0,COUNT(DataSheet!$B$11:$B$1048576),1)
набор
=OFFSET(ChartData!$D$4,0,0,COUNT(ChartData!$B$11:$B$1048576),1)
bСерия
=OFFSET(ChartData!$E$4,0,0,COUNT(ChartData!$B$11:$B$1048576),1)
ДатаСерия:
=OFFSET(ChartData!$B$4,0,0,COUNT(ChartData!$B$11:$B$1048576),1)
Примечание. Для более ранних версий Excel необходимо настроить конец строки и столбца.
End Row 1048576 становится 65536 End Column XFD становится IV
Дополнительная информация о версии:
http://www.excelfunctions.net/Excel-2003-vs-Excel-2007.html
26.02.2018