У меня есть график, отображающий данные за 3 года, и возможность выбрать, какой год (ы) данных они хотят видеть. Я извлекаю данные из диаграммы, которую я поместил в формулы, которые изменяют данные на # N/A, если они решили отменить выбор этого года. Но график все еще показывает тот год, есть ли способ заставить график распознать параметры АН как нечто, что не должно быть прорисовано?

мои данные выглядят примерно так:

Период # заказов # отгрузок
Р6/2014; 281 74
Р7/2014; 498 126
Р8/2014; 589 132
Р9/2014; 655 158
Р10/2014; 679 161
Р11/2014; 489 115
Р12/2014; 574 129
Р13/2014; 340 80
Р1/2015; 615 225
Р2/2015; 0 0
Р3/2015; 0 0
P4/2015; 0 0
Р5/2015; 0 0
Р6/2015; 0 0
Р7/2015; 0 0
Р8/2015; 0 0
Р9/2015; 0 0
Р10/2015; 0 0
Р11/2015; 0 0
Р12/2015; 0 0
Р13/2015; 0 0

и переключается на это, когда 2015 не выбран:

Период # заказов # отгрузок
Р6/2014; 281 74
Р7/2014; 498 126
Р8/2014; 589 132
Р9/2014; 655 158
Р10/2014; 679 161
Р11/2014; 489 115
Р12/2014; 574 129
Р13/2014; 340 80
Р1/2015; # N/A # N/A
Р2/2015; # N/A # N/A
Р3/2015; # N/A # N/A
P4/2015; # N/A # N/A
Р5/2015; # N/A # N/A
Р6/2015; # N/A # N/A
Р7/2015; # N/A # N/A
Р8/2015; # N/A # N/A
Р9/2015; # N/A # N/A
Р10/2015; # N/A # N/A
Р11/2015; # N/A # N/A
Р12/2015; # N/A # N/A
Р13/2015; # N/A # N/A

формула, которую я имею в этих областях, чтобы сделать это изменение; = ЕСЛИ ($ А.Я. $ 13 = TRUE, $ J24, Н. А. ())

Поэтому я надеялся, что график, который я выбрал для всех этих данных, увидит, что в данных за 2015 год нет никаких данных, и просто не включит их в диаграмму.

1 ответ1

0

Я собираюсь предположить, что у вас есть диаграмма, исходные данные которой имеют все годы, и либо значение для этого года, либо # N/A - возможно, созданная с помощью функции NA() .
В этом случае годы все еще отображаются на вашем графике, потому что они все еще в ваших данных. Вы должны изменить это так, чтобы годы в исходных данных были полностью удалены.
Вы можете сделать это с помощью сводной диаграммы, хотя вам нужно будет написать небольшой VBA для обновления сводного кэша, когда пользователь выбирает разные годы.
Вы также можете сделать это с некоторыми формулами и динамическими диапазонами. Осуществимость этого зависит от того, насколько большими и динамичными будут данные вашей диаграммы. Если вы показываете сводку за каждый год, это может быть легко. Если вы показываете сотни точек данных, это может быть громоздким.
Можете ли вы добавить пример желаемого результата, чтобы мы могли выработать ответ? (Я обновлю этот ответ на основе вашего ответа.)


ОБНОВЛЕНИЕ НА ОСНОВАНИИ ОБНОВЛЕНИЯ ОП
Excel не сбрасывает значения NA() потому что он все еще может их видеть, даже если нет ничего для графика. Это то же самое, что текст там. Ваша ось по-прежнему видит все периоды, поэтому она имеет метки для размещения на оси, а затем просто пропускает данные, которые она не может обработать. Мы должны изменить это так, чтобы Excel смотрел только те данные, которые нам нужны.

  • Проблема 1) Не наметить определенные годы
  • Проблема 2) По-прежнему наметить, что будет после этих лет. (График EG только на 2014 и 2016 годы)

Если бы это была только проблема 1, мы могли бы установить несколько динамических именованных диапазонов и установить их в качестве источника диаграммы. Однако из-за проблемы 2 мы должны сначала установить промежуточную таблицу, а затем создать именованные диапазоны.

Во-первых, я прошу прощения, если это становится немного плотным. Меня часто обвиняют в том, что я слишком многословен. Я действительно хотел бы просто загрузить файл здесь ...

ШАГ 1

Вот CSV-версия моей отправной точки. Мои данные находятся в диапазоне A1:D35 (обратите внимание, что я добавил в начало столбец с именем Order - это поможет позже - и расширил данные до 2016 года.)

Заказ, Срок, заказы, отгрузки
1, Р6/2014,281,74
2, Р7/2014.498.126
3, Р8/2014.589.132
4, Р9/2014.655.158
5, Р10/2014.679.161
6, Р11/2014.489.115
7, Р12/2014.574.129
8, Р13/2014,340,80
9, Р1/2015.615.225
10, Р2/2015,0,0
11, Р3/2015,0,0
12, Р4/2015,0,0
13, Р5/2015,0,0
14, Р6/2015,0,0
15, Р7/2015,0,0
16, Р8/2015,0,0
17, Р9/2015,0,0
18, Р10/2015,0,0
19, Р11/2015,0,0
20, Р12/2015,0,0
21, Р13/2015,0,0
22, Р1/2016,0,0
23, Р2/2016,0,0
24, Р3/2016,0,0
25, Р4/2016,0,0
26, Р5/2016,0,0
27, Р6/2016,0,0
28, Р7/2016,0,0
29, P8/2016,0,0
30, Р9/2016,0,0
31, Р10/2016,0,0
32, Р11/2016,0,0
33, Р12/2016,0,0
34, Р13/2016,0,0

ШАГ 2

Добавьте промежуточную таблицу к NA() что не нужно. Для вас это может быть таким же, как Шаг 1. Для меня я использовал Шаг 1 в качестве необработанных данных, поэтому мне нужен этот другой шаг. Мои данные находятся в диапазоне F1:I35 . В итоге я выглядел как CSV, когда я выбрал 2015 год.

Заказ, Срок, заказы, отгрузки
1, Р6/2014,281,74
2, Р7/2014.498.126
3, Р8/2014.589.132
4, Р9/2014.655.158
5, Р10/2014.679.161
6, Р11/2014.489.115
7, Р12/2014.574.129
8, Р13/2014,340,80
9, Р1/2015, # N/A, # N/A
10, Р2/2015, # N/A, # N/A
11, Р3/2015, # N/A, # N/A
12, Р4/2015, # N/A, # N/A
13, Р5/2015, # N/A, # N/A
14, Р6/2015, # N/A, # N/A
15, Р7/2015, # N/A, # N/A
16, Р8/2015, # N/A, # N/A
17, Р9/2015, # N/A, # N/A
18, Р10/2015, # N/A, # N/A
19, Р11/2015, # N/A, # N/A
20, Р12/2015, # N/A, # N/A
21, Р13/2015, # N/A, # N/A
22, Р1/2016,0,0
23, Р2/2016,0,0
24, Р3/2016,0,0
25, Р4/2016,0,0
26, Р5/2016,0,0
27, Р6/2016,0,0
28, Р7/2016,0,0
29, P8/2016,0,0
30, Р9/2016,0,0
31, Р10/2016,0,0
32, Р11/2016,0,0
33, Р12/2016,0,0
34, Р13/2016,0,0

ШАГ 3

Добавьте третью таблицу, которая извлекает только значения, которые не являются #N/A во второй таблице. Это достигается с помощью формул массива. Помните, как мы добавили столбец Order ? Мы собираемся найти все те значения, которые не совпадают с #N/A в столбце « Orders а затем использовать то, что осталось, чтобы получить остальные данные. Мой третий стол находится в диапазоне K1:N35 .
Формула для первого значения в столбце « Order : (Для всех этих формул важно ввести это с помощью SHIFT+ENTER чтобы превратить их в формулы массива, как указано в скобках { } на обоих концах.)

{=MIN(IF(NOT(ISERROR($H$2:$H$35)),$F$2:$F$35))}

Это находит первое значение в столбце Order второй таблицы (F2:F35), где столбец Orders (H2:H35) не является ошибкой.
Формула для остатка второго значения в столбце Order :

=IF(OR($K2=0,$K2=MAX($F$2:$F$35)),0,MIN(IF(NOT(ISERROR($H$2:$H$35)),IF($F$2:$F$35>$K2,$F$2:$F$35))))

Сначала проверяется, является ли предыдущее значение (в данном случае K2 ) 0 или максимум значений из 2-й таблицы (что означает, что мы закончили), и возвращает 0 в этом случае. В противном случае он находит первое значение в столбце « Order второй таблицы, которое больше, чем предыдущее найденное значение, и где столбец « Orders не является ошибкой.
Эту формулу можно перетащить до остальной части столбца. Результат выглядит как этот CSV.

порядок
1
2
3
4
5
6
7
8
22
23
24
25
26
27
28
29
30
31
32
33
34
0
0
0
0
0
0
0
0
0
0
0
0
0

ШАГ 4

Используйте комбинацию INDEX и MATCH чтобы найти значения для любых оставшихся значений Order Шаг 3. Формула Период, Заказы и Отгрузки приведены в следующем порядке:

=INDEX(B$2:B$35,MATCH($K2,$A$2:$A$35,0))
=INDEX(C$2:C$35,MATCH($K2,$A$2:$A$35,0))
=INDEX(D$2:D$35,MATCH($K2,$A$2:$A$35,0))

Введите их в качестве первой записи и скопируйте / вставьте или перетащите их вниз для остальных. Обратите внимание, что они относятся к первой таблице, и единственным отличием является первый параметр. Вот как выглядит CSV, когда вы решите скрыть 2015 год.

Заказ, Срок, заказы, отгрузки
1, Р6/2014,281,74
2, Р7/2014.498.126
3, Р8/2014.589.132
4, Р9/2014.655.158
5, Р10/2014.679.161
6, Р11/2014.489.115
7, Р12/2014.574.129
8, Р13/2014,340,80
22, Р1/2016,0,0
23, Р2/2016,0,0
24, Р3/2016,0,0
25, Р4/2016,0,0
26, Р5/2016,0,0
27, Р6/2016,0,0
28, Р7/2016,0,0
29, P8/2016,0,0
30, Р9/2016,0,0
31, Р10/2016,0,0
32, Р11/2016,0,0
33, Р12/2016,0,0
34, Р13/2016,0,0
0, # N/A, # N/A, # N/A
0, # N/A, # N/A, # N/A
0, # N/A, # N/A, # N/A
0, # N/A, # N/A, # N/A
0, # N/A, # N/A, # N/A
0, # N/A, # N/A, # N/A
0, # N/A, # N/A, # N/A
0, # N/A, # N/A, # N/A
0, # N/A, # N/A, # N/A
0, # N/A, # N/A, # N/A
0, # N/A, # N/A, # N/A
0, # N/A, # N/A, # N/A
0, # N/A, # N/A, # N/A

ШАГ 5

Создайте динамический именованный диапазон для меток оси X, Series 1 и Series 2. Я использую Excel 2010, и он не позволяет вам установить весь источник данных диаграммы сразу, если это динамический именованный диапазон; он продолжает возвращаться к жестко заданному диапазону, который не обновляется. Это означает, что мы должны создать один для каждой серии и оси отдельно. Чтобы создать именованный диапазон, перейдите на ленту « Formulas и нажмите « Name Manager где-то посередине. В диалоговом окне нажмите кнопку « New в левом верхнем углу. Дайте ему имя и диапазон, к которому можно обратиться. Хитрость в том, что некоторые функции, такие как OFFSET возвращают объекты диапазона, поэтому вы можете использовать их здесь вместо чего-то вроде =A1:D35 . Вот 3 названных диапазона, которые я сделал, и их формула.

Имя: rngPeriod
Формула:

=OFFSET(Sheet1!$L$2,0,0,IFERROR(MATCH(0,Sheet1!$K:$K,0)-2,MATCH(MAX(Sheet1!$A:$A),Sheet1!$K:$K,0)-1))

Имя: rngOrders
Формула:

=OFFSET(Sheet1!$M$2,0,0,IFERROR(MATCH(0,Sheet1!$K:$K,0)-2,MATCH(MAX(Sheet1!$A:$A),Sheet1!$K:$K,0)-1))

Имя: rngShipments
Формула:

=OFFSET(Sheet1!$N$2,0,0,IFERROR(MATCH(0,Sheet1!$K:$K,0)-2,MATCH(MAX(Sheet1!$A:$A),Sheet1!$K:$K,0)-1))


Каждая формула работает одинаково. Начните с верхней части данных, которые мы хотим. Спустись один. Найдите первый 0 в столбце « Order или найдите максимальное значение, которое указывает конец данных, которые мы хотим, и сделайте диапазон достаточно высоким, чтобы охватить все от первой строки до последней строки, которую мы хотим. Ключевой момент: это вызовет ошибку, и ваш график не будет отображаться, если вы решите скрывать каждый год, поэтому каждое значение равно #N/A а самое первое значение в таблице Order равно 0 потому что тогда функция MATCH возвращает 1 и 1-2=-1 и вы не можете иметь диапазон, который равен -1 строке.

ШАГ 6

Настройте диаграмму для использования этих динамических именованных диапазонов. Используйте любое значение для Series name: но Series values: должны быть именами динамических диапазонов. Очень раздражающий ключевой момент в том, что вы должны включить имя файла. Сделайте то же самое для надписей горизонтальной (категории) оси, и все будет готово. Моя диаграмма в конечном итоге использовалась для серий 1, 2 и метки оси:

=sample.xlsx!rngOrders
=sample.xlsx!rngShipments
=sample.xlsx!rngPeriod

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .