2013-08-31 1 views
0

Как преобразовать числа, сохраненные как текст в числа?Преобразование чисел, хранящихся в виде текста в числа?

Я попытался настройки:

ActiveSheet.Range("H154").NumberFormat = "General" 

Но это не работает!

Единственное, что я обнаружил, что работа использует «Текст для столбцов» или щелчок по ячейке для его редактирования, а затем нажмите «Ввод».

Но я бы очень хотел найти способ превратить числовые ячейки в листе, хранящемся как текст в числа, используя VBA.

+1

Что * точно * действительно содержит ячейку? (** Точно **, а не «нечто подобное»). Без какой-либо информации очень сложно дать вам конкретный ответ. Применение «общего» формата не будет работать, если у вас есть данные или форматирование, которые его предотвращают, но мы не можем сказать, не показываете ли вы данные. –

ответ

3

Общий метод заключается в Copy PasteSpecial, Умножить на 1

В коде, что-то вроде этого:

Sub ConvertToNumber() 
    Dim rng As Range 
    Dim cl As Range 
    Dim rConst As Range 

    ' pick an unused cell 
    Set rConst = Cells(1, 4) 
    rConst = 1 

    Set rng = Cells.SpecialCells(xlCellTypeConstants) 
    rng.NumberFormat = "General" 
    rConst.Copy 
    rng.PasteSpecial xlPasteValues, xlPasteSpecialOperationMultiply 

    rConst.Clear 
End Sub 
0

Просто использовать CDbl():

ActiveSheet.Range("H154") = CDbl(ActiveSheet.Range("H154")) 
+1

@ sjas: Действительно не вижу, что ваш вход принес в поток. – ProtoVB

2

Я не эксперт по кодированию и ошибка «Number Stored in Text» долгое время меня мучила.

Я наконец нашел это: Delimited Text-to-Columns in a Macro

Что заставило меня это:

Sub ConvertTextToNumber() 
     Sheets("Worksheet_Name").Select 
     Range("A1").Select 
     Selection.TextToColumns _ 
      Destination:=Range("A:A"), _ 
      DataType:=xlDelimited 
    End Sub 

Я использую это в макрос для копирования & изменения порядка столбцов в новом листе:

Sub ColumnReorder() 
    '********************************************************** 
    'Paste this macro into the Workbook of each new "Employee_List_Weekly_Update" 
    'Functionality: 
    '1. Column order in the "Employee_List_Weekly_Update" worksheet changes fairly often. 
    ' The macro will find each column by header name, 
    ' select that column and copy it to the new sheet. 
    '2. The macro also converts "Employee ID#" to a number, 
    ' removing the "Number saved as Text" error. 
    '********************************************************** 
    'Create new sheet 
     Sheets.Add.Name = "Roster_Columns_Reordered" 

    'Repeat for each column or range 
    'Find Column in "Employee_List_Weekly_Update" - Copy it - Paste it in "Roster_Columns_Reordered" - Employee ID# 
     Dim a As Integer 
     Sheets("Employee_List_Weekly_Update").Select 
     Set rngData = Range("A1").CurrentRegion 
     a = Application.WorksheetFunction.Match("Employee ID#", Range("A1:BB1"), 0) 
     Columns(a).Select 
     Selection.Copy 

     Sheets("Roster_Columns_Reordered").Select 
     Range("A1").Select 
     ActiveSheet.Paste 
    'Use TextToColumns to convert "Number Stored as Text " 
     Selection.TextToColumns _ 
      Destination:=Range("A:A"), _ 
      DataType:=xlDelimited 

    'Find Column in "Employee_List_Weekly_Update" - Copy it - Paste it in "Roster_Columns_Reordered" - Name 
     Dim b As Integer 
     Sheets("Employee_List_Weekly_Update").Select 
     Set rngData = Range("A1").CurrentRegion 
     b = Application.WorksheetFunction.Match("Name", Range("A1:BB1"), 0) 
     Columns(b).Select 
     Selection.Copy 

     Sheets("Roster_Columns_Reordered").Select 
     Range("B1").Select 
     ActiveSheet.Paste 

    'Go to "Roster_Columns_Reordered" - Add AutoFilter - Freeze Top Row 
     Rows("1:1").Select 
     Selection.AutoFilter 
     With ActiveWindow 
      .SplitColumn = 2 
      .SplitRow = 1 
     End With 
     Rows("2:2").Select 
     ActiveWindow.FreezePanes = True 
     Range("A1").Select 

    End Sub 
0

, если вы хотите преобразовать выделение (даже с текстом в него!), Вы можете использовать код firefiend (http://www.ozgrid.com/forum/showthread.php?t=64027&p=331498#post331498)

Я думаю, что магия в .Value = .Value

vba Sub macro() Range("F:F").Select 'specify the range which suits your purpose With Selection Selection.NumberFormat = "General" .Value = .Value End With End Sub

Смежные вопросы