Страницы: 1
RSS
Преобразовать текстовый формат в числовой и наоборот
 
Здравствуйте!
При выгрузке информации из БД в Excel, у меня некоторые числовые данные выгружаются в текстовом формате, мне необходимо перевести в числовой. Вручную, выделив диапазон, а потом преобразовать в число VBA это действие макрорекодером не прописывает. Я нашел в интернете макрос, который производит данное действие. Но мне необходимо, чтобы макрос менял текст на число только в столбце A. Что нужно в коде поправить? Я если честно не могу понять, как он работает.
Код
Sub Repair_Value()   ' в выделенных ячейках исправить экспортированные как текст данные чтобы нормально опознались числа
    Dim rArea As Range
    On Error Resume Next
    ActiveWindow.RangeSelection.SpecialCells(xlCellTypeConstants).Select
    If Err Then Exit Sub
    With Application: .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual: End With
    For Each rArea In Selection.Areas
    rArea.FormulaLocal = rArea.FormulaLocal
    Next rArea
    With Application: .ScreenUpdating = True: .EnableEvents = True: .Calculation = xlAutomatic: End With
End Sub
Спасибо.
 
Цитата
stevie4 пишет: в выделенных ячейках исправить экспортированные как текст данные чтобы нормально опознались числа
В комментарии ясно указано, что макрос с выделенным диапазоном работает. Выделили столбец А, запустили макрос.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, я ступил. Спасибо большое :)
 
Цитата
stevie4 пишет: Вручную, выделив диапазон, а потом преобразовать в число VBA
Код
Sub kaz_111()
Dim cl As Range
For Each cl In Selection
If Not IsEmpty(cl) Then
cl = --cl
End If
Next
End Sub
как-то так я обычно делаю: выделяю диапазон ручками и прогоняю этот код... имхо
(авторские права не присваиваю - код вроде от Казанского... или по мотивам его строк)

p.s. а ваша фраза rArea.FormulaLocal = rArea.FormulaLocal 'честно говоря для меня загадка...
Изменено: JeyCi - 22.07.2014 10:58:31
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi пишет:
а ваша фраза rArea.FormulaLocal = rArea.FormulaLocal 'честно говоря для меня загадка...
Это позволяет преобразовать текст в число не поячеечно, а диапазону сразу(в коде выше это области). Будет гораздо быстрее, чем прогонять каждую ячейку.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Запишите рекордером оперецию "текст по столбцам" этому столбцу - будет небольшой понятный макрос.
Который можо ещё сократить до

Код
Columns("A:A").TextToColumns 
Изменено: Hugo - 22.07.2014 13:51:21
 
Возможно, Ваше ПО в "конфликте" с настройками EXCEL - использовать системные разделители (Язык и Региональные стандарты (Настройка региональных параметров (Числа))).
Полагаю, в ПО нет возможности изменить настройку системных разделителей.
Если экспорт из ПО в EXCEL - регламентная работа, имеет смысл попробовать изменить региональные настройки перед экспортом информации из ПО в EXCEL.
Возможно, эксперимент будет положительным.
 
Подскажите, а как преобразовать число в текст?
Нужен массив с этим результатом.

Спасибо
Изменено: MonsterBeer - 09.06.2016 11:27:30
Когда я ем,я глух и нем, хитер и быстр, и дьявольски умен.
 
Варианты выше в теме чем не устраивают?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, нужны числа сохраненные как текст...
Когда я ем,я глух и нем, хитер и быстр, и дьявольски умен.
 
а-а-а...что-то упустил. В общем случае как-то так:
Код
Sub ToText()
    Dim rr As Range, rc As Range, v
    On Error Resume Next
    Set rr = Selection.SpecialCells(xlCellTypeConstants)
    If rr Is Nothing Then
        MsgBox "В выделенных ячеек нет ячеек для преобразования", vbInformation, "www.excel-vba.ru"
        Exit Sub
    End If
    On Error GoTo 0
    Application.ScreenUpdating = 0
    For Each rc In rr.Cells
        v = rc.Value
        If IsNumeric(v) Then
            rc.Formula = "'" & rc.Formula
        End If
    Next
    Application.ScreenUpdating = 1
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо!
Когда я ем,я глух и нем, хитер и быстр, и дьявольски умен.
 
Подскажите, а если у меня есть макрос, выделяющий определенные столбцы, в которым нужно преобразовать текст в число, то как их объединить с вашим примером? Как я понял, нужно делать в два шага, а можно одним?
Код
Range("B3:C20000,E3:E20000,G3:G20000,I3:J20000,L3:L20000").Select
 
Вопрос не по теме
Страницы: 1
Читают тему
Наверх