VBA: преобразование текста в число
у меня есть столбцы чисел, которые по какой-либо причине форматируются как текст. Это не позволяет мне использовать арифметические функции, такие как функция промежуточного итога. Каков наилучший способ преобразования этих "текстовых чисел" в истинные числа?
вот скриншот конкретной проблемы:
Я пробовал эти фрагменты безрезультатно:
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