Страницы: 1
RSS
Произведение a x b x c ...
 
Всем добрый вечер!  
Когда-то обращался с похожей темой, но сейчас вопрос стоит несколько иначе.  
В ячейке забито к примеру: 5х5х5.Необходимо получить результат 125.  
То, что наваял, работает для однозначных цифр.А если 10х5х125, приходится менять параметры в формуле для каждого нового случая.Ну а если добавляются множители приходится и саму формулу дописывать.  
Может существует вариант попроще? Чертовы "Х", а без них нельзя.  
Заранее сасибо
 
=ЗНАЧЕН(ЛЕВСИМВ(C4;НАЙТИ("x";C4;1)-1))*ЗНАЧЕН(ПСТР(C4;НАЙТИ("x";C4;1)+1;НАЙТИ("x";C4;НАЙТИ("x";C4;1)+1)-НАЙТИ("x";C4;1)-1))*ЗНАЧЕН(ПРАВСИМВ(C4;ДЛСТР(C4)-НАЙТИ("x";C4;НАЙТИ("x";C4;1)+1)))  
 
такой вот монстр. См. пример.  
Сейчас наши маэстро формул утопчут ее до более-менее размеров... :О)
Кому решение нужно - тот пример и рисует.
 
Да вобщем то, гораздо проще это решать через макрофункцию ВЫЧИСЛИТЬ()  
В желтой ячейке результат, а в диспетчере имен - формула.
 
UDF
 
Function rezult(Txt As String)  
Txt = Replace(Txt, "х", "*")  
Txt = Replace(Txt, "x", "*")  
rezult = Evaluate(Txt)  
End Function
 
Универсальнее так:  
 
Function rezult(Txt As String)  
Txt = Replace(UCase(Txt), "X", "*")  
Txt = Replace(UCase(Txt), "Х", "*")  
rezult = Evaluate(Txt)  
End Function  
 
/,+,- заменять не надо.
 
Воистину монстр!  
А если добавить еще один множитель?( с тремя работает, а добаляю четвертый получаю ЗНАЧ )  
Чует мое сердце, что без макросов тут не обойдется.
 
таки да, с макросами гораздо проще - см.выше  - люди уже все написали.
Кому решение нужно - тот пример и рисует.
 
{quote}{login=Hugo}{date=28.09.2010 10:12}{thema=}{post}Универсальнее так:  
 
Function rezult(Txt As String)  
Txt = Replace(UCase(Txt), "X", "*")  
Txt = Replace(UCase(Txt), "Х", "*")  
rezult = Evaluate(Txt)  
End Function  
 
/,+,- заменять не надо.{/post}{/quote}  
только я бы для ясности неискушенных юзеров добавил, что в первой строке замены Х - это латинский "икс", а во второй строке - русский "ха" (ну, или наоборот)
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Пока писал ответ Пытливому столько  
появилось решений.  
А можно взять таймаут до завтрешнего вечера.  
Комп забирают, супостаты!!!!!!  
А за помощь спасибо!!!!!
 
ЮДФ:  
Public Function MyEval(s As String, delim As String) As Double  
   Dim a, i&  
   MyEval = 1  
   a = Split(s, delim)  
   For i = LBound(a) To UBound(a)  
       MyEval = MyEval * a(i)  
   Next  
End Function
Я сам - дурнее всякого примера! ...
 
А вот еще монстрик (если макросы не разрешают включать):  
=ПРОИЗВЕД(--СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(C4;"x";ПОВТОР(" ";ДЛСТР(C4)));ДЛСТР(C4)*(СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(C4)-ДЛСТР(ПОДСТАВИТЬ(C4;"x";""))+1))-1)+1;ДЛСТР(C4))))  
Количество множителей и их величина почти не ограничены.  
P.S. Формула массива, однако...
 
{quote}{login=kim}{date=29.09.2010 03:06}{thema=}{post}А вот еще монстрик {/post}{/quote}  
И он ещё нам про грибы рассказывает... От такого и слышу.
 
{quote}{login=KuklP}{date=29.09.2010 02:47}{thema=}{post}ЮДФ:  
Public Function MyEval(s As String, delim As String) As Double  
   Dim a, i&  
   MyEval = 1  
   a = Split(s, delim)  
   For i = LBound(a) To UBound(a)  
       MyEval = MyEval * a(i)  
   Next  
End Function{/post}{/quote}  
Серёж, ИМХО, ЮДФ-ка Игоря намного проще, да и поуниверсальнее будет, ведь там не только умножение будет работать...
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Согласен.
Я сам - дурнее всякого примера! ...
Страницы: 1
Читают тему
Наверх