2017-01-20 10 views
0

「、」デリミタを使用して列を分割する必要がある週ファイルを受け取る予定ですが、対象列の位置とその列内の値の長さ列は不明で、変化します。Excelの先行ゼロを保存する分割出力

スプリットのターゲット列の値には、先行0があります。これは、文字が一般としてフォーマットされた列に入力された場合に予想されるように、現在削除されています。分割の対象列は、分割を実行する前に常にテキストとして書式設定されます。対象となる列以外の列の値はすべて保持する必要があります。

以下の手順を実行すると、対象の列が目的のテキスト形式ではなく一般に変換されたように見えます。私は列がTextのままであり、先頭の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 

例として、電流出力、および所望の出力は、下記のリンク:

Examples

あなたが大幅に高く評価されて提供することができますどのような援助を!ありがとう!

+2

これらの値を割り当てる前に、セルを '.NumberFormat =" @ "'でテキストとして整形することができます。 – Slai

+0

また、カラムを "Text"フォーマットとして設定することもできます – nightcrawler23

+0

'Range.TextToColumns'メソッドを使用し、カラムを 'xlTextFormat'として指定することができます –

答えて

0

'は、任意の値をテキストとして扱うことをExcelに強制するために使用できます。

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

現在のx =分割ラインを置き換えた後、結果。論理的には、あなたが言及したように、先行する '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' – Bnecrons090

+0

それは私のために働いた。私は基本的にあなたのものから借りた小さなコードを書いて、うまくいきました。 – nightcrawler23

+0

@ Bnecrons090私は最初の値を忘れていました。更新されたバージョンが動作しない場合は、 '' 'がTransposeやコードの他の部分で削除されていないことを確認してください。 – Slai

0

あなたが範囲に代わりVariant配列の文字列配列を割り当てた場合、値は値が数値であっても、文字列として設定されます。

何かこれはうまくいくはずです。

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