Страницы: 1
RSS
Сокращение количество вложений функции "ЕСЛИ"
 
Добрый вечер. Подскажите пожалуйста как составить формулу для Директ. Нужно так что бы Excel сам вычитывал сколько символов есть и сколько подставить осталось. Автоматически составлял заголовки не более 33 символов. В файле пример моей работы, но формула слишком большая и если придётся менять слова то каждый раз получается очень кропотливая работа. Есть ли такая формула которая это упростит?.    
Изменено: IgorN - 24.03.2015 20:39:56
 
вы че там хором над этой проблемой работаете?)
файл не смотрел, но "33 символа" напомнили:
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=64186&TITLE_SEO=64186-umestit...
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=8&TID=27211&TITLE_SEO=27211&MID=238...
 
Ну посмотрел файл это мне ничего не дало. Есть формула которая выдала ЛОЖЬ и че дальше-то? Чего делать? Можно подробнее, а то смотреть что делает формула и угадать что она должна сделать как-то лень.
 
Поясню.
Формула в примере не дописана, по причине невозможности увеличения количества вложений функции ЕСЛИ (7 уловий, далее эксель взбунтовался).

Имеется перечень названий станций метро (столбец А)
Имеется ограничение по длине загаловка объявления в 33 символа.
Общий вид загаловка объявления должен иметь вид:
Интернет - метро Авиамоторная!
Т.е. обязательная добавка к станции метро "Интернет - ", "метро" или "м.", и в случае, если остается еще запас символов, то "!", "Подключи" и т.д.
Все возможные варианты перечислены в примере и отсортированы по убыванию.
В последнем столбце I - вычислена разница 33 минус длина всех добавок, т.е. сколько символов максимально может содержать название станции метро.
Далее формула должна проверять истинность условия:
Если длина названия метро меньше или равна первой (самой длинной строке добавок), то сцеплять все необходимые добавки из этой строки.
Если же нет, то проверять условия следующей строки, то тех пор, пока условие не будет соблюдено.

Формулами ЕСЛИ, это можно сделать, и в примере часть сделана, но далее эксель отказывается продолжать.
Да и при необходимости внести правки в формулу возникнет куча геморя.

Потому нужна какая то формула, которая будет сверять искомую длину станции метро со всем списком остаточных длин добавок и выполнять сцепку необходимых добавок из этой строки.
Недеюсь получилось доходчиво объяснить
 
Цитата
Skarfex написал:  обязательная добавка к станции метро "Интернет - ",
ДЛСТР(Интернет - )=11

к примеру:
ДЛСТР(Бульвар Дмитрия Донского)=24
Как в таком случае поступать ?
или я не правильно понял и у вас не 33 максимальное количество знаков ?
Кажется все забыли про сводные :)
 
Ну это исключение. В любом случае будет проводиться контроль в ручную.
Будем считать, что все в порядке)
 
Сделать табличку соответствия - при каких длинах строк добавлять что и куда - а потом просто ВПР - по числу знаков
п,с. Если смогу с дому посмотрю. С Работы выгоняют - рабочий день окончен :)
Изменено: арех - 25.03.2015 17:50:28
Кажется все забыли про сводные :)
 
Буду признателен)
Я уже обдумывал вариант VLOOKUP2, но там же нужно точное соответствие?
А в данном случае есть условия меньше или равно. Т.е. может быть такой вариант, что остаточная длина всех добавок в одной строке 4, в следующей 6, а потом 7.
Наша станция имеет длину, скажем, 5. Выходит, что точного соответствия нет.
Первая добавка не подходит, вторая подходит.
Да в ВПР же возвращает точное значение таблицы из нужной строки, нужного столбца. А нам нужно сцепить их.
Или это будет выглядешь приблизительно так?
СЦЕПИТЬ(ВПР(...);ВПР(...))?
 
Ребята, не оставьте без внимания данную проблему.
 
Цитата
арех написал:
п,с. Если смогу с дому посмотрю. С Работы выгоняют
Правильно писать - "из работы.."
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Вот распределение по длинам названий станций в Вашем списке: 4 - 2, 5 - 2, 6 - 5, 7 - 14, 8 - 18, 9 - 19, 10 - 21, 11 - 29, 12 - 20, 13 - 21, 14 - 10, 15 - 9, 16 - 3, 17 - 5, 18 - 5, 19 - 1, 20 - 3, 21 - 2, 22 - 5, 24 - 2
Если подумать, то возможно некоторые варианты подстановок имеет смысл не принимать во внимание в связи с низкой частотой применения? А вообще, мне кажется, лучше делать через UDF
Код
Function MM(Metro As String) As String
Dim L As Long
L = Len(Metro)
If L = 0 Or L > 33 Then Exit Function
Select Case L
    Case 4 To 5: MM = "Интернет - метро " & Metro & ". Подключи!"
    Case 6 To 8: MM = "Интернет - м. " & Metro & ". Подключи!"
    Case 9 To 19: MM = "Интернет - м. " & Metro
    Case 20: MM = "Интернет - м " & Metro
    Case Else: MM = Metro
End Select
End Function



Изменено: МВТ - 02.04.2015 09:14:16 (Подправил кириллицу)
 
Спасибо большое за помощь!
А вариант сделать это формулами имеется?
 
Skarfex,наверное, можно, но будет довольно громоздко. А такой способ чем Вас не устраивает? Включить макросы в центре управления безопасностью не сложно
 
Дело в том, что данная задача - ежедневная рутина контекстного менеджера. И решение данной задачи посредством формул, поможет оптимизировать работу.
Можно будет быстро менять дополнения под разные задачи прямо в таблице и получать необходимые заголовки.
Неужели нет формулы, аналога формулы ЕСЛИ, под большое количество условий. Чтобы эксель сверял искомое значение с диапазоном значений на совпадение условий (даже поочередно, сверху вниз скажем) и найдя истину, выполнял сцепку из этой строки всех элементов?
Страницы: 1
Наверх