Страницы: 1
RSS
Преобразование базы тестов с вопросами и правильными ответами в шпаргалку по алфавиту.
 
Есть база тестов с вопросами и правильными ответами, перед которыми стоят цифры. Эти цифры нужно убрать. И отсортировать вопросы по алфавиту по первому слову. А после вопроса должны идти цифры правильных ответов или сами ответы. Правильные ответы в базе обозначаются цифрой 100, 25, 40, 60, в зависимости от процента который он дает, короче, больше нуля. Сама база и как должно стать в файле. Спасибо всем, кто откликнуться.
 
terros,

Выделить в каждом вопросе первое слово полужирным шрифтом можно только макросом, насколько я понимаю. Иначе можно было бы сделать в Power Query.
 
Цитата
terros написал:
ответы в базе обозначаются цифрой 100, 25, 40, 60
Это не цифры. Это числа.
 
terros, могут быть ошибки. В B3. протянуть. копировать диапазон и вставить только значения. затем использовать макрос отсюда
Код
=ЕСЛИ(ЕЧИСЛО(ПОИСК("100";A3;10));ПСТР(A3;ПОИСК("""";A3)+1;ДЛСТР(A3)-ПОИСК("""";A3))&ЕСЛИОШИБКА(" --"&АГРЕГАТ(15;6;СТРОКА($A$1:$A$1300)/((ЕЧИСЛО(ПОИСК("*"&"100"&"*";$A4:ИНДЕКС(A4:A$1300;ПОИСКПОЗ("#";A4:A$1300;0));ПОИСК(",";A4:A$1300))))+(ЕЧИСЛО(ПОИСК("*"&"25"&"*";$A4:ИНДЕКС(A4:A$1300;ПОИСКПОЗ("#";A4:A$1300;0));ПОИСК(",";A4:A$1300))))+(ЕЧИСЛО(ПОИСК("*"&"40"&"*";$A4:ИНДЕКС(A4:A$1300;ПОИСКПОЗ("#";A4:A$1300;0));ПОИСК(",";A4:A$1300))))+(ЕЧИСЛО(ПОИСК("*"&"60"&"*";$A4:ИНДЕКС(A4:A$1300;ПОИСКПОЗ("#";A4:A$1300;0));ПОИСК(",";A4:A$1300)))));1);"")&ЕСЛИОШИБКА(", --"&АГРЕГАТ(15;6;СТРОКА($A$1:$A$1300)/((ЕЧИСЛО(ПОИСК("*"&"100"&"*";$A4:ИНДЕКС(A4:A$1300;ПОИСКПОЗ("#";A4:A$1300;0));ПОИСК(",";A4:A$1300))))+(ЕЧИСЛО(ПОИСК("*"&"25"&"*";$A4:ИНДЕКС(A4:A$1300;ПОИСКПОЗ("#";A4:A$1300;0));ПОИСК(",";A4:A$1300))))+(ЕЧИСЛО(ПОИСК("*"&"40"&"*";$A4:ИНДЕКС(A4:A$1300;ПОИСКПОЗ("#";A4:A$1300;0));ПОИСК(",";A4:A$1300))))+(ЕЧИСЛО(ПОИСК("*"&"60"&"*";$A4:ИНДЕКС(A4:A$1300;ПОИСКПОЗ("#";A4:A$1300;0));ПОИСК(",";A4:A$1300)))));2);"")&ЕСЛИОШИБКА(", --"&АГРЕГАТ(15;6;СТРОКА($A$1:$A$1300)/((ЕЧИСЛО(ПОИСК("*"&"100"&"*";$A4:ИНДЕКС(A4:A$1300;ПОИСКПОЗ("#";A4:A$1300;0));ПОИСК(",";A4:A$1300))))+(ЕЧИСЛО(ПОИСК("*"&"25"&"*";$A4:ИНДЕКС(A4:A$1300;ПОИСКПОЗ("#";A4:A$1300;0));ПОИСК(",";A4:A$1300))))+(ЕЧИСЛО(ПОИСК("*"&"40"&"*";$A4:ИНДЕКС(A4:A$1300;ПОИСКПОЗ("#";A4:A$1300;0));ПОИСК(",";A4:A$1300))))+(ЕЧИСЛО(ПОИСК("*"&"60"&"*";$A4:ИНДЕКС(A4:A$1300;ПОИСКПОЗ("#";A4:A$1300;0));ПОИСК(",";A4:A$1300)))));3);"");"")

насчет  сортира ничего не придумал (
придумайте название темы конкретнее.  скорее всего, понадобится.
 
Спасибо, всем! Какое название лучше придумать?
 
Цитата
terros написал:
Какое название лучше придумать?
Корректное и отражающее суть вопроса.
По вопросам из тем форума, личку не читаю.
 
И может подскажет ещё кто, как по алфавиту это всё выстроить?
 
скорее всего,перед применением формулы можно в power query сгруппировать, потом сортировать, а потом в excel применить формулы. или все сделать в power query за исключением выделения жирным первого слова.
 
vikttur, Преобразование базы тестов с вопросами и правильными ответами в шпаргалку по алфавиту.
 
Название поменял, ранее скрытые сообщения отображаются.
 
artyrH, Спасибо Вам! Но есть неточности.
Есть вопросы в базе где по 4 правильных ответа, а отбирается только три или в некоторых вообще только один.
Как бы их подправить?
 
artyrH,  или я чего-то не заметил или просто от " до конца строки будет строка без цифр,
=MID(A3;FIND("""";A3)+1;999)
terros,
Что даст выделение первого слова в "У відпрацюванні медичної технології" ?
Что означает и от куда берутся в конце фраз --3 или  --2, --3, --4, --5?

Получили список без приставок в виде чисел,
Отсортировали встроенными средствами по алфавиту
Скопировали и вставили как текст в word?
CTRL+H Ищем  "^13* " Заменяем на ^& . По кнопке формат выбираем шрифт жирный.

Заменить все
для понимания, все символы между новым параграфом (а это в Word перевод строки) до пробела, заменяется на найденное, только жирным.
Изменено: БМВ - 31.01.2019 00:20:17
По вопросам из тем форума, личку не читаю.
 
БМВ, Выделение первого слова даёт возможность лучше видеть на какую букву ищешь вопрос, но это не обязательно. А --1, --2 это вариант правильного ответа(обозначается в тесте цифрами 100 если правильный вариант один, или другими цифрами 25, 30, 40, 60, 70 если правильных вариантов несколько) в тесте подряд сверху вниз.
 
terros, Вы разницу между цифрой и числом понимаете?  
 
Цитата
artyrH написал:
скорее всего,перед применением формулы можно в power query сгруппировать, потом сортировать, а потом в excel применить формулы. или все сделать в power query за исключением выделения жирным первого слова.
Мне всеравно в чем его сделать, главное результат. Но с power query я незнаком вообще))
 
Юрий М,Да, есть цифра есть буква, а есть число) И что? Пусть будет число)))
Изменено: terros - 31.01.2019 00:46:12
 
Кто мешает сделать в pq дополнительный столбец, по которому затем будут условно форматироваться жирные заголовки?  
 
Юрий М,  ну пока с цифрами не надо производить вычисления, они могут быть и цифрами. В данном случае код из символов.

Цитата
terros написал:
А --1, --2 это вариант правильного ответа(обозначается в тесте цифрами 100 …
Да, теперь все на свои места встало

=IF(A2="";MID(A3;FIND("""";A3)+1;999)&MID(SUBSTITUTE(SUBSTITUTE(TEXT(SUM((--MID(A4:INDEX(A:A;ROW(A2)+MATCH("#";A4:A14;));FIND(",";A4:INDEX(A:A;ROW(A2)+MATCH("#";A4:A14;)))+2;1)>0)*ROW($A$1:INDEX(A:A;MATCH("#";A4:A14;)-1))*10^(5-ROW($A$1:INDEX(A:A;MATCH("#";A4:A14;)-1))));"\,0\,0\,0\,0\,0");",0";"");",";", --");2;99);"")
Изменено: БМВ - 31.01.2019 01:32:21
По вопросам из тем форума, личку не читаю.
 
Цитата
terros написал:
обозначается в тесте цифрами 100 если правильный вариант один, или другими цифрами 25, 30, 40, 60, 70 если правильных вариантов несколько
сначала было озвучено
Цитата
terros написал:
Правильные ответы в базе обозначаются цифрой 100, 25, 40, 60
я как понял так и сделал. формула искала максимум четыре только уникальные 100, 25,40,60. ну да ладно, задел сделал, дальше сделают лучше. а сортировку можно заморочиться и формулами.
 
в моем решении на текущий момент заложено до 5 вопросов и хоть все правильные. не очень сложным преобразованием можно сделать до 9.
Сортировка формулами - это конечно не очень хорошо, так как эти 9000 строк будут не быстры, тут более Query подойдет.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:  тут более Query подойдет
Сделайте, пожалуйста, и объясните что к чему.

Цитата
terros написал: короче, больше нуля.
artyrH, они могут быть и 10 и 20, одним словом больше нуля)
Уникальные числа: 100,10, 20, 25, 30, 40, 50, 60, 70, 80, 90. Подправте, пожалуйста вашу формулу!
 
Один из самых дурных запросов PowerQuery, которые приходилось делать. Накидал руками в редакторе методом "в лоб", хотя можно было сделать так красиво ))
Присылаю результаты, скопированные в новый файл, иначе не влазит на форум. Да и вам, похоже, не нужно то, как это сделано )

Да, в данных ошибки есть.
Код
let
    Source = Table.Buffer(Excel.CurrentWorkbook(){[Name="Table1"]}[Content]),
    #"Split Column by Delimiter" = Table.SplitColumn(Source, "Column1", Splitter.SplitTextByDelimiter(", ", QuoteStyle.Csv), {"Column1.1", "Column1.2", "Column1.3", "Column1.4", "Column1.5"}),
    #"Removed Other Columns" = Table.SelectColumns(#"Split Column by Delimiter",{"Column1.2", "Column1.5"}),
    #"Filtered Rows" = Table.SelectRows(#"Removed Other Columns", each not Text.StartsWith([Column1.2], "0")),
    #"Filled Down" = Table.FillDown(#"Filtered Rows",{"Column1.5"}),
    #"Filtered Rows1" = Table.SelectRows(#"Filled Down", each Text.Contains([Column1.2], " ")),
    #"Split Column by Delimiter1" = Table.SplitColumn(#"Filtered Rows1", "Column1.2", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, false), {"Column1.2.1", "Column1.2.2"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter1",{{"Column1.2.1", Int64.Type}, {"Column1.2.2", type text}, {"Column1.5", type text}}),
    #"Split Column by Delimiter2" = Table.SplitColumn(#"Changed Type", "Column1.5", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, false), {"Column1.5.1", "Column1.5.2"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter2",{{"Column1.5.1", Int64.Type}, {"Column1.5.2", type text}}),
    #"Removed Columns" = Table.RemoveColumns(#"Changed Type1",{"Column1.5.1"}),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Column1.5.2", "Вопрос"}, {"Column1.2.2", "Ответ"}, {"Column1.2.1", "Балл"}}),
    #"Reordered Columns" = Table.ReorderColumns(#"Renamed Columns",{"Вопрос", "Ответ", "Балл"}),
    #"Sorted Rows" = Table.Sort(#"Reordered Columns",{{"Вопрос", Order.Ascending}}),
    #"Removed Top Rows" = Table.Skip(#"Sorted Rows",1)
in
    #"Removed Top Rows"
Изменено: Alexey_Spb - 31.01.2019 18:15:20
 
Вы Гений, ваша формула работает почти идеально! Спасибо огромное!
Изменено: terros - 31.01.2019 22:39:43
 
Цитата
terros написал:
100,10, 20, 25, 30, 40, 50, 60, 70, 80, 90
Код
=ЕСЛИ(ЕЧИСЛО(ПОИСК("100";A3;10));ПСТР(A3;ПОИСК("""";A3)+1;ДЛСТР(A3)-ПОИСК("""";A3))&ЕСЛИОШИБКА(" --"&АГРЕГАТ(15;6;СТРОКА($A$1:$A$10000)/(ЕЧИСЛО(ПОИСК({"10 ";20;25;30;40;50;60;70;80;90;100};ПСТР($A4:ИНДЕКС(A4:A$10000;ПОИСКПОЗ("#";A4:A$10000;0));ПОИСК(",";A4:A$10000);5))));1);"")&ЕСЛИОШИБКА(" --"&АГРЕГАТ(15;6;СТРОКА($A$1:$A$10000)/(ЕЧИСЛО(ПОИСК({"10 ";20;25;30;40;50;60;70;80;90;100};ПСТР($A4:ИНДЕКС(A4:A$10000;ПОИСКПОЗ("#";A4:A$10000;0));ПОИСК(",";A4:A$10000);5))));2);"")&ЕСЛИОШИБКА(" --"&АГРЕГАТ(15;6;СТРОКА($A$1:$A$10000)/(ЕЧИСЛО(ПОИСК({"10 ";20;25;30;40;50;60;70;80;90;100};ПСТР($A4:ИНДЕКС(A4:A$10000;ПОИСКПОЗ("#";A4:A$10000;0));ПОИСК(",";A4:A$10000);5))));3);"")&ЕСЛИОШИБКА(" --"&АГРЕГАТ(15;6;СТРОКА($A$1:$A$10000)/(ЕЧИСЛО(ПОИСК({"10 ";20;25;30;40;50;60;70;80;90;100};ПСТР($A4:ИНДЕКС(A4:A$10000;ПОИСКПОЗ("#";A4:A$10000;0));ПОИСК(",";A4:A$10000);5))));4);"");"")
Изменено: artyrH - 31.01.2019 14:22:08
 
terros, прекратите бездумно цитировать! Кнопка цитирования не для ответа!
 
Юрий М, Хорошо.
Всем ещё раз спасибо. Результат есть!
 
terros, пройдитесь по своим сообщениям и приведите их в порядок.
Страницы: 1
Наверх