2016-07-27 6 views
0

인접한 열의 두 날짜 사이에 간격이 있는지 확인하고 그 간격을 채우기 위해 열을 삽입하려면이 매크로를 아래에 작성하십시오.마지막 열 확장 Excel VBA

워크 시트에있는 수만큼의 열에서 실행할 수 있기를 원하지만, 어떤 이유로 인해 DateRange가 워크 시트의 초기 크기에 걸려 있고 매크로의 추가 열을 고려하지 않습니다. 추가되었습니다. 나는 전에 이것에 문제가 없었습니다. 그래서 나는 어려움에 처했습니다!

누구든지이 문제를 해결하기 위해 무엇을 할 수 있는지 알고 있습니까?

Sub weekendsouts() 

Dim OUTSDATA As Worksheet, LastColumn As Long, _ 
DateCell As Range, DateRange As Range 

Set OUTSDATA = Worksheets("OUTS DATA") 
LastColumn = OUTSDATA.UsedRange.Columns.Count 
Set DateRange = OUTSDATA.Range(OUTSDATA.Cells(2, 8), OUTSDATA.Cells(2, LastColumn).Address) 

For Each DateCell In DateRange 
    With DateCell 
     If .Value <> "" Then 
      If .Offset(0, 1).Value <> .Value + 1 And .Offset(0, 1).Value <> .Value Then 
       .Offset(0, 1).EntireColumn.Insert 
       .EntireColumn.Copy Destination:=.Offset(-1, 1) 
       .Offset(0, 1).Value = .Offset(0, 1).Value + 1 
      End If 
     End If 
    End With 
Next DateCell 

End Sub 
+2

루프 및 루프 백 워드에 표준을 사용하려고합니다. LastColumn을 8 단계로 설정 - 1' –

+0

오늘 @ScottCraner 두 번째로 이것이 성공했습니다. 나에게 ened. 나는 정직하게 당신의 코멘트를 읽기 전에 나의 대답을 썼다! 나는 곧 나쁜 처신을받을 것입니다 : s –

답변

2

코드를 유지하면서 다음과 같은 변경을 제안하고 역순으로 작업 할 수있는 방법이 많이 있습니다. 컬렉션으로 작업하고 컬렉션에 추가하면 컬렉션의 크기는 변경되지만 참조는 여전히 원래 크기와 연결됩니다. 이것이 당신이 가진 문제입니다.

거꾸로 작업하면 크기가 변경되지 않습니다. 아래에 따라 루프에서 Step -1을 사용할 수 있습니다이 사용 이렇게하려면

: -

Sub weekendsouts() 

Dim OUTSDATA As Worksheet, LastColumn As Long, _ 
DateCell As Range, DateRange As Range 

Set OUTSDATA = Worksheets("OUTS DATA") 
    LastColumn = OUTSDATA.UsedRange.Columns.Count 
    Set DateRange = OUTSDATA.Range(OUTSDATA.Cells(2, 8), OUTSDATA.Cells(2, LastColumn).Address) 

     For LastColumn = LastColumn to 0 Step - 1 
      'For Each DateCell In DateRange 
      Set DateCell = OUTSDATA.Cells(2,LastColumn) 
       With DateCell 
        If .Value <> "" Then 
         If .Offset(0, 1).Value <> .Value + 1 And .Offset(0, 1).Value <> .Value Then 
          .Offset(0, 1).EntireColumn.Insert 
          .EntireColumn.Copy Destination:=.Offset(-1, 1) 
          .Offset(0, 1).Value = .Offset(0, 1).Value + 1 
         End If 
        End If 
       End With 
      Set DateCell = Nothing 
     Next  
    Set DateRange = Nothing  
Set OUTSDATA = Nothing 
End Sub 

(이 안된, 예를 들어 사용이 적응)

을 여기에서 일어나고있는 것은 그 LastColumn입니다 10이면 루프가 열리고 다음 번에는 9, 8 등이됩니다.

+0

아무런 문제가 없습니다. 공식을받은 사람이 방금 복사하여 더 이상 설명하지 않고 답변에 붙여 넣으면 화가 났 겠지만, 방법. –

+1

감사합니다. @Gary! 이것은 올바른 길로 나를 잡았어! 그런 식으로 거꾸로 생각하지 마십시오. 유일한 것은''.offset (0,1)'발생을'offset (0, -1)'로 바꾸어서 역방향 이동을 설명하기 위해 코드를 약간 수정해야한다는 것입니다. – mynameisgooch