Новости:

Новая редакция правил форума: 2.4. Если вопрос или ответ содержится во вложенном файле, все-равно кратко описывайте в сообщении вопрос или суть решения. Это необходимо, чтобы тему можно было найти через поиск.

Главное меню

Преобразовать строку с формулой в число

Автор GWolf, 04.06.2019, 07:56

« назад - далее »

GWolf

Добрый день, коллеги!

Есть строка вида: dlin="=99+Ч("Т")+113+Ч("А")+100+Ч("Р")+113+Ч("А")+44+Ч(" ")+91+Ч("6")+90+Ч("9")+91+Ч("8")"
если записываю ее в ячейку: Range("txtDl").FormulaLocal = dlin
то ячейка возвращает результат: 741.

А вот как этот результат получит в коде, без записи в ячейку?

Всем кто откликнется - спасибо!!!
Путей к вершине - множество. Этот один из многих!

boa

#1
Здравствуйте,
dlin = "=99+N(""Т"")+113+N(""А"")+100+N(""Р"")+113+N(""А"")+44+N("" "")+91+N(""6"")+90+N(""9"")+91+N(""8"")"
Debug.Print Evaluate(dlin)
' или
msgbox Evaluate(dlin)
Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

GWolf

Огромное спасибо, уважаемый boa!

Не зря говорят: Учи матчасть!
Я попробовал решить вот так:
arrNbr = Split(lngStr, "+", , vbTextCompare)
   
            lngS = 0
   
            j = 0
            For j = LBound(arrNbr) To UBound(arrNbr)
                If IsNumeric(arrNbr(j)) = True Then
                    lngS = lngS + arrNbr(j)
                End If
            Next j
            Erase arrNbr

тоже работает, но у вас крсивее!! Да и правильнее!
Путей к вершине - множество. Этот один из многих!

vikttur

Да, учить матчасть полезно :)
Ч("текст") = 0
Зачем в формуле эти фрагменты?
Sub SuperFormula()
    MsgBox 99 + 113 + 100 + 113 + 44 + 91 + 90 + 91
End Sub

Еще проще  MsgBox 741 :)

GWolf

Цитата: vikttur от 04.06.2019, 09:00
Ч("текст") = 0
Зачем в формуле эти фрагменты?
они нужны для информирования пользователя о составе полученной строки информации. Под Ч("текст") объясняется для какой литеры какое значение размера литерной площадки было взято. Это важно.

Но, вот засада: для конструкции lngS = Evaluate(lngStr) выдает ошибку Error 2029  :'(
Путей к вершине - множество. Этот один из многих!

vikttur

Цитироватьдля информирования пользователя
Но ведь макрос не покажет этой информации! MsgBox покажет результат.

Цитироватьдля конструкции...выдает ошибку
Что Вы хотите получить в итоге?

GWolf

Цитата: vikttur от 04.06.2019, 09:37
Цитироватьдля информирования пользователя
Но ведь макрос не покажет этой информации! MsgBox покажет результат.

Сценарий таков:
Есть несколько строк текста, вводимых в именованный интервал ячеек.
Для каждой строки текста определяем длину по литерным площадкам. Эта информация и содержится в переменной dlin.
Затем нужно вычислить длину dlin = lngS.
Значения dlin и lngS заносим в двумерный массив.
Дальше анализируем массив на наидлиннейшую строку ...

Так вот lngS и не высчитывается. Хотя я ее считаю циклом, выше уже показывал. Но, хотелось бы красиво  ;)
Путей к вершине - множество. Этот один из многих!

vikttur

Не первый день на форумах... Надо показать пример в файле.
И тема уже поменялась.

GWolf

Цитата: vikttur от 04.06.2019, 09:55
Не первый день на форумах... Надо показать пример в файле.
И тема уже поменялась.

Еще раз перечел ... Где я про дни на форуме говорил  :-\

Тема прежней остается: есть строка: "=99+Ч("Т")+113+Ч("А")+100+Ч("Р")+113+Ч("А")+44+Ч(" ")+91+Ч("6")+90+Ч("9")+91+Ч("8")", ее нужно "посчитать".
Предложенный вариант:
lngStr = "=99+Ч("Т")+113+Ч("А")+100+Ч("Р")+113+Ч("А")+44+Ч(" ")+91+Ч("6")+90+Ч("9")+91+Ч("8")"
lngS = Evaluate(lngStr)
выдает ошибку.
Путей к вершине - множество. Этот один из многих!

boa

Цитата: GWolf от 04.06.2019, 09:20
выдает ошибку Error 2029  :'(
а не надо использовать русские функции в VBA.
Я же написал вам строку
Цитата: boa от 04.06.2019, 08:28
dlin = "=99+N(""Т"")+113+N(""А"")+100+N(""Р"")+113+N(""А"")+44+N("" "")+91+N(""6"")+90+N(""9"")+91+N(""8"")"
Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

vikttur

 Предложенный вариант работает без ошибок. А Вы двойные кавычки заменили на одинарные.

О днях на форуме. И помощь получите быстрее, и у помогающих меньше времени отнимете, если не будете лениться и пркреплять пример.

GWolf

Цитата: boa от 04.06.2019, 10:22
а не надо использовать русские функции в VBA.
Спасибо, boa!
Второй раз наступаю на эти грабли!

И уважаемому vikttur всего наилучшего! Тема исследована полностью!
Путей к вершине - множество. Этот один из многих!