Конвертировать строку в long в макросе Excel - PullRequest
3 голосов
/ 03 октября 2011

Как мне преобразовать строку в long в макросе excel. CLng выдает ошибку несоответствия типов

Dim wStr As String
Dim w As Long

wStr = "=RAND() * 0.3 + 0.35"
w = CLng(wStr)

Ответы [ 2 ]

4 голосов
/ 03 октября 2011

Основной причиной вашей ошибки является то, что CDbl ожидает числовое значение или строку, которая выглядит как число. Сама строка "=RAND() * 0.3 + 0.35" не выглядит как число, даже если она оценивает как число.

Чего вы на самом деле пытаетесь достичь здесь?

Если для получения длинного целого результата по формуле = RAND () * 0,3 + 0,35, используйте

Dim w as Long
w = Rnd() * 0.3 + 0.35

Если для эмуляции формулы ячейки используется

Dim w as Long
w = Application.Evaluate("=RAND() * 0.3 + 0.35")

Что касается самой формулы, то почему эта конструкция? Он вернет Single в диапазоне [0.35, 0.65), который при округлении до Long вернет 0 или 1 с вероятностью 50% каждого.
Почему бы не использовать

w = Rnd()

или

w = Application.Evaluate("=RAND()")

или

w = Application.WorksheetFunction.RandBetween(0, 1)

или есть какая-то другая причина, по которой я скучал?

4 голосов
/ 03 октября 2011

Попробуйте формулу для w ниже.

w = CLng(Evaluate(wStr))

Или забудьте о попытке использовать "формулу Excel" и сразу переходите к VBA со своим случайным аналогом функции

w = CLng(Rnd() * 0.3 + 0.35)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...