Egyptian
Дата: Вторник, 02.08.2022, 14:49 |
Сообщение № 21
Группа: Проверенные
Ранг: Ветеран
Сообщений: 531
Репутация:
194
±
Замечаний:
0% ±
Excel 2013/2016
scriptapplications , Видимо дело все-таки в версиях Excel. Судя по всему в версиях вплоть до 2019 функция INDEX просто не принимает массив строк, (к примеру для первой строки {2;3;4;5;6;7;8;9}), который подсовывает ей MATCH. Для того чтобы объяснить INDEX-у что так делать не следует, можно прибегнуть к некоему трюку, например такому:
=ОБЪЕДИНИТЬ(";";1;ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$59 ;Ч(ИНДЕКС(ПОИСКПОЗ(СЖПРОБЕЛЫ(ПСТР( C2 ; НАЙТИ( СИМВОЛ( 3 ); ПОДСТАВИТЬ( ";"&C2 ; ";"; СИМВОЛ(3); СТРОКА( ДВССЫЛ( "1:"&ДЛСТР( C2 ) - ДЛСТР( ПОДСТАВИТЬ( C2 ; ";"; "" )) + 1)))); НАЙТИ( ";"; ";"&C2 &";"; НАЙТИ( СИМВОЛ( 3 ); ПОДСТАВИТЬ( ";"&C2 ; ";"; СИМВОЛ( 3 ); СТРОКА( ДВССЫЛ( "1:"&ДЛСТР( C2 ) - ДЛСТР( ПОДСТАВИТЬ( C2 ; ";"; "")) + 1)))) + 1) - НАЙТИ( СИМВОЛ( 3 ); ПОДСТАВИТЬ( ";"&C2 ; ";"; СИМВОЛ(3); СТРОКА( ДВССЫЛ( "1:"&ДЛСТР( C2 ) - ДЛСТР( ПОДСТАВИТЬ( 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-у что так делать не следует, можно прибегнуть к некоему трюку, например такому:
=ОБЪЕДИНИТЬ(";";1;ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$59 ;Ч(ИНДЕКС(ПОИСКПОЗ(СЖПРОБЕЛЫ(ПСТР( C2 ; НАЙТИ( СИМВОЛ( 3 ); ПОДСТАВИТЬ( ";"&C2 ; ";"; СИМВОЛ(3); СТРОКА( ДВССЫЛ( "1:"&ДЛСТР( C2 ) - ДЛСТР( ПОДСТАВИТЬ( C2 ; ";"; "" )) + 1)))); НАЙТИ( ";"; ";"&C2 &";"; НАЙТИ( СИМВОЛ( 3 ); ПОДСТАВИТЬ( ";"&C2 ; ";"; СИМВОЛ( 3 ); СТРОКА( ДВССЫЛ( "1:"&ДЛСТР( C2 ) - ДЛСТР( ПОДСТАВИТЬ( C2 ; ";"; "")) + 1)))) + 1) - НАЙТИ( СИМВОЛ( 3 ); ПОДСТАВИТЬ( ";"&C2 ; ";"; СИМВОЛ(3); СТРОКА( ДВССЫЛ( "1:"&ДЛСТР( C2 ) - ДЛСТР( ПОДСТАВИТЬ( 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-у что так делать не следует, можно прибегнуть к некоему трюку, например такому:
=ОБЪЕДИНИТЬ(";";1;ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$59 ;Ч(ИНДЕКС(ПОИСКПОЗ(СЖПРОБЕЛЫ(ПСТР( C2 ; НАЙТИ( СИМВОЛ( 3 ); ПОДСТАВИТЬ( ";"&C2 ; ";"; СИМВОЛ(3); СТРОКА( ДВССЫЛ( "1:"&ДЛСТР( C2 ) - ДЛСТР( ПОДСТАВИТЬ( C2 ; ";"; "" )) + 1)))); НАЙТИ( ";"; ";"&C2 &";"; НАЙТИ( СИМВОЛ( 3 ); ПОДСТАВИТЬ( ";"&C2 ; ";"; СИМВОЛ( 3 ); СТРОКА( ДВССЫЛ( "1:"&ДЛСТР( C2 ) - ДЛСТР( ПОДСТАВИТЬ( C2 ; ";"; "")) + 1)))) + 1) - НАЙТИ( СИМВОЛ( 3 ); ПОДСТАВИТЬ( ";"&C2 ; ";"; СИМВОЛ(3); СТРОКА( ДВССЫЛ( "1:"&ДЛСТР( C2 ) - ДЛСТР( ПОДСТАВИТЬ( 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
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"
Power Query
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"
jakim
Ответить
Сообщение Power Query
[vba]
let Source = Excel.CurrentWorkbook(){[Name ="Для_Алексея"]}[Content ]; Source "Split Column by Delimiter" = Тable.SplitColumn(QuoteStyle.Csv ; "Др. цвета"; Splitter.SplitТextByDelimiter(";"; Text.Trim ); {"Др. цвета.1"; "Др. цвета.2"; "Др. цвета.3"; "Др. цвета.4"; "Др. цвета.5"; "Др. цвета.6"; "Др. цвета.7"; "Др. цвета.8"}); type "Unpivoted Other Columns" = Тable.UnpivotOtherColumns(text "Split Column by Delimiter"; {"ID"; "Артикул"}; "Attribute"; "Value"); Order.Ascending "Removed Columns" = Тable.RemoveColumns(each "Unpivoted Other Columns";{"Артикул"; "Attribute"}); _ "Тrimmed Тext" = Тable.TransformColumns(type "Removed Columns";{{"Value"; table ; ID number }}); Value "Sorted Rows" = Тable.Sort(text "Тrimmed Тext";{{"Value"; each }}); Count "Grouped Rows" = Тable.Group(ID "Sorted Rows"; {"Value"}; {{"Count"; each _ ; Text.From type [text =in ; undefined=undefined]}}); undefined"Added Custom" = Тable.AddColumn(undefined"Grouped Rows"; "Custom"; undefined [undefined][undefined]); undefined"Removed Columns1" = Тable.RemoveColumns(undefined"Added Custom";{"Count"}); undefined"Extracted Values" = Тable.TransformColumns(undefined"Removed Columns1"; {"Custom"; undefined Тext.Combine(List.Transform(undefined; undefined); "; "); undefined undefined}); undefined"Renamed Columns" = Тable.RenameColumns(undefined"Extracted Values";{{"Custom"; "ID"}}); undefined"Removed Columns2" = Тable.RemoveColumns(undefined"Renamed Columns";{"Value"})undefined undefined"Removed Columns2"
[/vba]Автор - jakim Дата добавления - 02.08.2022 в 15:54