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

Я поясню это на примере.Это макет того, что у меня сейчас есть:

Country         Year     Data
Afghanistan     2000     10  
Afghanistan     2004     12
Afghanistan     2006     15
Afghanistan     2010     30 
Albania         2001     40
Albania         2002     50
Albania         2005     55
Albania         2006     70
Albania         2008     60
Albania         2009     60
Algeria         2000     23
Algeria         2005     30
Algeria         2006     40
Algeria         2007     41
Algeria         2008     39
Algeria         2009     35
Algeria         2010     40  
...

Набор данных большой и работает в течение более длительного периода времени.

Я хочу, чтобы набор данных выглядел так:

Country       2000    2001    2002    2003    2004    2005    2006   2007     2008      2009    2010  
Afghanistan:  10                              12              15                                30  
Albania:              40       50                     55      70              60        60  
Algeria:      23                                      30      40     41       39        35      40 
...

Я могу сгенерировать желаемую структуру довольно легко:

Country      2000    2001     2002     2003    2004   2005    2006   2007     2008     2009    2010  
Afghanistan  
Albania    
Algeria      
...

Но я не могу понять, как заполнить таблицу.Я думаю, что мне нужно сделать hlookup или vlookup, переходя от столбцов к строкам, и он должен обрабатывать несколько критериев соответствия - «страна» + «год» (я пытался объединить, но это дало слишком много точек данных: Афганистан2000, Афганистан 2001 и др.).

Кроме того, сводная таблица, похоже, не работает, потому что она суммирует данные и копирует операторы if(и () не будут работать, потому что ее столбцы в строках.

Я был по всему интернету и не могу найти инструмент для этого. Тем не менее, я уверен, что есть простое решение, но я не могу решить его.

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

4 ответа4

0

Вы можете сделать это без каких-либо формул , построив запрос, используя Get и Transform, предполагая, что вы используете последнюю версию Office для Windows.

Вот как это сделать для предоставленных вами данных:

  1. Сначала поместите исходные данные в таблицу (выберите любую ячейку в диапазоне> ALT+N -> T) и убедитесь, что столбец года отсортирован от наименьшего к наибольшему
  2. Далее сделайте запрос из таблицы (ALT+O -> PT)
  3. В редакторе запросов перейдите на вкладку Transform и выберите Pivot Column
  4. В Values Column выберите « Data
  5. На вкладке Home выберите Close and Load

Это выводит следующую таблицу:

Лучшая часть этого - когда исходный источник изменяется, вам просто нужно повторно выполнить запрос с помощью ALT+A -> R -> A и он заполнит новые данные.

0

Войти

=SUMPRODUCT((TRIM($A$2:$A$18)=TRIM($E3))*(TRIM($B$2:$B$18)=TRIM(F$2))*$C$2:$C$18)

в F3 и скопируйте / перетащите его, чтобы заполнить всю таблицу (F3:P5 в примере):

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

0

Спасибо всем за предложения, однако мне действительно удалось решить эту проблему с помощью сводной таблицы. Все, что мне нужно было сделать, это создать сводную таблицу. Установите столбцы на «год», установите строки на «страну» и установите значения на «данные».

Затем мне просто нужно было установить «значение поля» для данных на «макс», и таблица была заполнена. В итоге заняло около 30 секунд ...

Вы можете получить доступ к «Настройке значения поля» из выпадающего меню в поле «Данные» в поле значений в диалоговом окне «Поля сводной таблицы».

Еще раз спасибо за ответы, я обязательно попробую совпадение, индексные формулы в какой-то момент.

0

если данные отсортированы, то вы можете использовать INDEX:INDEX и MATCH как для B2 (Sheet1 для списка и Sheet2 для формулы, как предполагается):
сначала установите диапазон для просмотра через MATCH

MATCH(Sheet2!$A2,Sheet1!$A:$A,0)
MATCH(Sheet2!$A3,Sheet1!$A:$A,0)-1

Таким образом, вы получите первый и последний ряд для страны. Теперь установите диапазон для просмотра.

INDEX(Sheet1!$B:$B,MATCH(Sheet2!$A2,Sheet1!$A:$A,0)):INDEX(Sheet1!$B:$B,MATCH(Sheet2!$A3,Sheet1!$A:$A,0)-1)

Вывод будет выглядеть одинаково только для $C:$C
Чтобы найти правильный ряд мы используем

MATCH(Sheet2!B$1,[Search range formula],0)

Поместите это в полную формулу

INDEX([output range],[right row])

Поскольку это приведет к ошибке, если совпадение не найдено, поместите часть ошибки вокруг него.

IFERROR([full formula],"")

все вместе это должно выглядеть так

=IFERROR(INDEX(INDEX(Sheet1!$C:$C,MATCH(Sheet2!$A2,Sheet1!$A:$A,0)):INDEX(Sheet1!$C:$C,MATCH(Sheet2!$A3,Sheet1!$A:$A,0)-1),MATCH(Sheet2!B$1,INDEX(Sheet1!$B:$B,MATCH(Sheet2!$A2,Sheet1!$A:$A,0)):INDEX(Sheet1!$B:$B,MATCH(Sheet2!$A3,Sheet1!$A:$A,0)-1),0)),"")

Это может быть автоматически заполнено влево и вниз по мере необходимости. Просто добавьте строку после последней строки в обоих списках, например "zzz", иначе последняя страна ничего не выведет.

Сделано по телефону и может содержать ошибки.

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