2015-11-09 5 views
0

У меня есть этот код ниже, который отлично работает, когда «числа» не имеют запятых, но когда ячейка имеет запятую, она не преобразуется в число. Я пробовал с иметь numberformat к 0, или #. ## 0 и так далее, но ничего не работает. Как я могу решить проблему?Преобразование в число с запятой

Sub convert() 
     Range("C:C").Select 'specify the range which suits your purpose 
     With Selection 
      Selection.NumberFormat = "General" 
      .Value = .Value 
     End With 
    End Sub 
+0

Как получают эти данные в таблицу? Для этого, вероятно, существует расхождение между тысячами и цифровыми разделителями для региональных настроек Windows и данными на листе Excel. В этом случае могут быть другие значения, которые неверно переводятся в цифры, и это также необходимо учитывать. Возможно, вам лучше сделать данные ** IMPORT ** и с помощью мастера импорта текста указать тысячи и десятичные разделители. –

ответ

0

Попробуйте эту версию:

Sub convert() 
    Dim r As Range 

    For Each r In Intersect(Range("C:C"), ActiveSheet.UsedRange) 
     With r 
     .NumberFormat = "General" 
     .Value = Replace(.Value, ",", "") 
     End With 
    Next r 
End Sub 
0

это то, что вы пытаетесь?

Sub convert() 
    With Columns(3) 
     .Replace What:=",", Replacement:="", LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
     ReplaceFormat:=False 

     .NumberFormat = "General" 
     .Value = .Value 
    End With 
End Sub 
0

Попробуйте этот код: Это удалит весь charecter из

Sub convert() 
      Dim MyRange, cell As Range 
      Set MyRange = Range("C:C") 
      Dim MyNum 

      For Each cell In MyRange 
      If IsEmpty(cell) Then Exit For 
       MyNum = getNumber(cell) 
       cell.Value = MyNum 
       MyNum = "" 
      Next cell 

      Range("C:C").Select 'specify the range which suits your purpose 
      With Selection 
       Selection.NumberFormat = "General" 
       .Value = .Value 
      End With 
     End Sub 

Это функция getNumber:

Public Function getNumber(fromThis As Range) As Double 
       'Extract the number from a cell and return it. 
       Dim retVal As String 
       Dim ltr As String, i As Integer, european As Boolean 

       retVal = "" 
       getNumber = 0 
       european = False 


        If fromThis.Value Like "*.*,*" Then 
        european = True 
       End If 

       For i = 1 To Len(fromThis) 
        ltr = Mid(fromThis, i, 1) 
        If IsNumeric(ltr) Then 
         retVal = retVal & ltr 
       ElseIf ltr = "." And (Not european) And Len(retVal) > 0 hen 
         retVal = retVal & ltr 
        ElseIf ltr = "," And european And Len(retVal) > 0 Then 
         retVal = retVal & "." 
        End If 
       Next i 
       getNumber = CDbl(retVal) 

      End Function 
Смежные вопросы