Сокращение общих названий (Скрипт или формула)
rico_crazy
Дата: Пятница, 19.11.2021, 14:17 |
Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 43
И снова привет)))) Нужно написать скрипт для гугл таблицы, который будет сокращать общие названия. Ну или хотя бы формулу(Но лучше если скрипт) Есть название разных фирм, по типу: 1. Государственное унитарное предприятие "Бетон" 2. Федеральное казенное предприятие "Рубль" 3. Муниципальное унитарное предприятие Шериф 4. Дочернее унитарное предприятие Арена 5. Дочернее предприятие "ВАЗ" Нужно что бы формула сокращала названия соотвественно: 1. ГУП "Бетон" 2. ФКП "Рубль" 3. МУУП "Шериф" 4. ДУП "Арена" 5. ДП "ВАЗ" То есть будет отдельный столбец, где будут записаны все эти сокращения(типо база данных), откуда формула будет проверять. Нужно учесть: 1. Текст "Государственное унитарное предприятие" может записываться в любом регистре, т.е. формула должна опознать: Государственное унитарное предприятие; ГОСУДАРСТВЕННОЕ УНИТАРНОЕ ПРЕДПРИЯТИЕ; Государственное Унитарное Предприятие; и т.д. 2. Так же формула должна учитывать что если текст "Государственное унитарное предприятие" взят в кавычки, его так же нужно найти, и сократить уже без кавычек 3. Название самой фирмы может быть так же в кавычках, или же без. После форматировании текста, нужно что бы название брались в кавычки, то есть: ГУП "Бетон", а не ГУП Бетон 4. Если же формула не находит как сократить название, тогда оставляем все как было записано ранее. 5. Если же ячейка пустая, тогда нужно что бы ячейка оставалась пустой, и без ошибки Табличка-пример находится по ссылке: https://docs.google.com/spreads....sharing
И снова привет)))) Нужно написать скрипт для гугл таблицы, который будет сокращать общие названия. Ну или хотя бы формулу(Но лучше если скрипт) Есть название разных фирм, по типу: 1. Государственное унитарное предприятие "Бетон" 2. Федеральное казенное предприятие "Рубль" 3. Муниципальное унитарное предприятие Шериф 4. Дочернее унитарное предприятие Арена 5. Дочернее предприятие "ВАЗ" Нужно что бы формула сокращала названия соотвественно: 1. ГУП "Бетон" 2. ФКП "Рубль" 3. МУУП "Шериф" 4. ДУП "Арена" 5. ДП "ВАЗ" То есть будет отдельный столбец, где будут записаны все эти сокращения(типо база данных), откуда формула будет проверять. Нужно учесть: 1. Текст "Государственное унитарное предприятие" может записываться в любом регистре, т.е. формула должна опознать: Государственное унитарное предприятие; ГОСУДАРСТВЕННОЕ УНИТАРНОЕ ПРЕДПРИЯТИЕ; Государственное Унитарное Предприятие; и т.д. 2. Так же формула должна учитывать что если текст "Государственное унитарное предприятие" взят в кавычки, его так же нужно найти, и сократить уже без кавычек 3. Название самой фирмы может быть так же в кавычках, или же без. После форматировании текста, нужно что бы название брались в кавычки, то есть: ГУП "Бетон", а не ГУП Бетон 4. Если же формула не находит как сократить название, тогда оставляем все как было записано ранее. 5. Если же ячейка пустая, тогда нужно что бы ячейка оставалась пустой, и без ошибки Табличка-пример находится по ссылке: https://docs.google.com/spreads....sharing rico_crazy
Сообщение отредактировал rico_crazy - Пятница, 19.11.2021, 16:06
Ответить
Сообщение И снова привет)))) Нужно написать скрипт для гугл таблицы, который будет сокращать общие названия. Ну или хотя бы формулу(Но лучше если скрипт) Есть название разных фирм, по типу: 1. Государственное унитарное предприятие "Бетон" 2. Федеральное казенное предприятие "Рубль" 3. Муниципальное унитарное предприятие Шериф 4. Дочернее унитарное предприятие Арена 5. Дочернее предприятие "ВАЗ" Нужно что бы формула сокращала названия соотвественно: 1. ГУП "Бетон" 2. ФКП "Рубль" 3. МУУП "Шериф" 4. ДУП "Арена" 5. ДП "ВАЗ" То есть будет отдельный столбец, где будут записаны все эти сокращения(типо база данных), откуда формула будет проверять. Нужно учесть: 1. Текст "Государственное унитарное предприятие" может записываться в любом регистре, т.е. формула должна опознать: Государственное унитарное предприятие; ГОСУДАРСТВЕННОЕ УНИТАРНОЕ ПРЕДПРИЯТИЕ; Государственное Унитарное Предприятие; и т.д. 2. Так же формула должна учитывать что если текст "Государственное унитарное предприятие" взят в кавычки, его так же нужно найти, и сократить уже без кавычек 3. Название самой фирмы может быть так же в кавычках, или же без. После форматировании текста, нужно что бы название брались в кавычки, то есть: ГУП "Бетон", а не ГУП Бетон 4. Если же формула не находит как сократить название, тогда оставляем все как было записано ранее. 5. Если же ячейка пустая, тогда нужно что бы ячейка оставалась пустой, и без ошибки Табличка-пример находится по ссылке: https://docs.google.com/spreads....sharing Автор - rico_crazy Дата добавления - 19.11.2021 в 14:17
Kashimirush
Дата: Пятница, 19.11.2021, 14:32 |
Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 240
Репутация:
41
±
Замечаний:
0% ±
Excel 2010
Поскольку нет примера, то судя по этому:То есть будет отдельный столбец, где будут записаны все эти сокращения(типо база данных)
Вам помогут товарищи: и [offtop]Здраствуйте. Я, Кирилл. Хотел бы чтобы вы сделали игру, 3Д-экшон суть такова...[/offtop]
Поскольку нет примера, то судя по этому:То есть будет отдельный столбец, где будут записаны все эти сокращения(типо база данных)
Вам помогут товарищи: и [offtop]Здраствуйте. Я, Кирилл. Хотел бы чтобы вы сделали игру, 3Д-экшон суть такова...[/offtop] Kashimirush
Работа, работа, перейди на Федота...
Сообщение отредактировал Kashimirush - Пятница, 19.11.2021, 14:35
Ответить
Сообщение Поскольку нет примера, то судя по этому:То есть будет отдельный столбец, где будут записаны все эти сокращения(типо база данных)
Вам помогут товарищи: и [offtop]Здраствуйте. Я, Кирилл. Хотел бы чтобы вы сделали игру, 3Д-экшон суть такова...[/offtop] Автор - Kashimirush Дата добавления - 19.11.2021 в 14:32
rico_crazy
Дата: Пятница, 19.11.2021, 16:07 |
Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 43
Ответить
aliramora191
Дата: Пятница, 19.11.2021, 18:21 |
Сообщение № 4
Группа: Проверенные
Ранг: Новичок
Сообщений: 36
Репутация:
17
±
Замечаний:
0% ±
2016
Код
=ЕСЛИ(ИЛИ(B5="",МАКС(ARRAYFORMULA(ЕСЛИ(ЕСЛИОШИБКА(ПОИСК(СТРОЧН($E$5:$E$9),СТРОЧН(B5)),0)>0,СТРОКА($E$5:$E$9),0)))=0),"",ИНДЕКС(F:F, МАКС(ЕСЛИ(ЕСЛИОШИБКА(ПОИСК($E$5:$E$9,B5),0)>0,СТРОКА($E$5:$E$9),0)) )&" """& СЖПРОБЕЛЫ( ПОДСТАВИТЬ(ПСТР(B5,ДЛСТР(ИНДЕКС(E:E, МАКС(ЕСЛИ(ЕСЛИОШИБКА(ПОИСК($E$5:$E$9,B5),0)>0,СТРОКА($E$5:$E$9),0)) ))+1,999),"""",""))&"""")
Код
=ЕСЛИ(ИЛИ(B5="",МАКС(ARRAYFORMULA(ЕСЛИ(ЕСЛИОШИБКА(ПОИСК(СТРОЧН($E$5:$E$9),СТРОЧН(B5)),0)>0,СТРОКА($E$5:$E$9),0)))=0),"",ИНДЕКС(F:F, МАКС(ЕСЛИ(ЕСЛИОШИБКА(ПОИСК($E$5:$E$9,B5),0)>0,СТРОКА($E$5:$E$9),0)) )&" """& СЖПРОБЕЛЫ( ПОДСТАВИТЬ(ПСТР(B5,ДЛСТР(ИНДЕКС(E:E, МАКС(ЕСЛИ(ЕСЛИОШИБКА(ПОИСК($E$5:$E$9,B5),0)>0,СТРОКА($E$5:$E$9),0)) ))+1,999),"""",""))&"""")
aliramora191
Анастасия
Сообщение отредактировал aliramora191 - Пятница, 19.11.2021, 18:35
Ответить
Сообщение Код
=ЕСЛИ(ИЛИ(B5="",МАКС(ARRAYFORMULA(ЕСЛИ(ЕСЛИОШИБКА(ПОИСК(СТРОЧН($E$5:$E$9),СТРОЧН(B5)),0)>0,СТРОКА($E$5:$E$9),0)))=0),"",ИНДЕКС(F:F, МАКС(ЕСЛИ(ЕСЛИОШИБКА(ПОИСК($E$5:$E$9,B5),0)>0,СТРОКА($E$5:$E$9),0)) )&" """& СЖПРОБЕЛЫ( ПОДСТАВИТЬ(ПСТР(B5,ДЛСТР(ИНДЕКС(E:E, МАКС(ЕСЛИ(ЕСЛИОШИБКА(ПОИСК($E$5:$E$9,B5),0)>0,СТРОКА($E$5:$E$9),0)) ))+1,999),"""",""))&"""")
Автор - aliramora191 Дата добавления - 19.11.2021 в 18:21
Gustav
Дата: Пятница, 19.11.2021, 21:43 |
Сообщение № 5
Группа: Админы
Ранг: Участник клуба
Сообщений: 2809
Репутация:
1184
±
Замечаний:
±
начинал с Excel 4.0, видел 2.1
Мой "пятачок" в тему: [vba]Код
=ArrayFormula(SUBSTITUTE(SUBSTITUTE(CONCATENATE(IF( REGEXMATCH(B5;"(?i)"&$E$5:$E$9); REGEXREPLACE(B5;"(?i)"&$E$5:$E$9;$F$5:$F$9); ""));"""";"");" ";" """;1))&""""
[/vba] Сохранен по ссылке как "Вариант 2". Мулька (?i) в функциях REGEX... делает поиск нечувствительным к регистру.
Мой "пятачок" в тему: [vba]Код
=ArrayFormula(SUBSTITUTE(SUBSTITUTE(CONCATENATE(IF( REGEXMATCH(B5;"(?i)"&$E$5:$E$9); REGEXREPLACE(B5;"(?i)"&$E$5:$E$9;$F$5:$F$9); ""));"""";"");" ";" """;1))&""""
[/vba] Сохранен по ссылке как "Вариант 2". Мулька (?i) в функциях REGEX... делает поиск нечувствительным к регистру. Gustav
МОИ: Ник , Tip box: 41001663842605
Ответить
Сообщение Мой "пятачок" в тему: [vba]Код
=ArrayFormula(SUBSTITUTE(SUBSTITUTE(CONCATENATE(IF( REGEXMATCH(B5;"(?i)"&$E$5:$E$9); REGEXREPLACE(B5;"(?i)"&$E$5:$E$9;$F$5:$F$9); ""));"""";"");" ";" """;1))&""""
[/vba] Сохранен по ссылке как "Вариант 2". Мулька (?i) в функциях REGEX... делает поиск нечувствительным к регистру. Автор - Gustav Дата добавления - 19.11.2021 в 21:43
rico_crazy
Дата: Воскресенье, 21.11.2021, 20:49 |
Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 43
Проверил оба варианты. Все вроде бы ок, но есть одно "Но". Если же в ячейке из столбца В будет ошибка в тексте хотя бы одна буква, например ячейка В5, я убрал первую букву, тогда после исправлений показывает просто пустую ячейку. Так же если в ячейке находится иной текст(То есть нету сокращаемого теста) тогда тоже ячейка пустая. Пример ячейка В8 Нужно же, что бы если в тексте ошибка, или же там иной текст, тогда оставляем все без изменений
Проверил оба варианты. Все вроде бы ок, но есть одно "Но". Если же в ячейке из столбца В будет ошибка в тексте хотя бы одна буква, например ячейка В5, я убрал первую букву, тогда после исправлений показывает просто пустую ячейку. Так же если в ячейке находится иной текст(То есть нету сокращаемого теста) тогда тоже ячейка пустая. Пример ячейка В8 Нужно же, что бы если в тексте ошибка, или же там иной текст, тогда оставляем все без изменений rico_crazy
Ответить
Сообщение Проверил оба варианты. Все вроде бы ок, но есть одно "Но". Если же в ячейке из столбца В будет ошибка в тексте хотя бы одна буква, например ячейка В5, я убрал первую букву, тогда после исправлений показывает просто пустую ячейку. Так же если в ячейке находится иной текст(То есть нету сокращаемого теста) тогда тоже ячейка пустая. Пример ячейка В8 Нужно же, что бы если в тексте ошибка, или же там иной текст, тогда оставляем все без изменений Автор - rico_crazy Дата добавления - 21.11.2021 в 20:49
Gustav
Дата: Воскресенье, 21.11.2021, 21:23 |
Сообщение № 7
Группа: Админы
Ранг: Участник клуба
Сообщений: 2809
Репутация:
1184
±
Замечаний:
±
начинал с Excel 4.0, видел 2.1
Нужно же, что бы если в тексте ошибка, или же там иной текст, тогда оставляем все без изменений
Ащще не вопрос - обернём в проверочку: [vba]Код
=ArrayFormula(IF(OR(REGEXMATCH(B5;"(?i)"&$E$5:$E$9)); SUBSTITUTE(SUBSTITUTE(CONCATENATE(IF( REGEXMATCH(B5;"(?i)"&$E$5:$E$9); REGEXREPLACE(B5;"(?i)"&$E$5:$E$9;$F$5:$F$9); ""));"""";"");" ";" """;1)&""""; B5))
[/vba]Сохранено по ссылке как "Вариант 2 bis". [p.s.]И еще один вариантик нарисовался - в сторону упрощения:[/p.s.] [vba]Код
=ArrayFormula(IFERROR(SUBSTITUTE(SUBSTITUTE( VLOOKUP(TRUE;{REGEXMATCH(B5;"(?i)"&$E$5:$E$9)\ REGEXREPLACE(B5;"(?i)"&$E$5:$E$9;$F$5:$F$9)};2;) ;"""";"");" ";" """;1)&"""";B5))
[/vba]Сохранено по ссылке как "Вариант 3". Длина формулы по сравнению с "2 bis" сократилась на 34 символа - с 207 до 173. На заметку: при региональной настройке таблицы на Великобританию в ихнюю "запятую" превращается и наша "точка с запятой" (разделитель параметров функций), и наш "обратный слэш" (горизонтальный разделитель массивов).
Нужно же, что бы если в тексте ошибка, или же там иной текст, тогда оставляем все без изменений
Ащще не вопрос - обернём в проверочку: [vba]Код
=ArrayFormula(IF(OR(REGEXMATCH(B5;"(?i)"&$E$5:$E$9)); SUBSTITUTE(SUBSTITUTE(CONCATENATE(IF( REGEXMATCH(B5;"(?i)"&$E$5:$E$9); REGEXREPLACE(B5;"(?i)"&$E$5:$E$9;$F$5:$F$9); ""));"""";"");" ";" """;1)&""""; B5))
[/vba]Сохранено по ссылке как "Вариант 2 bis". [p.s.]И еще один вариантик нарисовался - в сторону упрощения:[/p.s.] [vba]Код
=ArrayFormula(IFERROR(SUBSTITUTE(SUBSTITUTE( VLOOKUP(TRUE;{REGEXMATCH(B5;"(?i)"&$E$5:$E$9)\ REGEXREPLACE(B5;"(?i)"&$E$5:$E$9;$F$5:$F$9)};2;) ;"""";"");" ";" """;1)&"""";B5))
[/vba]Сохранено по ссылке как "Вариант 3". Длина формулы по сравнению с "2 bis" сократилась на 34 символа - с 207 до 173. На заметку: при региональной настройке таблицы на Великобританию в ихнюю "запятую" превращается и наша "точка с запятой" (разделитель параметров функций), и наш "обратный слэш" (горизонтальный разделитель массивов).Gustav
МОИ: Ник , Tip box: 41001663842605
Сообщение отредактировал Gustav - Воскресенье, 21.11.2021, 22:55
Ответить
Сообщение Нужно же, что бы если в тексте ошибка, или же там иной текст, тогда оставляем все без изменений
Ащще не вопрос - обернём в проверочку: [vba]Код
=ArrayFormula(IF(OR(REGEXMATCH(B5;"(?i)"&$E$5:$E$9)); SUBSTITUTE(SUBSTITUTE(CONCATENATE(IF( REGEXMATCH(B5;"(?i)"&$E$5:$E$9); REGEXREPLACE(B5;"(?i)"&$E$5:$E$9;$F$5:$F$9); ""));"""";"");" ";" """;1)&""""; B5))
[/vba]Сохранено по ссылке как "Вариант 2 bis". [p.s.]И еще один вариантик нарисовался - в сторону упрощения:[/p.s.] [vba]Код
=ArrayFormula(IFERROR(SUBSTITUTE(SUBSTITUTE( VLOOKUP(TRUE;{REGEXMATCH(B5;"(?i)"&$E$5:$E$9)\ REGEXREPLACE(B5;"(?i)"&$E$5:$E$9;$F$5:$F$9)};2;) ;"""";"");" ";" """;1)&"""";B5))
[/vba]Сохранено по ссылке как "Вариант 3". Длина формулы по сравнению с "2 bis" сократилась на 34 символа - с 207 до 173. На заметку: при региональной настройке таблицы на Великобританию в ихнюю "запятую" превращается и наша "точка с запятой" (разделитель параметров функций), и наш "обратный слэш" (горизонтальный разделитель массивов).Автор - Gustav Дата добавления - 21.11.2021 в 21:23
Kashimirush
Дата: Понедельник, 22.11.2021, 10:00 |
Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 240
Репутация:
41
±
Замечаний:
0% ±
Excel 2010
Gustav , Что ищет регулярка
Работа, работа, перейди на Федота...
Ответить
Сообщение Gustav , Что ищет регулярка Автор - Kashimirush Дата добавления - 22.11.2021 в 10:00
Gustav
Дата: Понедельник, 22.11.2021, 11:27 |
Сообщение № 9
Группа: Админы
Ранг: Участник клуба
Сообщений: 2809
Репутация:
1184
±
Замечаний:
±
начинал с Excel 4.0, видел 2.1
Мулька (?i) в функциях REGEX... делает поиск нечувствительным к регистру.
Мулька (?i) в функциях REGEX... делает поиск нечувствительным к регистру.
Gustav
МОИ: Ник , Tip box: 41001663842605
Ответить
Сообщение Мулька (?i) в функциях REGEX... делает поиск нечувствительным к регистру.
Автор - Gustav Дата добавления - 22.11.2021 в 11:27
rico_crazy
Дата: Понедельник, 22.11.2021, 13:21 |
Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 43
Спасибо за решение проблемы
Ответить
Сообщение Спасибо за решение проблемы Автор - rico_crazy Дата добавления - 22.11.2021 в 13:21
rico_crazy
Дата: Среда, 24.11.2021, 18:26 |
Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 43
Привет ещё раз)) Подумал, было бы круто сделать автоматическое сокращение названий в той же колонке, куда мы вводим. Думаю что можно совместить как то этот код, и формулуЦитата
function onEdit(e) { let column = e.range.getColumn(); let sheetName = e.range.getSheet().getName(); let row = e.range.getRow(); if (column == 4 && sheetName == 'Название страницы' && row > 1) { let txt = e.value; let newTxt = txt.split('\n').map(x => { return '+38' + x.replace(/\D+/g, '').padStart(13, "0").substring(3, 13); }).join('\n') e.range.setValue(newTxt); } }
Функция:Код
=ArrayFormula(IFERROR(SUBSTITUTE(SUBSTITUTE( VLOOKUP(TRUE,{REGEXMATCH(B5,"(?i)"&$E$5:$E$9), REGEXREPLACE(B5,"(?i)"&$E$5:$E$9,$F$5:$F$9)},2,) ,"""","")," "," """,1)&"""",B5))
Проблема в том что я далёкий пока от этого, пытаюсь разобраться, но пришёл в тупик
Привет ещё раз)) Подумал, было бы круто сделать автоматическое сокращение названий в той же колонке, куда мы вводим. Думаю что можно совместить как то этот код, и формулуЦитата
function onEdit(e) { let column = e.range.getColumn(); let sheetName = e.range.getSheet().getName(); let row = e.range.getRow(); if (column == 4 && sheetName == 'Название страницы' && row > 1) { let txt = e.value; let newTxt = txt.split('\n').map(x => { return '+38' + x.replace(/\D+/g, '').padStart(13, "0").substring(3, 13); }).join('\n') e.range.setValue(newTxt); } }
Функция:Код
=ArrayFormula(IFERROR(SUBSTITUTE(SUBSTITUTE( VLOOKUP(TRUE,{REGEXMATCH(B5,"(?i)"&$E$5:$E$9), REGEXREPLACE(B5,"(?i)"&$E$5:$E$9,$F$5:$F$9)},2,) ,"""","")," "," """,1)&"""",B5))
Проблема в том что я далёкий пока от этого, пытаюсь разобраться, но пришёл в тупик rico_crazy
Сообщение отредактировал rico_crazy - Среда, 24.11.2021, 18:28
Ответить
Сообщение Привет ещё раз)) Подумал, было бы круто сделать автоматическое сокращение названий в той же колонке, куда мы вводим. Думаю что можно совместить как то этот код, и формулуЦитата
function onEdit(e) { let column = e.range.getColumn(); let sheetName = e.range.getSheet().getName(); let row = e.range.getRow(); if (column == 4 && sheetName == 'Название страницы' && row > 1) { let txt = e.value; let newTxt = txt.split('\n').map(x => { return '+38' + x.replace(/\D+/g, '').padStart(13, "0").substring(3, 13); }).join('\n') e.range.setValue(newTxt); } }
Функция:Код
=ArrayFormula(IFERROR(SUBSTITUTE(SUBSTITUTE( VLOOKUP(TRUE,{REGEXMATCH(B5,"(?i)"&$E$5:$E$9), REGEXREPLACE(B5,"(?i)"&$E$5:$E$9,$F$5:$F$9)},2,) ,"""","")," "," """,1)&"""",B5))
Проблема в том что я далёкий пока от этого, пытаюсь разобраться, но пришёл в тупик Автор - rico_crazy Дата добавления - 24.11.2021 в 18:26
Gustav
Дата: Среда, 24.11.2021, 21:05 |
Сообщение № 12
Группа: Админы
Ранг: Участник клуба
Сообщений: 2809
Репутация:
1184
±
Замечаний:
±
начинал с Excel 4.0, видел 2.1
Сейчас есть колонка, значения которой надо преобразовать (скорее всего, она получена импортом откуда-то и никто вручную ее не набивал). И есть соседняя колонка, в которую вводим разработанную формулу и - вуаля! - массово получаем желанный результат. Всё логично, всё естественно. Внимание, вопрос! Какой ид... оператор, в общем, согласится набивать вручную длиннючую строку "Государственное унитарное предприятие "Бетон"", чтобы после нажатия Enter получить в этой ячейке сокращение "ГУП "Бетон"" ?!
Сейчас есть колонка, значения которой надо преобразовать (скорее всего, она получена импортом откуда-то и никто вручную ее не набивал). И есть соседняя колонка, в которую вводим разработанную формулу и - вуаля! - массово получаем желанный результат. Всё логично, всё естественно. Внимание, вопрос! Какой ид... оператор, в общем, согласится набивать вручную длиннючую строку "Государственное унитарное предприятие "Бетон"", чтобы после нажатия Enter получить в этой ячейке сокращение "ГУП "Бетон"" ?! Gustav
МОИ: Ник , Tip box: 41001663842605
Ответить
Сообщение Сейчас есть колонка, значения которой надо преобразовать (скорее всего, она получена импортом откуда-то и никто вручную ее не набивал). И есть соседняя колонка, в которую вводим разработанную формулу и - вуаля! - массово получаем желанный результат. Всё логично, всё естественно. Внимание, вопрос! Какой ид... оператор, в общем, согласится набивать вручную длиннючую строку "Государственное унитарное предприятие "Бетон"", чтобы после нажатия Enter получить в этой ячейке сокращение "ГУП "Бетон"" ?! Автор - Gustav Дата добавления - 24.11.2021 в 21:05
rico_crazy
Дата: Пятница, 26.11.2021, 14:53 |
Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 43
Внимание, вопрос! Какой ид... оператор, в общем, согласится набивать вручную длиннючую строку "Государственное унитарное предприятие "Бетон"", чтобы после нажатия Enter получить в этой ячейке сокращение "ГУП "Бетон"" ?!
Дело в том что иногда люди не вручную вбивают длинную строку типа "Государственное унитарное предприятие "Бетон"", они просто копируют название компании с сайта, после чего вставляют в нужную ячейку, из-за чего ячейка увеличивается в размерах. И если так сделать несколько раз, усложняется читабельность таблицы, из-за её не пропорциональных размеров. Было бы круто интегрировать как то формулу в скрипт, что бы он изменял текст прямиком в той ячейке где его вписывают
Внимание, вопрос! Какой ид... оператор, в общем, согласится набивать вручную длиннючую строку "Государственное унитарное предприятие "Бетон"", чтобы после нажатия Enter получить в этой ячейке сокращение "ГУП "Бетон"" ?!
Дело в том что иногда люди не вручную вбивают длинную строку типа "Государственное унитарное предприятие "Бетон"", они просто копируют название компании с сайта, после чего вставляют в нужную ячейку, из-за чего ячейка увеличивается в размерах. И если так сделать несколько раз, усложняется читабельность таблицы, из-за её не пропорциональных размеров. Было бы круто интегрировать как то формулу в скрипт, что бы он изменял текст прямиком в той ячейке где его вписываютrico_crazy
Ответить
Сообщение Внимание, вопрос! Какой ид... оператор, в общем, согласится набивать вручную длиннючую строку "Государственное унитарное предприятие "Бетон"", чтобы после нажатия Enter получить в этой ячейке сокращение "ГУП "Бетон"" ?!
Дело в том что иногда люди не вручную вбивают длинную строку типа "Государственное унитарное предприятие "Бетон"", они просто копируют название компании с сайта, после чего вставляют в нужную ячейку, из-за чего ячейка увеличивается в размерах. И если так сделать несколько раз, усложняется читабельность таблицы, из-за её не пропорциональных размеров. Было бы круто интегрировать как то формулу в скрипт, что бы он изменял текст прямиком в той ячейке где его вписываютАвтор - rico_crazy Дата добавления - 26.11.2021 в 14:53
Gustav
Дата: Суббота, 27.11.2021, 02:16 |
Сообщение № 14
Группа: Админы
Ранг: Участник клуба
Сообщений: 2809
Репутация:
1184
±
Замечаний:
±
начинал с Excel 4.0, видел 2.1
Было бы круто интегрировать как то формулу в скрипт, что бы он изменял текст прямиком в той ячейке где его вписывают
Интегрировать формулу в скрипт не получится - нужно просто заменить ее несколькими скриптовыми строчками, производящими тот же эффект, что и формула. Ну, нечто получилось. Не могу сказать, что я в бурном восторге, но нужное действие с одной ячейкой, вроде, выполняется: [vba]Код
function onEdit(e) { rng = e.range; if (rng.getSheet().getName() == 'Сокращение общих названий' && rng.getColumn() == 3) { var str = rng.getValue(); var searchValues = ['Государственное унитарное предприятие', 'Федеральное казенное предприятие', 'Муниципальное унитарное предприятие', 'Дочернее унитарное предприятие', 'Дочернее предприятие']; var pattern = '('+searchValues.join(')|(')+')'; var regex = new RegExp(pattern, 'i'); str = str.replace(/"/g,''); str = str.replace(regex, function(match, p1, p2, p3, p4, p5) { if (p1) return 'ГУП'; if (p2) return 'ФКП'; if (p3) return 'МУП'; if (p4) return 'ДУП'; if (p5) return 'ДП'; }); str = str.replace(/\s/,' "'); if (str) rng.setValue(str+'"'); } }
[/vba] [p.s.]Созрела версия покороче - с заметно более комфортным управлением списком параметров внутренней функции (я приободрился)[/p.s.]: [vba]Код
function onEdit(e) { rng = e.range; if (rng.getSheet().getName() == 'Сокращение общих названий' && rng.getColumn() == 3) { var str = rng.getValue(); var searchValues = ['Государственное унитарное предприятие', 'Федеральное казенное предприятие', 'Муниципальное унитарное предприятие', 'Дочернее унитарное предприятие', 'Дочернее предприятие']; var newValues = ['ГУП','ФКП','МУП','ДУП','ДП']; var pattern = '('+searchValues.join(')|(')+')'; var regex = new RegExp(pattern, 'i'); str = str.replace(/"/g,''); str = str.replace(regex, function() { for (var i=1; i<=5; i++) { if (arguments[i]) return newValues[i-1] } }); str = str.replace(/\s/,' "'); if (str) rng.setValue(str+'"'); } }
[/vba]
Было бы круто интегрировать как то формулу в скрипт, что бы он изменял текст прямиком в той ячейке где его вписывают
Интегрировать формулу в скрипт не получится - нужно просто заменить ее несколькими скриптовыми строчками, производящими тот же эффект, что и формула. Ну, нечто получилось. Не могу сказать, что я в бурном восторге, но нужное действие с одной ячейкой, вроде, выполняется: [vba]Код
function onEdit(e) { rng = e.range; if (rng.getSheet().getName() == 'Сокращение общих названий' && rng.getColumn() == 3) { var str = rng.getValue(); var searchValues = ['Государственное унитарное предприятие', 'Федеральное казенное предприятие', 'Муниципальное унитарное предприятие', 'Дочернее унитарное предприятие', 'Дочернее предприятие']; var pattern = '('+searchValues.join(')|(')+')'; var regex = new RegExp(pattern, 'i'); str = str.replace(/"/g,''); str = str.replace(regex, function(match, p1, p2, p3, p4, p5) { if (p1) return 'ГУП'; if (p2) return 'ФКП'; if (p3) return 'МУП'; if (p4) return 'ДУП'; if (p5) return 'ДП'; }); str = str.replace(/\s/,' "'); if (str) rng.setValue(str+'"'); } }
[/vba] [p.s.]Созрела версия покороче - с заметно более комфортным управлением списком параметров внутренней функции (я приободрился)[/p.s.]: [vba]Код
function onEdit(e) { rng = e.range; if (rng.getSheet().getName() == 'Сокращение общих названий' && rng.getColumn() == 3) { var str = rng.getValue(); var searchValues = ['Государственное унитарное предприятие', 'Федеральное казенное предприятие', 'Муниципальное унитарное предприятие', 'Дочернее унитарное предприятие', 'Дочернее предприятие']; var newValues = ['ГУП','ФКП','МУП','ДУП','ДП']; var pattern = '('+searchValues.join(')|(')+')'; var regex = new RegExp(pattern, 'i'); str = str.replace(/"/g,''); str = str.replace(regex, function() { for (var i=1; i<=5; i++) { if (arguments[i]) return newValues[i-1] } }); str = str.replace(/\s/,' "'); if (str) rng.setValue(str+'"'); } }
[/vba]Gustav
МОИ: Ник , Tip box: 41001663842605
Сообщение отредактировал Gustav - Суббота, 27.11.2021, 03:55
Ответить
Сообщение Было бы круто интегрировать как то формулу в скрипт, что бы он изменял текст прямиком в той ячейке где его вписывают
Интегрировать формулу в скрипт не получится - нужно просто заменить ее несколькими скриптовыми строчками, производящими тот же эффект, что и формула. Ну, нечто получилось. Не могу сказать, что я в бурном восторге, но нужное действие с одной ячейкой, вроде, выполняется: [vba]Код
function onEdit(e) { rng = e.range; if (rng.getSheet().getName() == 'Сокращение общих названий' && rng.getColumn() == 3) { var str = rng.getValue(); var searchValues = ['Государственное унитарное предприятие', 'Федеральное казенное предприятие', 'Муниципальное унитарное предприятие', 'Дочернее унитарное предприятие', 'Дочернее предприятие']; var pattern = '('+searchValues.join(')|(')+')'; var regex = new RegExp(pattern, 'i'); str = str.replace(/"/g,''); str = str.replace(regex, function(match, p1, p2, p3, p4, p5) { if (p1) return 'ГУП'; if (p2) return 'ФКП'; if (p3) return 'МУП'; if (p4) return 'ДУП'; if (p5) return 'ДП'; }); str = str.replace(/\s/,' "'); if (str) rng.setValue(str+'"'); } }
[/vba] [p.s.]Созрела версия покороче - с заметно более комфортным управлением списком параметров внутренней функции (я приободрился)[/p.s.]: [vba]Код
function onEdit(e) { rng = e.range; if (rng.getSheet().getName() == 'Сокращение общих названий' && rng.getColumn() == 3) { var str = rng.getValue(); var searchValues = ['Государственное унитарное предприятие', 'Федеральное казенное предприятие', 'Муниципальное унитарное предприятие', 'Дочернее унитарное предприятие', 'Дочернее предприятие']; var newValues = ['ГУП','ФКП','МУП','ДУП','ДП']; var pattern = '('+searchValues.join(')|(')+')'; var regex = new RegExp(pattern, 'i'); str = str.replace(/"/g,''); str = str.replace(regex, function() { for (var i=1; i<=5; i++) { if (arguments[i]) return newValues[i-1] } }); str = str.replace(/\s/,' "'); if (str) rng.setValue(str+'"'); } }
[/vba]Автор - Gustav Дата добавления - 27.11.2021 в 02:16
Kashimirush
Дата: Понедельник, 29.11.2021, 08:11 |
Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 240
Репутация:
41
±
Замечаний:
0% ±
Excel 2010
В чем прикол?str = str.replace(/"/g,'');
str = str.replace(/\s/,' "');
В чем прикол?str = str.replace(/"/g,'');
str = str.replace(/\s/,' "');
Kashimirush
Работа, работа, перейди на Федота...
Ответить
Сообщение В чем прикол?str = str.replace(/"/g,'');
str = str.replace(/\s/,' "');
Автор - Kashimirush Дата добавления - 29.11.2021 в 08:11
Kashimirush
Дата: Понедельник, 29.11.2021, 08:25 |
Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 240
Репутация:
41
±
Замечаний:
0% ±
Excel 2010
Если справочник сокращений действительно будет существовать и замены только по нему, то можно обойтись и вовсе без регулярок: [vba]Код
... let searchValues = ['Государственное унитарное предприятие', 'Федеральное казенное предприятие', 'Муниципальное унитарное предприятие', 'Дочернее унитарное предприятие', 'Дочернее предприятие']; let newValues = ['ГУП','ФКП','МУП','ДУП','ДП']; searchValues.forEach( (item, i) => { str.toLowerCase().includes( item.toLowerCase() ) ? str = str.toLowerCase().replace( item.toLowerCase(), newValues[i] ) : '' }) ...
[/vba]
Если справочник сокращений действительно будет существовать и замены только по нему, то можно обойтись и вовсе без регулярок: [vba]Код
... let searchValues = ['Государственное унитарное предприятие', 'Федеральное казенное предприятие', 'Муниципальное унитарное предприятие', 'Дочернее унитарное предприятие', 'Дочернее предприятие']; let newValues = ['ГУП','ФКП','МУП','ДУП','ДП']; searchValues.forEach( (item, i) => { str.toLowerCase().includes( item.toLowerCase() ) ? str = str.toLowerCase().replace( item.toLowerCase(), newValues[i] ) : '' }) ...
[/vba] Kashimirush
Работа, работа, перейди на Федота...
Сообщение отредактировал Kashimirush - Понедельник, 29.11.2021, 08:31
Ответить
Сообщение Если справочник сокращений действительно будет существовать и замены только по нему, то можно обойтись и вовсе без регулярок: [vba]Код
... let searchValues = ['Государственное унитарное предприятие', 'Федеральное казенное предприятие', 'Муниципальное унитарное предприятие', 'Дочернее унитарное предприятие', 'Дочернее предприятие']; let newValues = ['ГУП','ФКП','МУП','ДУП','ДП']; searchValues.forEach( (item, i) => { str.toLowerCase().includes( item.toLowerCase() ) ? str = str.toLowerCase().replace( item.toLowerCase(), newValues[i] ) : '' }) ...
[/vba] Автор - Kashimirush Дата добавления - 29.11.2021 в 08:25
Gustav
Дата: Понедельник, 29.11.2021, 12:57 |
Сообщение № 17
Группа: Админы
Ранг: Участник клуба
Сообщений: 2809
Репутация:
1184
±
Замечаний:
±
начинал с Excel 4.0, видел 2.1
1. удаляет из строки ВСЕ двойные кавычки (за счет присутствия в шаблоне "g" = global), т.е. меняет двойные кавычки на пустые строки 2. меняет ПЕРВЫЙ пробел в строке на пробел и двойную кавычку (только первый - потому что нет "g")
1. удаляет из строки ВСЕ двойные кавычки (за счет присутствия в шаблоне "g" = global), т.е. меняет двойные кавычки на пустые строки 2. меняет ПЕРВЫЙ пробел в строке на пробел и двойную кавычку (только первый - потому что нет "g")Gustav
МОИ: Ник , Tip box: 41001663842605
Ответить
Сообщение 1. удаляет из строки ВСЕ двойные кавычки (за счет присутствия в шаблоне "g" = global), т.е. меняет двойные кавычки на пустые строки 2. меняет ПЕРВЫЙ пробел в строке на пробел и двойную кавычку (только первый - потому что нет "g")Автор - Gustav Дата добавления - 29.11.2021 в 12:57