2017-12-11 4 views
0

作成しようとしているマクロに問題があります。データのあるセルを切断して別のシートに移動する際に問題が発生するVBA

セルに特定の月があるかどうか調べたい場合は、そのセル行から別のシートに範囲を切ります。ここで

は、私がこれまで持っているコードです:

Sub MoveToMonth() 
    Dim n As Long 
    Dim nLastRow As Long 
    Dim nFirstRow As Long 
    Dim lastRow As Integer 
    Dim i As Long: i = 1 
    Dim CellMonth As String 

    ActiveSheet.UsedRange 

    With Sheets("DATA_IMPORT") 
    nFirstRow = .UsedRange.Cells(1).Row 
    nLastRow = .UsedRange.Rows(.UsedRange.Rows.Count).Row 

    n = nLastRow 

    With .Cells(n, "B") 
     For n = nLastRow To nFirstRow Step -1 
     CellMonth = Format(.Value, "mmmm") 
     If CellMonth = "November" Then 
      .Cells(n, "B").Cut Worksheets("November").Cells(i, "T") 
      i = i + 1 
     End If 
     Next 
    End With 

    End With 

End Sub 

このコードは、エラーなしで実行されますが、何も起こりません。私はここで何が欠けていますか?

また、このコードを実行すると、実際にはBの値をチェックすることを目指しますが、A:Eをカットします。

私は毎月チェックしていますが、私はこの例では11月を使用していますので、私がテストしているデータセットが11月の値を持っているのでコードを稼働させています。

答えて

1

Forループ順序が少し混在しています。の外側にある必要があります。あなたはWith .Cells(n, "B")を完全に取り除くことができます。以下のコードの

参照セクション:もちろん

For n = nLastRow To nFirstRow Step -1 
    CellMonth = Format(.Cells(n, "B").Value, "mmmm") 
    If CellMonth = "November" Then 
     .Cells(n, "B").Cut Worksheets("November").Cells(i, "T") 
     i = i + 1 
    End If 
Next n 
+0

...完璧に動作し、おかげでシャイ。 私はすべての月の間働くためにそれを少しきれいにしました。私が解決しようとしている唯一の問題は、このビットを実行するときです。 '.Range(" A "&n&":E "&n).Cutワークシート(CellMonth).Cells(i、" T " ) ' 'i = i + 1' iカウントはリスト全体で続き、つまり、関連するシートのTの最初の空のセルに貼り付けられていません。 私は月ごとに別々のカウンターを持つことができると思っていましたが、それは乱雑になり、すべての人に共通する1つのステートメントではなく、毎月のifelseステートメントを持たなければならなくなります。何か案は? – dweeman

+0

@dweemanは、ワークシートの次の空のセルを探すだけで、郡を使用する必要はありません –

関連する問題