Egyptian
Дата: Вторник, 02.08.2022, 14:49 |
Сообщение № 21
Группа: Проверенные
Ранг: Ветеран
Сообщений: 526
Репутация:
193
±
Замечаний:
0% ±
Excel 2013/2016
scriptapplications , Видимо дело все-таки в версиях Excel. Судя по всему в версиях вплоть до 2019 функция INDEX просто не принимает массив строк, (к примеру для первой строки {2;3;4;5;6;7;8;9}), который подсовывает ей MATCH. Для того чтобы объяснить INDEX-у что так делать не следует, можно прибегнуть к некоему трюку, например такому: Код
=TEXTJOIN(";";1;IFERROR(INDEX($A$2:$A$59;N(INDEX(MATCH(TRIM(MID( C2; FIND( CHAR( 3 ); SUBSTITUTE( ";"&C2; ";"; CHAR(3); ROW( INDIRECT( "1:"&LEN( C2 ) - LEN( SUBSTITUTE( C2; ";"; "" )) + 1)))); FIND( ";"; ";"&C2&";"; FIND( CHAR( 3 ); SUBSTITUTE( ";"&C2; ";"; CHAR( 3 ); ROW( INDIRECT( "1:"&LEN( C2 ) - LEN( SUBSTITUTE( C2; ";"; "")) + 1)))) + 1) - FIND( CHAR( 3 ); SUBSTITUTE( ";"&C2; ";"; CHAR(3); ROW( INDIRECT( "1:"&LEN( C2 ) - LEN( SUBSTITUTE( C2; ";"; "")) + 1)))) - 1));$B$2:$B$59;0);)));""))
Теперь, если выделить MATCH обернутый в N(INDEX...) и нажать F9 но можно опять увидеть тот же самый массив строк {2;3;4;5;6;7;8;9} (ну как тут не вспомнить анекдот про суслика ), который, INDEX принимает и передает функции TEXTJOIN, как массив значений.
scriptapplications , Видимо дело все-таки в версиях Excel. Судя по всему в версиях вплоть до 2019 функция INDEX просто не принимает массив строк, (к примеру для первой строки {2;3;4;5;6;7;8;9}), который подсовывает ей MATCH. Для того чтобы объяснить INDEX-у что так делать не следует, можно прибегнуть к некоему трюку, например такому: Код
=TEXTJOIN(";";1;IFERROR(INDEX($A$2:$A$59;N(INDEX(MATCH(TRIM(MID( C2; FIND( CHAR( 3 ); SUBSTITUTE( ";"&C2; ";"; CHAR(3); ROW( INDIRECT( "1:"&LEN( C2 ) - LEN( SUBSTITUTE( C2; ";"; "" )) + 1)))); FIND( ";"; ";"&C2&";"; FIND( CHAR( 3 ); SUBSTITUTE( ";"&C2; ";"; CHAR( 3 ); ROW( INDIRECT( "1:"&LEN( C2 ) - LEN( SUBSTITUTE( C2; ";"; "")) + 1)))) + 1) - FIND( CHAR( 3 ); SUBSTITUTE( ";"&C2; ";"; CHAR(3); ROW( INDIRECT( "1:"&LEN( C2 ) - LEN( SUBSTITUTE( C2; ";"; "")) + 1)))) - 1));$B$2:$B$59;0);)));""))
Теперь, если выделить MATCH обернутый в N(INDEX...) и нажать F9 но можно опять увидеть тот же самый массив строк {2;3;4;5;6;7;8;9} (ну как тут не вспомнить анекдот про суслика ), который, INDEX принимает и передает функции TEXTJOIN, как массив значений.Egyptian
Ответить
Сообщение scriptapplications , Видимо дело все-таки в версиях Excel. Судя по всему в версиях вплоть до 2019 функция INDEX просто не принимает массив строк, (к примеру для первой строки {2;3;4;5;6;7;8;9}), который подсовывает ей MATCH. Для того чтобы объяснить INDEX-у что так делать не следует, можно прибегнуть к некоему трюку, например такому: Код
=TEXTJOIN(";";1;IFERROR(INDEX($A$2:$A$59;N(INDEX(MATCH(TRIM(MID( C2; FIND( CHAR( 3 ); SUBSTITUTE( ";"&C2; ";"; CHAR(3); ROW( INDIRECT( "1:"&LEN( C2 ) - LEN( SUBSTITUTE( C2; ";"; "" )) + 1)))); FIND( ";"; ";"&C2&";"; FIND( CHAR( 3 ); SUBSTITUTE( ";"&C2; ";"; CHAR( 3 ); ROW( INDIRECT( "1:"&LEN( C2 ) - LEN( SUBSTITUTE( C2; ";"; "")) + 1)))) + 1) - FIND( CHAR( 3 ); SUBSTITUTE( ";"&C2; ";"; CHAR(3); ROW( INDIRECT( "1:"&LEN( C2 ) - LEN( SUBSTITUTE( C2; ";"; "")) + 1)))) - 1));$B$2:$B$59;0);)));""))
Теперь, если выделить MATCH обернутый в N(INDEX...) и нажать F9 но можно опять увидеть тот же самый массив строк {2;3;4;5;6;7;8;9} (ну как тут не вспомнить анекдот про суслика ), который, INDEX принимает и передает функции TEXTJOIN, как массив значений.Автор - Egyptian Дата добавления - 02.08.2022 в 14:49
jakim
Дата: Вторник, 02.08.2022, 15:54 |
Сообщение № 22
Группа: Друзья
Ранг: Старожил
Сообщений: 1216
Репутация:
316
±
Замечаний:
0% ±
Excel 2010
Power Query
[vba]Код
let Source = Excel.CurrentWorkbook(){[Name="Для_Алексея"]}[Content], #"Split Column by Delimiter" = Table.SplitColumn(Source, "Др. цвета", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"Др. цвета.1", "Др. цвета.2", "Др. цвета.3", "Др. цвета.4", "Др. цвета.5", "Др. цвета.6", "Др. цвета.7", "Др. цвета.8"}), #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Split Column by Delimiter", {"ID", "Артикул"}, "Attribute", "Value"), #"Removed Columns" = Table.RemoveColumns(#"Unpivoted Other Columns",{"Артикул", "Attribute"}), #"Trimmed Text" = Table.TransformColumns(#"Removed Columns",{{"Value", Text.Trim, type text}}), #"Sorted Rows" = Table.Sort(#"Trimmed Text",{{"Value", Order.Ascending}}), #"Grouped Rows" = Table.Group(#"Sorted Rows", {"Value"}, {{"Count", each _, type table [ID=number, Value=text]}}), #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each [Count][ID]), #"Removed Columns1" = Table.RemoveColumns(#"Added Custom",{"Count"}), #"Extracted Values" = Table.TransformColumns(#"Removed Columns1", {"Custom", each Text.Combine(List.Transform(_, Text.From), "; "), type text}), #"Renamed Columns" = Table.RenameColumns(#"Extracted Values",{{"Custom", "ID"}}), #"Removed Columns2" = Table.RemoveColumns(#"Renamed Columns",{"Value"}) in #"Removed Columns2"
[/vba]
Power Query
[vba]Код
let Source = Excel.CurrentWorkbook(){[Name="Для_Алексея"]}[Content], #"Split Column by Delimiter" = Table.SplitColumn(Source, "Др. цвета", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"Др. цвета.1", "Др. цвета.2", "Др. цвета.3", "Др. цвета.4", "Др. цвета.5", "Др. цвета.6", "Др. цвета.7", "Др. цвета.8"}), #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Split Column by Delimiter", {"ID", "Артикул"}, "Attribute", "Value"), #"Removed Columns" = Table.RemoveColumns(#"Unpivoted Other Columns",{"Артикул", "Attribute"}), #"Trimmed Text" = Table.TransformColumns(#"Removed Columns",{{"Value", Text.Trim, type text}}), #"Sorted Rows" = Table.Sort(#"Trimmed Text",{{"Value", Order.Ascending}}), #"Grouped Rows" = Table.Group(#"Sorted Rows", {"Value"}, {{"Count", each _, type table [ID=number, Value=text]}}), #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each [Count][ID]), #"Removed Columns1" = Table.RemoveColumns(#"Added Custom",{"Count"}), #"Extracted Values" = Table.TransformColumns(#"Removed Columns1", {"Custom", each Text.Combine(List.Transform(_, Text.From), "; "), type text}), #"Renamed Columns" = Table.RenameColumns(#"Extracted Values",{{"Custom", "ID"}}), #"Removed Columns2" = Table.RemoveColumns(#"Renamed Columns",{"Value"}) in #"Removed Columns2"
[/vba]jakim
Ответить
Сообщение Power Query
[vba]Код
let Source = Excel.CurrentWorkbook(){[Name="Для_Алексея"]}[Content], #"Split Column by Delimiter" = Table.SplitColumn(Source, "Др. цвета", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"Др. цвета.1", "Др. цвета.2", "Др. цвета.3", "Др. цвета.4", "Др. цвета.5", "Др. цвета.6", "Др. цвета.7", "Др. цвета.8"}), #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Split Column by Delimiter", {"ID", "Артикул"}, "Attribute", "Value"), #"Removed Columns" = Table.RemoveColumns(#"Unpivoted Other Columns",{"Артикул", "Attribute"}), #"Trimmed Text" = Table.TransformColumns(#"Removed Columns",{{"Value", Text.Trim, type text}}), #"Sorted Rows" = Table.Sort(#"Trimmed Text",{{"Value", Order.Ascending}}), #"Grouped Rows" = Table.Group(#"Sorted Rows", {"Value"}, {{"Count", each _, type table [ID=number, Value=text]}}), #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each [Count][ID]), #"Removed Columns1" = Table.RemoveColumns(#"Added Custom",{"Count"}), #"Extracted Values" = Table.TransformColumns(#"Removed Columns1", {"Custom", each Text.Combine(List.Transform(_, Text.From), "; "), type text}), #"Renamed Columns" = Table.RenameColumns(#"Extracted Values",{{"Custom", "ID"}}), #"Removed Columns2" = Table.RemoveColumns(#"Renamed Columns",{"Value"}) in #"Removed Columns2"
[/vba]Автор - jakim Дата добавления - 02.08.2022 в 15:54