Страницы: 1
RSS
Потеря знаков при приобразовании текста в число
 
Доброго всем дня!
При экспорте данных в Excel источник выдает одну из колонок в которой содержатся только числа (кроме заголовка) в текстовом формате.
Пример: 121000011507605455
При попытке преобразовать в число результат получается такой: 121000011507605000
Последние три знака превращаются в нули! Почему так происходит и как с этим бороться?
 
А в чем смысл преобразования? т.е. чем не устраивает текст?
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, в процессе обработки макросом колонка копируется на другой лист и сразу же теряются эти три знака. Т.е. с ней нельзя ничего сделать. Смотреть можно, трогать нельзя.
 
Цитата
IvanMantrov написал:
Почему так происходит
https://www.google.com/search?q=ieee+754+site%3Aplanetaexcel.ru
 
Скорее это Технические характеристики и ограничения вычислений, первый пункт
Согласие есть продукт при полном непротивлении сторон
 
А что мешает копировать как текст?
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
IvanMantrov написал:
в процессе обработки макросом колонка копируется на другой лист и сразу же теряются эти три знака
Смотря как копировать. Вот так текст не преобразуется в число
Код
range("A1:A10").Copy range("B1")
Если нужно копировать через присваивание значения, сначала нужно назначить текстовый формат
Код
range("B:B").NumberFormat ="@"
range("B1:B10").value =range("A1:A10").value
 
Казанский,Спасибо! Второй вариант подходит!
 
А я так порезвился.  :)
Код
Sub ReplaceNumToText()
    Dim objVBProj As Object, objVBComp As Object, objCodeMod As Object
    Dim sModuleName As String, sFullName As String
    Dim sProcLines As String
    Dim lLineNum As Long
    Dim sAdr$
    sAdr = Selection.Address(0, 0)
    sProcLines = "Sub Test()" & vbCrLf & _
                 "[" & sAdr & "] = [" & Chr(34) & Chr(39) & Chr(34) & "&" & sAdr & "]" & _
                 vbCrLf & "End Sub"
    'добавляем новый стандартный модуль в активную книгу
    Set objVBComp = ActiveWorkbook.VBProject.VBComponents.Add(1)
    'получаем ссылку на коды модуля
    Set objCodeMod = objVBComp.CodeModule
    'узнаем количество строк в модуле
    '(т.к. VBA в зависимости от настроек может добавлять строки деклараций)
    lLineNum = objCodeMod.CountOfLines + 1
    'вставляем текст процедуры в тело нового модуля
    objCodeMod.InsertLines lLineNum, sProcLines
    Application.Run objVBComp.Name & ".Test"
    objVBComp.Collection.Remove objVBComp

End Sub
Страницы: 1
Наверх