Egyptian  
 Дата: Вторник, 02.08.2022, 14:49 | 
 Сообщение № 21     
   
 
  
   
 
 
 Группа: Проверенные  
 
 
 Ранг: Ветеран  
 
 Сообщений:  534 
 
 
 
 
  Репутация:    
 196    
 ±  
 
  
 Замечаний:
 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     
   
 
   
 
 
 Группа: Друзья  
 
 
 Ранг: Старожил  
 
 Сообщений:  1218 
 
 
 
 
  Репутация:    
 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