2016-07-27 6 views
0

次のマクロを書き込んで、隣接する列の2つの日付の間にギャップがあるかどうかを確認し、そのギャップを埋めるために列を挿入します。最後の列を拡張する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 Step- 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だった場合、ループは10で始まり、次の反復は9、8などとなります。

+0

問題はありません。もし誰かが数式を書いて、それを答えに貼り付けたら、私は怒っていましたが、どうやって。 –

+1

ありがとう@Gary!これは正しい軌道に乗った!そんなに後ろ向きに働くとは思わなかった。唯一のことは、 '.offset(0,1)'オカレンスのすべてを 'offset(0、-1)'に戻して後方への移動を説明するためにコードをちょっと微調整しなければならないことです。 – mynameisgooch

関連する問題