2016-07-15 2 views
1

VBAに関する知識が豊富ではないため、通常は必要なマクロを記録します。同じセルにDateとTimeの両方の列があるので、Excelの「Text to Columns」機能を使用し、それを記録し、以下のコードを用意しました。しかし、いったん空白のセルがあれば、その下のセルはすべてフォーマットされません!一部のセルが空白のときにテキストを使用してテキストを使用して書式設定を続けるVBAコード

私の検索では、ソリューションがセルごとにアクションセルを実行するコードをループしていることがわかりましたが、それを使用する方法を見つけられず、さらには非常に複雑に見えます。

空白のセルを無視して書式設定を続行する方法があるかどうかを確認しています。

これはText to Columnコードですが、前または後に空白のセルを無視してコードを残しておくコードはありますか?適切な列に

Columns("S:S").Select 
Selection.Insert Shift:=xlToRight 
Range("R2").Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.TextToColumns Destination:=Range("R2"), DataType:=xlFixedWidth, _ 
    FieldInfo:=Array(Array(0, 2), Array(9, 1)), TrailingMinusNumbers:=True 
Columns("S:S").Select 
Selection.Delete Shift:=xlToLeft 

Columns("T:T").Select 
Selection.Insert Shift:=xlToRight 
Range("S2").Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.TextToColumns Destination:=Range("S2"), DataType:=xlFixedWidth, _ 
    FieldInfo:=Array(Array(0, 2), Array(9, 1)), TrailingMinusNumbers:=True 
Columns("T:T").Select 
Selection.Delete Shift:=xlToLeft 

Columns("U:U").Select 
Selection.Insert Shift:=xlToRight 
Range("T2").Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.TextToColumns Destination:=Range("T2"), DataType:=xlFixedWidth, _ 
    FieldInfo:=Array(Array(0, 2), Array(9, 1)), TrailingMinusNumbers:=True 
Columns("U:U").Select 
Selection.Delete Shift:=xlToLeft 

答えて

0

変更、

Range(Selection, Selection.End(xlDown)).Select 

...と、

Range(Cells(2, "T", Cells(Rows.Count, "T").End(xlUp)).Select 

変更"T"

私は、Range .SelectRange .Activateメソッドを使用して作業を完了することを控えてください。記録されたコードは始めるのが良い方法ですが、今後の使用のためにコードを保持する予定の場合は、選択と選択を削除するコードを変更する準備が必要です。あなたの目標を達成するためにselectとactivateに頼ることを避けるためのさらなる方法については、How to avoid using Select in Excel VBA macrosを参照してください。さらに、コードをクリーンアップカラムR、S及びT(列18、19及び20)を介して実行するループを使用して

With Worksheets("Sheet1") 
    .Columns("S:S").Insert Shift:=xlToRight 
    With .Range(.Cells(2, "R"), .Cells(Rows.Count, "R").End(xlUp)) 
     .TextToColumns Destination:=.Range("R2"), DataType:=xlFixedWidth, _ 
         FieldInfo:=Array(Array(0, 2), Array(9, 1)), _ 
         TrailingMinusNumbers:=True 
    End With 
    .Columns("S:S").Delete Shift:=xlToLeft 

    .Columns("T:T").Insert Shift:=xlToRight 
    With .Range(.Cells(2, "S"), .Cells(Rows.Count, "S").End(xlUp)) 
     .TextToColumns Destination:=.Range("S2"), DataType:=xlFixedWidth, _ 
         FieldInfo:=Array(Array(0, 2), Array(9, 1)), _ 
         TrailingMinusNumbers:=True 
    End With 
    .Columns("T:T").Delete Shift:=xlToLeft 

    .Columns("U:U").Insert Shift:=xlToRight 
    With .Range(.Cells(2, "T"), .Cells(Rows.Count, "T").End(xlUp)) 
     .TextToColumns Destination:=.Range("T2"), DataType:=xlFixedWidth, _ 
         FieldInfo:=Array(Array(0, 2), Array(9, 1)), _ 
         TrailingMinusNumbers:=True 
    End With 
    .Columns("U:U").Delete Shift:=xlToLeft 
End With 

:例えば

Dim c As Long 
With Worksheets("Sheet1") 
    For c = 18 To 20 
     With .Range(.Cells(2, c), .Cells(.Rows.Count, c).End(xlUp)) 
      .TextToColumns Destination:=.Cells(1), DataType:=xlFixedWidth, _ 
          FieldInfo:=Array(Array(0, xlMDYFormat), Array(10, xlSkipColumn)) 
     End With 
    Next c 
End With 

xlMDYFormatを日付に適用しました。日付がDMYの場合は、xlDMYFormatを使用するか、xlColumnDataType Enumerationで他の使用可能な形式を確認してください。

+0

[.TextToColumns](https://msdn.microsoft.com/en-us/library/office/ff193593.aspx)を処理して列を削除する理由は不明です。 ** xlSkipColumn **([xlColumnDataType Enumeration](https://msdn.microsoft.com/en-us/library/bb241018.aspx)を参照)を使用して2番目の列をスキップできます。 – Jeeped

+0

ありがとうございました!あなたの質問に答えるために、私はちょうどテキストを列コマンドを使用して後に時間を置くために作成した私は右に挿入した列を削除していますが、私はそれらの列を削除するので、時間が必要ない! –

+0

こんにちは!列をループしたり削除したりすることなく簡単に行うことができたことを知りたいと思っていました。残念ながら私はセレクトを使用しています!列( "R:T")を選択 Selection.NumberFormat = "m/d/yyyy" –

関連する問題