Форматирование чисел VBA (с запятыми в качестве десятичного разделителя) - PullRequest
0 голосов
/ 09 октября 2019

Основная проблема началась, когда я захотел «преобразовать в число» зеленым треугольником (я знаю, что могу сделать это вручную, но таких клеток много, и в будущем я хочу использовать только код).

enter image description here

Итак, я хотел сделать это с помощью кода, и я столкнулся с этим кодом, который помогает, но у меня проблема с форматом чиселкоторый удаляет десятичные числа.

enter image description here

Sub Valor3()

Dim LastRow As Long, i As Long

LastRow = Sheets("Hoja3").Range("A" & Rows.Count).End(xlUp).Row

'Sheets("Hoja3").Range("A1:A" & LastRow).NumberFormat = "# ##0,00"

For i = 1 To LastRow
    If Val(Sheets("Hoja3").Range("A" & i).Value) <> 0 Then _
    Sheets("Hoja3").Range("A" & i).Formula = _
    Val(Sheets("Hoja3").Range("A" & i).Value)
Next i

End Sub

Я пробовал много форматов, но ни один из них, похоже, не помог. Это может быть потому, что здесь мы используем запятую в качестве десятичного разделителя, а разделитель миль отсутствует. ¿Какой формат чисел должен мне помочь?

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Я знаю, что вы ищете решение VBA, но вот небольшой трюк Excel, который может оказаться полезным:

  1. Введите 1 (числовое значение) где-нибудь в файле и скопируйте его:

enter image description here

Выберите диапазон (A1: A6) и выберите Вставить> Специальная вставка> выберите Умножение:

enter image description here

Окончательный результат - все ваши текстовые значения преобразуются в числа:

enter image description here

Тот же трюк будет работать с другими комбинациями, напримерOperation: Add при копировании 0 и т. Д.

0 голосов
/ 09 октября 2019

Проблема в том, что вы используете Функция Val в сочетании с неанглийским десятичным разделителем, что не является правильным решением вашей проблемы.

Функция Val распознает только период (.) в качестве действительного десятичного разделителя. При использовании различных десятичных разделителей, как в международных приложениях, вместо преобразования строки в число используйте CDbl.

Источник: документация Microsoft Функция Val .

Поскольку функция Val не преобразует текст в значение, а извлекает Функция Val работает только с точкой . в качестве десятичного разделителя.

Пример:

Val("2.55") 'will return 2.55 as number
Val("2,55") 'will return 2 as number (because it cuts off all text and the comma is not considered as decimal separator)

Чтобы избавиться от зеленого треугольника и правильно преобразовать число, сохраненное в виде текста, в действительное число, используйте следующее:

Option Explicit

Public Sub ConvertNumberAsTextIntoRealNumber()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Hoja3")

    Dim LastRow As Long
    LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    With ws.Range("A1", "A" & LastRow)
        .NumberFormat = "# ##0.00"  'set your desired number format
        .Value = .Value  'this will in most cases already convert to real numbers.
    End With

    'But if your numbers are hard coded to text and begin with a `'` you need the following additionally:
    Dim iRow As Long
    For iRow = 1 To LastRow
        With ws.Cells(iRow, "A")
            If IsNumeric(.Value) Then  'can the value be interpreted as a number
                If .Value <> 0 Then  'is the value not zero
                    .Value = CDbl(.Value)  'then convert it into a real number
                End If
            End If
        End With
    Next iRow
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...