VBA: преобразование текста в число

у меня есть столбцы чисел, которые по какой-либо причине форматируются как текст. Это не позволяет мне использовать арифметические функции, такие как функция промежуточного итога. Каков наилучший способ преобразования этих "текстовых чисел" в истинные числа?

вот скриншот конкретной проблемы: Error

Я пробовал эти фрагменты безрезультатно:

Columns(5).NumberFormat = "0"

и

 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

5 ответов


используйте функцию ниже (изменение [E:E] соответствующий диапазон для ваших нужд), чтобы обойти эту проблему:

[E:E].Select
With Selection
    .NumberFormat = "General"
    .Value = .Value
End With

P.S. По моему опыту, это решение VBA работает значительно быстрее на больших наборах данных и с меньшей вероятностью приведет к сбою Excel, чем с помощью метода "окно предупреждения".


Это можно использовать для поиска всех числовых значений (даже отформатированных как текст) в листе и преобразования их в single (функция CSng).

For Each r In Sheets("Sheet1").UsedRange.SpecialCells(xlCellTypeConstants)
    If IsNumeric(r) Then
       r.Value = CSng(r.Value)
       r.NumberFormat = "0.00"
    End If
Next

У меня была эта проблема раньше, и это было мое решение.

With Worksheets("Sheet1").Columns(5)
    .NumberFormat = "0"
    .Value = .Value
End With

это преобразует весь текст в Столбцах книги Excel в Numbers.

Sub ConvertTextToNumbers()
Dim wBook As Workbook
Dim LastRow As Long, LastCol As Long
Dim Rangetemp As Range

'Enter here the path of your workbook
Set wBook = Workbooks.Open("yourWorkbook")
LastRow = Cells.Find(What:="*", After:=Range("A1"), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
LastCol = Cells.Find(What:="*", After:=Range("A1"), SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

For c = 1 To LastCol
Set Rangetemp = Cells(c).EntireColumn
Rangetemp.TextToColumns DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
    :=Array(1, 1), TrailingMinusNumbers:=True
Next c
End Sub

решение, которое для меня работает:

For Each xCell In Selection

  xCell.Value = CDec(xCell.Value)

Next xCell