在Excel拆分输出中保留前导零

在Excel拆分输出中保留前导零,excel,vba,Excel,Vba,我将收到一个每周文件,其中一列必须使用“,”分隔符拆分,但目标列的位置和该列中值的长度未知,并且会有所不同 拆分的目标列中的某些值具有前导0,如果将字符输入到格式为“常规”的列中,则当前将删除这些值。执行拆分之前,拆分的目标列始终格式化为文本。必须保留目标列以外的列中的所有值 运行以下过程后,目标列似乎转换为常规格式,而不是预期的文本格式。我不确定如何确保列仍然是文本,并且保留前导的0 当前子项: Sub Test_Split_Column() Dim LR As Long, i As Lon

我将收到一个每周文件,其中一列必须使用“,”分隔符拆分,但目标列的位置和该列中值的长度未知,并且会有所不同

拆分的目标列中的某些值具有前导0,如果将字符输入到格式为“常规”的列中,则当前将删除这些值。执行拆分之前,拆分的目标列始终格式化为文本。必须保留目标列以外的列中的所有值

运行以下过程后,目标列似乎转换为常规格式,而不是预期的文本格式。我不确定如何确保列仍然是文本,并且保留前导的0

当前子项:

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
以下链接的原始数据、当前输出和所需输出示例:


非常感谢您提供的任何帮助!谢谢

可用于强制excel将任何值视为文本

x = Split(Replace("'" & .Value, ",", ",'"), ",")

如果将字符串数组而不是变量数组指定给范围,则即使值是数字,也会将值设置为字符串

这样的办法应该行得通

   Dim strValue As String
   strValue = "000123,1234,0001"

   Dim x As Variant
   x = Split(strValue, ",")

   ReDim result(0 To UBound(x), 0 To 0) As String
   Dim i As Integer
   For i = 0 To UBound(x)
      result(i, 0) = x(i)
   Next i
   ActiveSheet.Range("A1:A3").Value = result

在赋值之前,您可以尝试使用
.NumberFormat=“@”
将单元格格式化为文本。也可以将列设置为“
text
”格式。您可以使用
Range.TextToColumns
方法,在替换当前的x=拆分行后,将列指定为“xlTextFormat”,这将返回相同的结果。从逻辑上讲,我认为它不应该——正如您所提到的,前面的“'”通常会强制将该值识别为文本,但它在本例中似乎不起作用。它对我起作用。我写了一小段代码,基本上是从你的代码中借来的,它成功了。@Bnecrons090我忘记了第一个值。如果更新版本不起作用,请确保未通过转置或代码的任何其他部分删除
。谢谢@Slai,它一定是代码中的其他东西,因为我仍然得到与编辑段相同的结果。不幸的是,VBA不是我的强项,所以我想我需要继续摆弄…然而,在执行拆分之前,在目标列前面等待一个额外的“0”,似乎会强制保留0…如果我正确地阅读了您发布的片段,这基本上就是它已经在做的事情?如果是这样的话,就必须有其他部分来抵消预期的结果。例如:我使用=“””&C2预先强制连接(复制下另一列,然后用值粘贴到原始列上)。重新运行拆分后,它将保留0。