Excel - вернуть соседнее значение из нескольких столбцов - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть структурированный отчет, в котором мне нужно вернуть значение прямо справа от ячейки.

Example:
A   B      C   D   E   F    G  H
1  Red     4 Green 6 Orange 7 Pink
2  Black   5 Blue
3  Yellow  

Desired Output
1 Red
2 Black
3 Yellow
4 Green
5 Blue
6 Orange
7 Pink

Всего мне нужно просмотреть около 40 столбцов данных. Одним из решений является использование IFERROR (VLOOKUP), для этого потребуется около 40 VLOOKUPS.

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

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Вы можете преобразовать исходную таблицу в желаемый вывод, используя Power Query, доступный в Excel 2010 +

  • На вкладке «Данные» выберите «Получить и преобразовать из таблицы / диапазона» (это может отличаться в разных версиях)
  • Добавление столбца индекса.
  • Выберите столбец индекса, а затем UNPIVOT other columns
  • Добавьте еще один столбец индекса с нулями
  • Выберите этот новый индекс столбец, затем добавьте столбец Integer / Divide (by 2).
  • Снова с тем же выбранным столбцом индекса добавьте столбец Modulo (by 2).
  • Удалите столбец индекса с нулевым основанием, который вы добавили секунда.
  • Выберите столбец Modulo и Pivot
    • . Для столбца Значения выберите Значение (имя столбца по умолчанию со всеми данными
    • Под Advanced, выберите вариант * 1024). *
  • Удаление посторонних столбцов
  • Переименование поворотных столбцов из 0 | 1 во что угодно (я оставил их в покое)
  • Сортировка строк по номеру колонки

все т Это можно сделать из пользовательского интерфейса, но ниже приведен код M , который вы можете просто вставить в расширенный редактор, если хотите. Вам нужно изменить имя таблицы источника, чтобы оно совпадало с тем, что есть в вашем Excel.

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", Int64.Type}, {"Column2", type text}, {"Column3", Int64.Type}, {"Column4", type text}, {"Column5", Int64.Type}, {"Column6", type text}, {"Column7", Int64.Type}, {"Column8", type text}}),
    #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1),
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Added Index", {"Index"}, "Attribute", "Value"),
    #"Removed Columns" = Table.RemoveColumns(#"Unpivoted Other Columns",{"Attribute"}),
    #"Added Index1" = Table.AddIndexColumn(#"Removed Columns", "Index.1", 0, 1),
    #"Inserted Integer-Division" = Table.AddColumn(#"Added Index1", "Integer-Division", each Number.IntegerDivide([Index.1], 2), Int64.Type),
    #"Inserted Modulo" = Table.AddColumn(#"Inserted Integer-Division", "Modulo", each Number.Mod([Index.1], 2), type number),
    #"Removed Columns1" = Table.RemoveColumns(#"Inserted Modulo",{"Index.1"}),
    #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Removed Columns1", {{"Modulo", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Removed Columns1", {{"Modulo", type text}}, "en-US")[Modulo]), "Modulo", "Value"),
    #"Removed Columns2" = Table.RemoveColumns(#"Pivoted Column",{"Index", "Integer-Division"}),
    #"Sorted Rows" = Table.Sort(#"Removed Columns2",{{"0", Order.Ascending}}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Sorted Rows",{{"0", Int64.Type}, {"1", type text}})
in
    #"Changed Type1"

enter image description here

0 голосов
/ 11 февраля 2020

У меня Excel 2019 (365), поэтому, пожалуйста, попробуйте его с символом @ и без него до ROW и COLUMN

. Вот формула с символами @:

=@INDEX(Matrix;SUMPRODUCT((Matrix=A7)*ROW(Matrix))-@ROW(Matrix)+1;SUMPRODUCT((Matrix=A7)*COLUMN(Matrix))-@COLUMN(Matrix)+1+1)

Нет @ символов:

=INDEX(Matrix;SUMPRODUCT((Matrix=A7)*ROW(Matrix))-ROW(Matrix)+1;SUMPRODUCT((Matrix=A7)*COLUMN(Matrix))-COLUMN(Matrix)+1+1)

На основе этой настройки

Data set up

Результат

Result

Примечание: это будет работать, только если в матрице нет дубликатов

Дайте мне знать, если это работает

...