Замените точечный десятичный разделитель запятой - PullRequest
1 голос
/ 20 января 2020

Я регулярно получаю большое количество данных для обработки. Некоторые столбцы содержат числа, где десятичный разделитель - это точка.

В моей стране десятичный разделитель - запятая, поэтому эти числа импортируются как текст. В моем процессе первая задача - преобразовать их в числа.

Я поменяю точку на запятую, а затем умножу ее на 1, в результате получим число.

Я только что понял, в некоторых случаях десятичный разделитель исчезает.

enter image description here

Sub Sort_intezkedes()
    Dim Cel As Worksheet
    Set Cel = Sheets("Munka1")
    Cel.Select

    Dim LastRow As Integer
    LastRow = 0

    Dim j As Integer
    For j = 1 To 10
        Cel.Range("B2").Offset(LastRow).Value = Replace(Cel.Range("A1").Offset(j).Value, ".", ",") 
        Cel.Range("C2").Offset(LastRow).Value = Cel.Range("B2").Offset(LastRow).Value * 1
        LastRow = LastRow + 1
    Next j
End Sub

Ответы [ 2 ]

0 голосов
/ 20 января 2020

Ваше начинание страшно из-за его способности конвертировать совершенно хорошие данные в руби sh. Приведенный ниже код заменит запятые точками только в том случае, если NumberFormat ячейки = "General". Щелкните правой кнопкой мыши ячейку и выберите Формат ячеек . «Общие» - это первый элемент на вкладке Number . Это формат по умолчанию для всех первичных ячеек на листах Excel, и это «общий» формат, который позволяет Excel угадывать, ввели ли вы число или текст. Эта функция позволяет исключать столбцы или ячейки на рабочем листе из опустошения моего кода, просто применяя другой формат, например, 0,000000 или «Текст».

Sub TextToNumber()

    Const FirstRow As Long = 2          ' set as required
    Dim Rng As Range
    Dim C As Long                       ' selected column
    Dim Rl As Long                      ' last row
    Dim R As Long
    Dim Tmp As Variant

    C = Selection.Column
    Rl = Cells(Rows.Count, C).End(xlUp).Row
    Set Rng = Range(Cells(FirstRow, C), Cells(Rl, C))

    Application.ScreenUpdating = False
    For R = FirstRow To Rl
        With Cells(R, C)
            If .NumberFormat = "General" Then
                Tmp = .Value
                Tmp = Replace(Tmp, ",", ".")
                .Value = Tmp
            End If
        End With
    Next R
    Application.ScreenUpdating = True
End Sub

Мой код выполняется в столбце, выбранном перед вами запустить его. Выберите любую отдельную ячейку (не нужно выделять весь столбец). Если вы выберете несколько столбцов, будет обработан только первый. Запятые будут заменены точками из первой строки, которую вы можете установить в коде, до конца столбца, который макрос находит самостоятельно.

0 голосов
/ 20 января 2020

Согласно моему комментарию, вы можете решить эту проблему, используя TextToColumns, попробуйте:

Sub Test()

Dim rng As Range
Dim lr As Long

With Sheet1 'Change accordingly
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    Set rng = .Range("A2:A" & lr)
    rng.TextToColumns .Range("A2"), DataType:=xlFixedWidth, FieldInfo:=Array(0, 1), DecimalSeparator:=".", ThousandsSeparator:=",", TrailingMinusNumbers:=True
End With

End Sub

Вышеприведенное вставит результаты в .Range("A2"), так что измените по своему вкусу.

Sidenote: Вы используете имя переменной Cel для объекта Worksheet. Это сбивает с толку =)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...