Профессиональные приемы работы в Microsoft Excel

Пожалуйста, войдите или зарегистрируйтесь.


Расширенный поиск  

Новости:

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

Автор Тема: Преобразовать строку с формулой в число  (Прочитано 1997 раз)

0 Пользователей и 1 Гость просматривают эту тему.

GWolf

  • Старожил
  • ****
  • Уважение: +50/-0
  • Оффлайн Оффлайн
  • Сообщений: 961

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

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

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

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

boa

  • Глобальный модератор
  • Старожил
  • *****
  • Уважение: +32/-0
  • Оффлайн Оффлайн
  • Сообщений: 597
  • Доброта спасет мир...

Здравствуйте,
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)
« Последнее редактирование: 04.06.2019, 08:39:45 от boa »
Записан
Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

GWolf

  • Старожил
  • ****
  • Уважение: +50/-0
  • Оффлайн Оффлайн
  • Сообщений: 961

Огромное спасибо, уважаемый 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

  • Глобальный модератор
  • Ветеран
  • *****
  • Уважение: +50/-0
  • Оффлайн Оффлайн
  • Сообщений: 1 016

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

GWolf

  • Старожил
  • ****
  • Уважение: +50/-0
  • Оффлайн Оффлайн
  • Сообщений: 961

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

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

vikttur

  • Глобальный модератор
  • Ветеран
  • *****
  • Уважение: +50/-0
  • Оффлайн Оффлайн
  • Сообщений: 1 016

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

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

GWolf

  • Старожил
  • ****
  • Уважение: +50/-0
  • Оффлайн Оффлайн
  • Сообщений: 961

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

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

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

vikttur

  • Глобальный модератор
  • Ветеран
  • *****
  • Уважение: +50/-0
  • Оффлайн Оффлайн
  • Сообщений: 1 016

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

GWolf

  • Старожил
  • ****
  • Уважение: +50/-0
  • Оффлайн Оффлайн
  • Сообщений: 961

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

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

Тема прежней остается: есть строка: "=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

  • Глобальный модератор
  • Старожил
  • *****
  • Уважение: +32/-0
  • Оффлайн Оффлайн
  • Сообщений: 597
  • Доброта спасет мир...

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

vikttur

  • Глобальный модератор
  • Ветеран
  • *****
  • Уважение: +50/-0
  • Оффлайн Оффлайн
  • Сообщений: 1 016

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

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

GWolf

  • Старожил
  • ****
  • Уважение: +50/-0
  • Оффлайн Оффлайн
  • Сообщений: 961

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

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



Темы без ответов

27.05.2022 14:38 конструкция из Shape на VBA на листе Excel 463
09.08.2019 14:09 Макрос для заполнения таблиц через форму 5295
18.07.2019 16:02 Рассылка почты из Excel при помощи почтовой программы TheBAT! 4653
07.02.2019 01:36 Как удалить дубликаты из выпадающего связанного списка? 6258
03.03.2018 00:00 Подсчет отработанного времени, за исключением заранее определенных перерывов 3346
23.05.2017 11:20 Копирование данных из одной таблицы в умную таблицу по условию 5172
15.03.2017 15:45 автозамена картинок PowerPoint 4073
11.03.2017 13:43 Изменить нумерацию страниц 4013
07.02.2017 18:43 Блокировка ячеек по наступлению даты 3135
28.08.2016 19:29 Одинаковые заголовки после обновления оглавления 3633





Яндекс цитирования msexcel.ru Яндекс.Метрика

Страница сгенерирована за 0.13 секунд. Запросов: 106.