2017-02-27 4 views
1

Dies wird von Dammer15 gepostet und das ist, was ich suche. Ich brauche es jedoch, um die gesamte Spalte zu durchlaufen. Ich würde direkt dort fragen, aber ich kann noch nicht kommentieren.Entfernen führende Nullen aus Spalte (keine Funktion)

Dim My_Number As String 
Dim i As Integer 
My_Number = Range("AJ") 
For i = 1 To Len(My_Number) - 1 
If InStr(1, My_Number, "0") = 1 Then 
    My_Number = Right(My_Number, Len(My_Number) - 1) 
Else 
    Range("AJ") = My_Number 
    Exit For 
End If 
Next 
+0

Sie können dies nicht tun 'My_Number = Range (" AJ ")' Sie müssen den Bereich durchlaufen und jede Zelle einzeln betrachten. Aber sind das alles Zahlen oder haben sie Text in der Zeichenfolge? –

+0

Es ist alphanumerisch – Noisewater

Antwort

1

Sie einen regulären Ausdruck verwenden, könnte die Führung 0s anstelle der sperrigen Ersetzen-Funktion haben Sie gerade zum Spiel:

Sub TestRe() 
    Dim LastCell As Range: Set LastCell = ActiveSheet.Columns("AJ").Find("*", SearchDirection:=xlPrevious) 
    Dim Rng As Range: Set Rng = ActiveSheet.Range("AJ1", LastCell) 
    Dim Cell As Range: For Each Cell In Rng 
     Cell.Value = RemoveLead0s(Cell.Value) 
    Next Cell 
End Sub 

Function RemoveLead0s(AlphaNum As String) As String 
    RemoveLead0s = AlphaNum 

    ' RegExp requires "Microsoft VBScript Regular Expressions 5.5" reference 
    Dim RegEx As New RegExp 
    With RegEx 
     .Pattern = "^0*" 
     If .test(AlphaNum) Then RemoveLead0s = .Replace(AlphaNum, "") 
    End With 
End Function 
2

Sie müssen jeden Wert durchlaufen. Ich würde empfehlen, den gesamten Bereich in ein Array hochladen und dann durch diese stattdessen Looping:

Sub foo() 
Dim rng As Range 
Dim i As Long, j As Long 
Dim arr() As Variant 
Dim lastRow As Long 

With ActiveSheet 
    lastRow = .Cells(.Rows.Count, "AJ").End(xlUp).Row 
    Set rng = .Range("AJ1", .Cells(lastRow, "AJ")) 
    arr = rng.Value 
    For i = LBound(arr, 1) To UBound(arr, 1) 
     My_Number = arr(i, 1) 
     For j = 1 To Len(arr(i, 1)) - 1 
     If Mid(arr(i, 1), j, 1) <> 0 Then 
      arr(i, 1) = Right(arr(i, 1), Len(arr(i, 1)) - (j - 1)) 
      Exit For 
     End If 
     Next j 
    Next i 
    rng.Value = arr 
End With 

End Sub 
Verwandte Themen