Страницы: 1
RSS
Подсчет аргументов в формуле
 
Доброго времени суток. В работе столкнулся с необходимостью подсчета количества аргументов в простой формуле. Подскажите пожалуйста, каким образом можно рассчитать сумму количества аргументов, если таблица вмещает в себя несколько столбцов с простыми формулами сумм аргументов. (Приложение). Или подсчет в таком случае возможен только в ручную? ;(
Изменено: GreyOLDsmile - 24.04.2018 11:29:42
_=**Путь осилит идущий**=_
 
Тим, это, что ли?
Код
=ЧИСЛСТОЛБ(A2:C2)
 
Казанский, нет не это. Если посмотрите файл, то увидите, что в каждой ячейке стоит простая формула " =1+11+111+11111". Интересует в частности каким образом можно посчитать количество аргументов в ячейке. Т.е. в данной формуле  " =1+11+111+11111"  - количество аргументов равно - 4. А надо как-то формулой это рассчитать. Может вопрос и простой. Но что-то найти ответа я не могу =(
_=**Путь осилит идущий**=_
 
=СЧЕТЕСЛИ(A2:D2000)*10^СЧЕТЗ(A5:A250)
Сколько здесь аргументов?

В простой формуле суммирования достаточно посчитать знаки суммирования:
=ДЛСТР(A2)-ДЛСТР(ПОДСТАВИТЬ(A2;"+";))+1
 
vikttur, а попроще можно?  Если посмотрите файл, то увидите, что в каждой ячейке стоит простая формула " =1+11+111+11111". Интересует в частности каким образом можно посчитать количество аргументов в ячейке. Т.е. в данной формуле  " =1+11+111+11111"  - количество аргументов равно - 4. А надо как-то формулой это рассчитать. Может вопрос и простой. Но что-то найти ответа я не могу =(
_=**Путь осилит идущий**=_
 
Если просто суммирование, то
=ДЛСТР(Ф.ТЕКСТ(A2))-ДЛСТР(ПОДСТАВИТЬ(Ф.ТЕКСТ(A2);"+";""))+1
Если Интересны ещё какие-то операторы, то нужно наращивать условия в Подставить
Я не волшебник, я только учусь.
 
vikttur, Длстр(а2) считает не исходную строку,а уже получившийся результат. Поэтому эта формула работает некорректно.
Если автоматизировать бардак, то получится автоматизированный бардак.
 
Wiss, Логику я понял, но не работает почему то =((((

и если чуть сложнее, две ячейки:
в одной ячейке к примеру: "=1+111+1111+1";
во второй ячейке "=сумм(1;111;1111;1111111;1)" .
Каким образом можно посчитать количество значений в двух ячейках?

Заранее благодарен за помощь
_=**Путь осилит идущий**=_
 
Цитата
GreyOLDsmile написал:
не работает почему то
Ф.ТЕКСТ работает только в Excel версии 2013 и выше
Изменено: ProFessor - 24.04.2018 11:58:13
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
ProFessor, спасибо. ну а что делать владельцам Excel версии 2010. =(((((
_=**Путь осилит идущий**=_
 
Версия Excel 2010.
Сейчас очень Важен ответ на такой вопрос:
Как посчитать формулой количество значений в простой формуле " =1+11+111+11111" в ячейке.
Т.е. результатом должно быть, что в данной формуле  " =1+11+111+11111"  - количество значений равно = 4.    
_=**Путь осилит идущий**=_
 
Цитата
GreyOLDsmile написал:
а что делать владельцам Excel версии 2010
Учить VBA
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
вариант с доп таблицей и макрофункцией или как сказал
Цитата
ProFessor написал:
Учить VBA
Лень двигатель прогресса, доказано!!!
 
Код
i = 0
x = ThisWorkbook.Sheets(1).[A1].Formula
Do While InStr(x, "+") <> 0
        n = InStr(x, "+")
        x = Right(x, Len(x) - n)
i = i + 1
Loop
MsgBox (i + 1)


Это просто скелет, он выведет кол-во значений в формуле (её тексте) суммирования в ячейке А1
Можно адаптировать под любую формулу и любые знаки.
Изменено: ProFessor - 24.04.2018 12:18:38
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
Если только с плюсами то можно попробовать вот такую простенькую функцию
Код
Public Function счётПлюсов(ByVal ячейка As Range) As Long

Dim strX As String
    strX = ячейка.Formula    
    счётПлюсов = Len(strX) - Len(Replace(strX, "+", ""))
End Function
Я не волшебник, я только учусь.
 
ProFessor,ИМХО, при отсутствии аргументов (пустая ячейка) ваш код вернет 1, а это неправильно.
Если автоматизировать бардак, то получится автоматизированный бардак.
 
Wiss,а если там ни одного "+", но число есть, то ваша формула вернет 0. А это неправильно.
Если автоматизировать бардак, то получится автоматизированный бардак.
 
Цитата
wowick написал:
при отсутствии аргументов (пустая ячейка) ваш код вернет 1
Мы здесь не кривые руки обрабатываем, а решаем конкретные задачи с конкретными условиями.
Для того, чтобы wowick, не ворчал
Код
If Left(ThisWorkbook.Sheets(1).[A1].Formula, 1) <> "=" Then
    Exit Sub
Else
        i = 0
        x = ThisWorkbook.Sheets(1).[A1].Formula
        Do While InStr(x, "+") <> 0
                n = InStr(x, "+")
                x = Right(x, Len(x) - n)
        i = i + 1
        Loop
        MsgBox (i + 1)
End If
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
ProFessor, Сергей, Wiss, огромное спасибо. А не могли бы подсказать чайнику, где можно поучиться этому? Пожалуйста. Как говориться, чтоб просто и со вкусом. Просто в школе и в институте учил другие языки программирования. Заранее благодарен.
_=**Путь осилит идущий**=_
 
Цитата
GreyOLDsmile написал:
Просто в школе и в институте учил другие языки программирования
Тогда проблем с VBA не должно быть. Он довольно простой.  
Я не люблю книги по 500-600 страниц (хотя не исключаю того, что они кому-то помогают), делаю всегда так:
1) Изучаю базовые объекты языка (переменные, функции, типы данных, функции, классы, и.т.д.)
2) Логические схемы языка (Циклы, условия, перечисления, сортировки)
3) Делаю базовые задачи, типа "Hello World!", "Калькулятор", "Маленькая БД с массивами данных" и.т.д.
В процессе этого получаю сразу прикладные знания в нужном мне русле, все непонятные моменты ищу в интернете.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
Цитата
wowick написал:  vikttur , Длстр(а2) считает не исходную строку
Увлекся  :)
 
GreyOLDsmile, если в качестве аргументов всегда целые положительные числа, то можно считать по ним. В этом случае разделитель будет не важен.
Страницы: 1
Наверх