Ich werde eine wöchentliche Datei erhalten, in der eine Spalte mit einem "," Trennzeichen geteilt werden muss, aber in der die Position der Zielspalte und die Länge der Werte in diesem steht Spalte sind unbekannt und werden variieren.Führende Nullen im Excel-Split beibehalten Ausgabe
Einige der Werte in der Zielspalte für den Split haben führende Nullen, die gerade entfernt werden, wie es zu erwarten wäre, wenn die Zeichen in eine als General formatierte Spalte eingegeben würden. Die Zielspalte für den Split wird vor dem Ausführen des Split immer als Text formatiert. Alle Werte aus anderen Spalten als der Zielspalte müssen beibehalten werden.
Die Zielspalte scheint nach dem Ausführen der folgenden Prozedur in das allgemeine Format anstelle des beabsichtigten Textformats konvertiert zu werden. Ich bin unsicher, wie man sicherstellen kann, dass die Spalte bleibt Text und die führenden Nullen bleiben erhalten.
Aktuelle Sub:
Jede mögliche Unterstützung Sie wird sehr geschätzt bieten kann:
Sub Test_Split_Column()
Dim LR As Long, i As Long, LC As Integer
Dim x As Variant
Dim r As Range, iCol As Integer
On Error Resume Next
Set r = Application.InputBox("Click in the column to split by", Type:=8)
On Error GoTo 0
If r Is Nothing Then Exit Sub
On Error Resume Next
ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Value = " "
On Error GoTo 0
iCol = r.Column
Application.ScreenUpdating = False
LC = Cells(1, Columns.Count).End(xlToLeft).Column
LR = Cells(Rows.Count, iCol).End(xlUp).Row
Columns(iCol).Insert
For i = LR To 1 Step -1
With Cells(i, iCol + 1)
If InStr(.Value, ",") = 0 Then
.Offset(, -1).Value = .Value
Else
x = Split(.Value, ",")
.Offset(1).Resize(UBound(x)).EntireRow.Insert
.Offset(, -1).Resize(UBound(x) - LBound(x) + 1).Value = Application.Transpose(x)
End If
End With
Next i
Columns(iCol + 1).Delete
LR = Cells(Rows.Count, iCol).End(xlUp).Row
With Range(Cells(1, 1), Cells(LR, LC))
On Error Resume Next
.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
On Error GoTo 0
.Value = .Value
End With
With ActiveSheet.UsedRange
.Replace What:=" ", Replacement:=vbNullString, LookAt:=xlWhole
End With
Application.ScreenUpdating = True
End Sub
Beispiele für Rohdaten, Stromausgang und gewünschte Ausgabe unter unten stehendem Link! Vielen Dank!
Sie können versuchen, die Zellen als Text mit '.NumberFormat =" @ "zu formatieren, bevor Sie ihre Werte zuweisen. – Slai
Auch können Sie Ihre Spalte als "Text" -Format setzen – nightcrawler23
Sie können möglicherweise die 'Range.TextToColumns' -Methode verwenden und die Spalten als 'xlTextFormat' angeben –