Сравнение строки в двух столбцах для различий - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь сравнить два столбца строк на предмет различий.

actual data

У меня есть два списка состояний, которые мне нужны для извлеченияразличия. Мне нужно посмотреть, отсутствует ли в столбце F что-либо из столбца G. Есть ли способ сформулировать это без запуска макроса? Спасибо всем!

Ответы [ 4 ]

0 голосов
/ 19 октября 2019

Один бит, который я недавно попробовал:

=IF(B2=“TX”,REPLACE(F2,SEARCH(“CO,”,F2)3,””))

Это находит "CO" в моей строке в F2 и вытаскивает его, оставляя меня с "AR, FL, KY, LA, NJ,NM, OK, TX, ”

Может быть, не самый элегантный способ, но. ,,Как я могу расширить это, чтобы также извлечь «TX», «AR», «LA» и т. Д. (Оставшуюся строку из G2) из ​​F2?

Я смотрю, если что-нибудь из G2отсутствует в F2. Таким образом, мой чистый результат должен быть пустой ячейкой в ​​этом случае.

0 голосов
/ 03 октября 2019

Вы можете сделать это, используя Power Query . Пожалуйста, обратитесь к этой статье , чтобы узнать, как использовать Power Query в вашей версии Excel. Он доступен в Excel 2010 Professional Plus и более поздних версиях . Моя демонстрация использует Excel 2016 .

Шаги:

  1. Использование функции Из таблицы для добавления исходной таблицы в запрос мощностиредактор, Удалите все несущественные столбцы и оставьте только Column F и Column G. Ниже приведен небольшой пример, который я использую:

Sample Table

Щелкните правой кнопкой мыши заголовок Column G, чтобы создать дубликат столбца столбца G;

Duplication

Используйте функцию Разделить столбец на вкладке Transform, чтобы разделить столбец G запятыми , и убедитесь, что выходные параметры помещены в Строки :

Split Column

Добавьте пользовательский столбец на вкладке Add Column с этой формулой: =Text.PositionOf([Col_F],[Col_G])>=0, тогда у вас должно получиться что-то вроде ниже:

Custom Column

Нажмите кнопку фильтра в правой части заголовка столбца, чтобы Фильтр Custom column, чтобы отобразить только FALSE результаты;

Используйте Объединить столбцы на вкладке Transform, чтобы объединить Column F и Column G - Copy с точкой с запятой ; в качестве разделителя. Тогда у вас должно быть:

Merged

Используйте Группировать по Функция для группировки Column G по объединенному столбцу со следующей настройкой. После этого вы увидите, что в столбце Sum отображаются ожидаемые ошибки.

Group By

Перейдите к строке формул и замените формулу на эту: = Table.Group(#"Merged Columns", {"Merged"}, {{"Sum", each Text.Combine([Col_G],","), type text}}), тогда у вас должно получиться что-то вроде следующего:

Text Combine

Затем вы можете разделить объединенный столбец на точку с запятой ;, чтобы получить оригинал Column F и Column G;

Splited

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

Outcome

Приведенные выше шаги могут быть упрощены, если вам не нужно показывать Column G в выходной таблице. Вы можете пропустить шаги 2, 6 и 9. Хитрый бит - это шаг 8, где вы не создаете новый шаг, а скорее меняете формулу, использованную на предыдущем шаге. Ключ заключается в том, чтобы заменить исходную функцию List.Sum на функцию Text.Combine в формуле, чтобы получить желаемый результат.

Здесь находятся Power Query M-коды позади сцены. :

let
    Source = Excel.CurrentWorkbook(){[Name="Table11"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Col_F", type text}, {"Col_G", type text}}),
    #"Duplicated Column" = Table.DuplicateColumn(#"Changed Type", "Col_G", "Col_G - Copy"),
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Duplicated Column", {{"Col_G", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Col_G"),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Col_G", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type1", "Custom", each Text.PositionOf([Col_F],[Col_G])>=0),
    #"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([Custom] = false)),
    #"Merged Columns" = Table.CombineColumns(#"Filtered Rows",{"Col_F", "Col_G - Copy"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Merged"),
    #"Grouped Rows" = Table.Group(#"Merged Columns", {"Merged"}, {{"Sum", each Text.Combine([Col_G],","), type text}}),
    #"Split Column by Delimiter1" = Table.SplitColumn(#"Grouped Rows", "Merged", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"Merged.1", "Merged.2"}),
    #"Changed Type2" = Table.TransformColumnTypes(#"Split Column by Delimiter1",{{"Merged.1", type text}, {"Merged.2", type text}}),
    #"Renamed Columns" = Table.RenameColumns(#"Changed Type2",{{"Merged.1", "Col_F"}, {"Merged.2", "Col_G"}, {"Sum", "Col_Missing"}})
in
    #"Renamed Columns"

Дайте мне знать, если у вас есть какие-либо вопросы. Приветствия:)

0 голосов
/ 03 октября 2019

Кроме того, чтобы увидеть, какие именно данные отсутствуют, вы можете использовать эту формулу:

= IF (ISNUMBER (ПОИСК (MID (TRIM (F1), 1,2)), TRIM (G1), 1)), "", MID (TRIM (F1), 1,2)) &», "& ЕСЛИ (ЕЧИСЛО (ПОИСК (MID (TRIM (F1), 4,2), TRIM (G1), 1)),""MID (TRIM (F1), 4,2)) &", "& ЕСЛИ (ЕЧИСЛО (ПОИСК (MID (TRIM (F1), 7,2), TRIM (G1), 1)),"», (MIDTRIM (F1), 7,2)) & " "& ЕСЛИ (ЕЧИСЛО (ПОИСК (MID (TRIM (F1), 10,2), TRIM (G1), 1)),"", MID (TRIM (F1),, 10,2)) & " "& ЕСЛИ (ЕЧИСЛО (ПОИСК (MID (TRIM (F1), 13,2), TRIM (G1), 1)),"", MID (TRIM (F1), 13,2)) & " "& ЕСЛИ (ЕЧИСЛО (ПОИСК (MID (TRIM (F1), 16,2), TRIM (G1), 1)),"", MID (TRIM (F1), 16,2)) &», "& ЕСЛИ (ЕЧИСЛО (ПОИСК (MID (F1,19,2), TRIM (G1), 1)),"», MID (F1,19,2))

0 голосов
/ 02 октября 2019

Вы можете использовать функцию VLOOKUP, чтобы определить, какие строки отсутствуют в другом наборе.

Если ваши данные начинаются со строки 2, напишите следующее:

=VLOOKUP(G2, [ highlight all the data in column F and lock it], 1, 0)

Любое, что появляется #N/A, означает, что данные отсутствуют в другом наборе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...