4 Stimmen

VBA: Vorangehende Nullen fallen beim Kopieren weg

Ich erstelle eine Kopie einer Excel-Datei mit VBA. In der Datei gibt es eine Spalte, die Zahlen mit vorangestellten Nullen enthält. Die Kopie der Datei wird erstellt, aber die Daten in dieser Spalte werden gelöscht. Ich muss die Werte mit den vorangestellten Nullen beibehalten. Wie kann ich dieses Problem mit VBA lösen?

7voto

Joe Erickson Punkte 6899

Am besten ist es, die Spalte als Text vorzuformatieren, indem Sie Range.NumberFormat auf "@" setzen. Auf diese Weise bleibt die Zelle als Text und behält ihre führenden Nullen bei, wenn ein Benutzer die Zelle bearbeitet. Hier ist ein VBA-Beispiel:

ActiveSheet.Range("C:C").NumberFormat = "@"

4voto

Michael Todd Punkte 16235

Konvertieren Sie jede Zelle in dieser Spalte in ein Textfeld, bevor Sie sie exportieren. Damit sollte sichergestellt sein, dass jedes Zeichen erhalten bleibt (und nicht wie eine Zahl behandelt wird, wie es hier den Anschein hat).

2voto

John M Punkte 13482

Eine weitere Möglichkeit besteht darin, an jede Zelle ein Apostroph anzuhängen. Dadurch werden alle Werte als Text behandelt, was nützlich ist, wenn verschiedene Registerkarten gemeinsame Werte als Text oder Zahl behandeln (d.h. einkopiert oder berechnet).

Dazu wird die Funktion Chr() verwendet und ihr der Zeichencode 39(') zugewiesen:

For x = 1 to 100
If Sheets(origSheet).Cells(x, "A").Value <> "" Then
            Sheets(origSheet).Cells(x, "A").Value = Chr(39) & Sheets(origSheet).Cells(x, "A").Value
        End If

0 Stimmen

Gut gemacht, ich muss Text "00:00" halten, aber selbst mit Format("00:00") bekam ich nur "0:00", und mit "Chr(39)&" wurde dieses Problem gelöst.

0voto

Mike Woodhouse Punkte 50241

In Anbetracht der akzeptierten Antwort ist es wahrscheinlich nicht das, was Sie brauchen, aber wenn Sie ein benutzerdefiniertes Zahlenformat festlegen, werden auch die vorangestellten Nullen wieder in den angezeigten Wert eingefügt.

Um einen Wert mit führenden Nullen bis zu 8 Ziffern anzuzeigen, stellen Sie z. B. das Format auf 00000000, dann wird 123 als 00000123 angezeigt.

Sowohl die hier beschriebene Methode als auch die Methode "Als Text formatieren" führen zu Zellwerten, die in Berechnungen weiterhin funktionieren, obwohl die horizontale Ausrichtung standardmäßig anders ist. Beachten Sie auch, dass z. B. die Verkettung von Zeichenketten mit den Werten zu Unterschieden führen wird:

als Text: zeigt 00000123 an, fügen Sie "x" an, um 00000123x zu erhalten

als Zahl mit benutzerdefiniertem Format: zeigt 00000123 an, fügen Sie ein "x" an, um 123x zu erhalten, da es sich immer noch um eine Zahl handelt.

Wahrscheinlich aber TMI!

0voto

Jamie Punkte 1

Dies ist der Code, den ich erstellt habe, um dieses Problem zu lösen:

Public Sub Change_10_Digit()
'----------------------------------------------------------------------------
' Change numeric loan number ot a 10 digit text number
' 2010-05-21 by Jamie Coxe
'
' Note: Insure exracted data Column is formated as text before running macro
'----------------------------------------------------------------------------

        Dim Lastrow As Long
        Dim StartRow As Long
        Dim Col As String
        Dim RowNum As Long
        Dim nCol As String
        Dim Loan As String
        Dim Digit_Loan As String
        Dim MyCell As String
        Dim NewCell As String
        Dim Cell_Len As Long
        Dim MyOption As Long

'----- Set Options -------------------------------------------------------

    MyOption = 2 '1 = place data in new column, 2 = Replace data in cell
    StartRow = 2 'Start processing data at this row (skip header row)
    Col = "B" 'Loan number in this colmun to be changed to 10 digit
    nCol = "G" 'New column to place value (option 1 only)

'----- End Option Setings ------------------------------------------------

    'Get last row
    Lastrow = Range(Col & "65536").End(xlUp).Row

    For RowNum = StartRow To Lastrow
        'Combined Column and Row number to get cell data
        MyCell = Col & RowNum

        'Get data in cell
        Loan = Range(MyCell).Value

        'Change data in cell to 10 digit numeric with leading zeros
        Digit_Loan = Format(Loan, "0000000000")

        If My0ption = 1 Then
            'Option 1 enter value in new cell
            NewCell = nCol & RowNum
            Range(NewCell).Value = Digit_Loan
        Else
            'Option 2 replace value in cell
            Range(MyCell).Value = Digit_Loan
        End If

    Next RowNum

End Sub

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X