Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сокращение общих названий (Скрипт или формула) - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Сокращение общих названий (Скрипт или формула)
rico_crazy Дата: Пятница, 19.11.2021, 14:17 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 43
Репутация: 0 ±
Замечаний: 20% ±

И снова привет))))
Нужно написать скрипт для гугл таблицы, который будет сокращать общие названия.
Ну или хотя бы формулу(Но лучше если скрипт)
Есть название разных фирм, по типу:
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, 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
Поскольку нет примера, то судя по этому:
То есть будет отдельный столбец, где будут записаны все эти сокращения(типо база данных)


Вам помогут товарищи:

Код
=Lower()
и
Код
=Vlookup()


[offtop]Здраствуйте. Я, Кирилл. Хотел бы чтобы вы сделали игру, 3Д-экшон суть такова...[/offtop]


Работа, работа, перейди на Федота...

Сообщение отредактировал Kashimirush - Пятница, 19.11.2021, 14:35
 
Ответить
СообщениеПоскольку нет примера, то судя по этому:
То есть будет отдельный столбец, где будут записаны все эти сокращения(типо база данных)


Вам помогут товарищи:

Код
=Lower()
и
Код
=Vlookup()


[offtop]Здраствуйте. Я, Кирилл. Хотел бы чтобы вы сделали игру, 3Д-экшон суть такова...[/offtop]

Автор - Kashimirush
Дата добавления - 19.11.2021 в 14:32
rico_crazy Дата: Пятница, 19.11.2021, 16:07 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 43
Репутация: 0 ±
Замечаний: 20% ±

Поскольку нет примера


Извиняюсь, ссылку прикрепил. Продублирую ёе сюда ещё раз

Табличка-пример находится по ссылке: https://docs.google.com/spreads....sharing
 
Ответить
Сообщение
Поскольку нет примера


Извиняюсь, ссылку прикрепил. Продублирую ёе сюда ещё раз

Табличка-пример находится по ссылке: https://docs.google.com/spreads....sharing

Автор - rico_crazy
Дата добавления - 19.11.2021 в 16:07
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),"""",""))&"""")


Анастасия

Сообщение отредактировал 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
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с 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... делает поиск нечувствительным к регистру.


МОИ: Ник, 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
Репутация: 0 ±
Замечаний: 20% ±

Проверил оба варианты. Все вроде бы ок, но есть одно "Но".
Если же в ячейке из столбца В будет ошибка в тексте хотя бы одна буква, например ячейка В5, я убрал первую букву, тогда после исправлений показывает просто пустую ячейку.

Так же если в ячейке находится иной текст(То есть нету сокращаемого теста) тогда тоже ячейка пустая. Пример ячейка В8

Нужно же, что бы если в тексте ошибка, или же там иной текст, тогда оставляем все без изменений
 
Ответить
СообщениеПроверил оба варианты. Все вроде бы ок, но есть одно "Но".
Если же в ячейке из столбца В будет ошибка в тексте хотя бы одна буква, например ячейка В5, я убрал первую букву, тогда после исправлений показывает просто пустую ячейку.

Так же если в ячейке находится иной текст(То есть нету сокращаемого теста) тогда тоже ячейка пустая. Пример ячейка В8

Нужно же, что бы если в тексте ошибка, или же там иной текст, тогда оставляем все без изменений

Автор - rico_crazy
Дата добавления - 21.11.2021 в 20:49
Gustav Дата: Воскресенье, 21.11.2021, 21:23 | Сообщение № 7
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с 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.

На заметку: при региональной настройке таблицы на Великобританию в ихнюю "запятую" превращается и наша "точка с запятой" (разделитель параметров функций), и наш "обратный слэш" (горизонтальный разделитель массивов).


МОИ: Ник, 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, Что ищет регулярка
Код
"(?i)"


Работа, работа, перейди на Федота...
 
Ответить
СообщениеGustav, Что ищет регулярка
Код
"(?i)"

Автор - Kashimirush
Дата добавления - 22.11.2021 в 10:00
Gustav Дата: Понедельник, 22.11.2021, 11:27 | Сообщение № 9
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Мулька (?i) в функциях REGEX... делает поиск нечувствительным к регистру.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
Мулька (?i) в функциях REGEX... делает поиск нечувствительным к регистру.

Автор - Gustav
Дата добавления - 22.11.2021 в 11:27
rico_crazy Дата: Понедельник, 22.11.2021, 13:21 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 43
Репутация: 0 ±
Замечаний: 20% ±

Спасибо за решение проблемы :)
 
Ответить
СообщениеСпасибо за решение проблемы :)

Автор - rico_crazy
Дата добавления - 22.11.2021 в 13:21
rico_crazy Дата: Среда, 24.11.2021, 18:26 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 43
Репутация: 0 ±
Замечаний: 20% ±

Привет ещё раз)) Подумал, было бы круто сделать автоматическое сокращение названий в той же колонке, куда мы вводим.

Думаю что можно совместить как то этот код, и формулу
Цитата
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: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
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Сейчас есть колонка, значения которой надо преобразовать (скорее всего, она получена импортом откуда-то и никто вручную ее не набивал). И есть соседняя колонка, в которую вводим разработанную формулу и - вуаля! - массово получаем желанный результат. Всё логично, всё естественно.

Внимание, вопрос! Какой ид... оператор, в общем, согласится набивать вручную длиннючую строку "Государственное унитарное предприятие "Бетон"", чтобы после нажатия Enter получить в этой ячейке сокращение "ГУП "Бетон"" ?! %)


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеСейчас есть колонка, значения которой надо преобразовать (скорее всего, она получена импортом откуда-то и никто вручную ее не набивал). И есть соседняя колонка, в которую вводим разработанную формулу и - вуаля! - массово получаем желанный результат. Всё логично, всё естественно.

Внимание, вопрос! Какой ид... оператор, в общем, согласится набивать вручную длиннючую строку "Государственное унитарное предприятие "Бетон"", чтобы после нажатия Enter получить в этой ячейке сокращение "ГУП "Бетон"" ?! %)

Автор - Gustav
Дата добавления - 24.11.2021 в 21:05
rico_crazy Дата: Пятница, 26.11.2021, 14:53 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 43
Репутация: 0 ±
Замечаний: 20% ±

Внимание, вопрос! Какой ид... оператор, в общем, согласится набивать вручную длиннючую строку "Государственное унитарное предприятие "Бетон"", чтобы после нажатия Enter получить в этой ячейке сокращение "ГУП "Бетон"" ?!

Дело в том что иногда люди не вручную вбивают длинную строку типа "Государственное унитарное предприятие "Бетон"", они просто копируют название компании с сайта, после чего вставляют в нужную ячейку, из-за чего ячейка увеличивается в размерах. И если так сделать несколько раз, усложняется читабельность таблицы, из-за её не пропорциональных размеров.
Было бы круто интегрировать как то формулу в скрипт, что бы он изменял текст прямиком в той ячейке где его вписывают
 
Ответить
Сообщение
Внимание, вопрос! Какой ид... оператор, в общем, согласится набивать вручную длиннючую строку "Государственное унитарное предприятие "Бетон"", чтобы после нажатия Enter получить в этой ячейке сокращение "ГУП "Бетон"" ?!

Дело в том что иногда люди не вручную вбивают длинную строку типа "Государственное унитарное предприятие "Бетон"", они просто копируют название компании с сайта, после чего вставляют в нужную ячейку, из-за чего ячейка увеличивается в размерах. И если так сделать несколько раз, усложняется читабельность таблицы, из-за её не пропорциональных размеров.
Было бы круто интегрировать как то формулу в скрипт, что бы он изменял текст прямиком в той ячейке где его вписывают

Автор - rico_crazy
Дата добавления - 26.11.2021 в 14:53
Gustav Дата: Суббота, 27.11.2021, 02:16 | Сообщение № 14
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с 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]


МОИ: Ник, 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
Дата добавления - 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]


Работа, работа, перейди на Федота...

Сообщение отредактировал 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
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
В чем прикол?

1. удаляет из строки ВСЕ двойные кавычки (за счет присутствия в шаблоне "g" = global), т.е. меняет двойные кавычки на пустые строки
2. меняет ПЕРВЫЙ пробел в строке на пробел и двойную кавычку (только первый - потому что нет "g")


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
В чем прикол?

1. удаляет из строки ВСЕ двойные кавычки (за счет присутствия в шаблоне "g" = global), т.е. меняет двойные кавычки на пустые строки
2. меняет ПЕРВЫЙ пробел в строке на пробел и двойную кавычку (только первый - потому что нет "g")

Автор - Gustav
Дата добавления - 29.11.2021 в 12:57
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!