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

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

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

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

Columns(5).NumberFormat = "0" 

а также

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

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

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

PS По моему опыту, это решение VBA работает ЗНАЧИТЕЛЬНО быстрее на больших наборах данных и с меньшей вероятностью приведет к сбою Excel, чем использование метода «предупреждающего windows».

Это можно использовать, чтобы найти все числовые значения (даже те, которые отформатированы как текст) на листе и преобразовать их в одиночные (функция 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 в номера.

 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 
  • Intellij reformat для сохранения файлов
  • Как отформатировать TimeSpan в XAML
  • Как рассчитать временной интервал в Java и форматировать вывод?
  • Как я могу поместить int с ведущими нулями при использовании оператора cout <<?
  • Форматирование JSON в C #?
  • Связывание MVC DateTime с неправильным форматом даты
  • Почему редактор Visual Studio показывает точки в пустых местах?
  • экспортировать кадры данных в Excel через xlsx с условным форматированием
  • Показывать число до двух знаков после запятой
  • форматирование строки в формате валюты в отчете jasper
  • Как я могу String.Format объект TimeSpan с пользовательским форматом в .NET?
  • Давайте будем гением компьютера.