2016-07-15 8 views
1

VBA 지식이 광범위하지 않기 때문에 필요한 매크로를 기록합니다. 동일한 셀에 날짜와 시간이 모두있는 열이 있으므로 Excel의 '텍스트를 열로'기능을 사용하여이를 기록하고 아래 코드를 작성했습니다. 그러나 일단 모든 행에 빈 셀이 있으면 그 아래의 모든 셀이 포맷되지 않습니다!일부 셀이 비어있을 때 텍스트를 사용하여 서식 지정을 계속하는 VBA 코드

내 검색에서 솔루션은 셀에 의해 동작 셀을 수행하도록 코드를 반복하는 것으로 나타 났지만이를 사용하는 방법을 찾지 못했습니다. 게다가 매우 복잡한 것처럼 보입니다!

공백 셀을 무시하고 서식을 계속 사용하는 방법이 있는지 묻습니다.

이것은 텍스트 열 코드이지만 빈 셀을 무시하기 전이나 후에 추가 할 수있는 코드가 있습니까?

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 메서드를 사용하여 작업을 완료하지 않으려 고 나설 것을 겸허하게 제안합니다. 녹음 된 코드는 시작하는 좋은 방법이지만 추후 사용을 위해 코드를 유지하려는 경우 선택 및 선택을 제거하도록 코드를 수정할 준비가되어 있어야합니다. 선택에 의존하지 않고 목표를 달성하기 위해 활성화하는 방법에 대해서는 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) 참조)을 사용하면 두 번째 열을 건너 뛸 수 있습니다. – Jeeped

+0

정말 고마워요! 귀하의 질문에 대답하기 위해 필자는 텍스트를 열 명령을 사용하여 시간을 넣기 위해 순전히 만든 오른쪽에 삽입 한 열을 제거하지만 시간을 필요로하지 않으므로 열을 삭제합니다! –

+0

안녕하세요. 기둥을 반복하고 삭제하지 않고도 쉽게 할 수있는 방법을 찾았 음을 알리고 싶었습니다. 불행히도 Select! 열 ("R : T") 선택 Selection.NumberFormat = "m/d/yyyy" –