Добрый день Почему число из ячейки "А2"=1111111111111110 в переменной
Код
Up_16_Symbol = Cells(2, 1)
преобразовывается в экспоненциональный формат? [img]file:///D:/%D0%9F%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA/Helper%20Planeta%20Excel[/img] Как я понял это происходит когда в числе цифр больше 15. Как этого избежать что бы число в переменной Up_16_Symbol не преобразовывалось в экспоненциальный формат?
Число в ячейке Excel всегда хранится в формате double (как и в переменной VBA после присвоения). Excel в отладчике показывает значение переменной в экспоненциальной форме (считая в даном случае такой вид оптимальным для пользователя). Если Вы в ячейке выберете числовой формат с 0 знаков после запятой, то увидите значение ячейки в "обычной" форме.
sokol92 написал: Если Вы в ячейке выберете числовой формат с 0 знаков после запятой, то увидите значение ячейки в "обычной" форме
меня интересует значение переменной которая создается в коде VBA. Изменение формата ячейки не помогло для получения значения переменной в "обычной" форме. Совет Hugo, помог, но его применить не могу если я создаю массив и сталкиваюсь при это с проблемой экспоненциального формата
Borrusale, а вы уверены, что у вас число, а не текст в виде набора цифр? Для чего у вас такие длинные числа - в расчетах они ни где не используются, только как идентификационные номера. Присваивайте данному номеру соответствующую переменную - as String.
Borrusale, откройте файл, посортируйте по колонке А, посортируйте по колонке В, повторите (на всякий случай) текст - это не числа! хоть и визуальной разницы нет но для компьютера это разные типы данных! по-разному хранятся в памяти, занимают разное количество памяти и сравниваются по-разному когда вы поймете, что тест - это не число, все станет на свои места, а не поймете... так и будете недоумевать что за чертовщина происходит
Ігор Гончаренко написал: когда вы поймете, что тест - это не число
я понимаю в чем разница. С этой проблемой сталкиваюсь каждый день.
Вообщем не получается у меня объяснить эту ошибку по простому.
Во вложении макрос в котором ошибка связанная как мне кажется с "экспоненциальным форматом" Посмотрите пожалуйста почему я не могу получить нужный мне ответ
Цель макроса: Найти в массиве все 18-ти значные числа и что бы они в массиве на выходе не повторялись
Borrusale написал: Найти в массиве все 18-ти значные числа
В Excel не бывает 18 значных чисел. Число в Excel может содержать только 15 цифр, включая цифры дробной части. Введите 18- значное число как текст, чтобы лишние цифры не превратились в нули на этапе ввода, запустите код, и поглядите, что будет с вашим 18- значным числом
Код
Sub qq()
x = Val(Selection.Text)
a = Format(x, "#")
End Sub
Borrusale написал: Найти в массиве все 18-ти значные числа
значит не понимаете... попробуйте так
костыльно, неоптимально ибо влом
Код
Public n%
Public p$
Sub gg()
Columns(10).ClearContents
n = 18
p = "\d{" & n & "}"
Dim coll As New Collection
On Error Resume Next
For Each cell In [A1:F10]
s = cell
If Len(s) >= n Then s = Format(s, String(n, "0"))
For Each i In g(s)
coll.Add i, CStr(i)
Next
Next
For Each c In coll
j = j + 1
Cells(j, 10) = c
Next
End Sub
Function g(t)
With CreateObject("VBScript.Regexp")
.Pattern = p
.Global = True
Set g = .Execute(t)
End With
End Function
а что же вы с таким завидным упорством пытаетесь заставить макрос
Цитата
Borrusale написал: Найти в массиве все 18-ти значные числа
если должны понимать что нет таких у Excel строка содержащая 18 цифр есть, а числа содержащего 18-цифр - нету! не отведено под мантису числа столько памяти! там некуда складывать 18 цифр. читайте матчасть
Цитата
Ігор Гончаренко написал: когда вы поймете, что тест - это не число, все станет на свои места, а не поймете... так и будете недоумевать что за чертовщина происходит
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!