0

エラーを修正するためにこのマクロを作成しました (うるう年以外で 2 月 29 日までに作成された空白を埋めるため)、Do until ループを停止する際に問題に直面しています。

Do Until ActiveSheet.Cells(3, x) = "2012"マクロは本来の機能を果たしますが、セル (3,x) が 2012 のときにマクロを停止したいのですが、想定どおりに機能しません。

Sub Feb_CORRECTION()
Dim i, x As Integer
Dim year
Dim leapyear

Range("c64").Select
x = 3
Do Until ActiveSheet.Cells(3, x) = "2012"
year = ActiveSheet.Cells(3, x)
leapyear = year Mod 4
If leapyear > 0 Then
Range(ActiveCell, ActiveCell.End(xlDown)).Select
Selection.Cut
ActiveCell.Offset(-1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(1, 1).Select
Else
ActiveCell.Offset(0, 1).Select
x = x + 1
End If
Loop

End Sub

ありがとうございました

4

1 に答える 1

2

行 3 の列の値xが「2012」の場合、ループは終了するように設定されています。

3 に初期化xしてから、行 3 の年がうるう年かどうかを確認します。そうである場合にのみインクリメントxするため、列「C」の年がうるう年でない限り、xインクリメントされることはありません。

代わりにこれを試してください:

Sub Feb_CORRECTION()
Dim i As Integer
Dim x As Integer

Dim year As Integer
Dim leapyear As Integer

    Range("c64").Select
    x = 3

    Do Until ActiveSheet.Cells(3, x) = "2012"
        year = ActiveSheet.Cells(3, x)
        leapyear = year Mod 4

        If leapyear > 0 Then
            Range(ActiveCell, ActiveCell.End(xlDown)).Select
            Selection.Cut
            ActiveCell.Offset(-1, 0).Select
            ActiveSheet.Paste
            ActiveCell.Offset(1, 1).Select
        Else
            ActiveCell.Offset(0, 1).Select
        End If

        ' increment x regardless of leap year status
        x = x + 1
    Loop

End Sub

また、バリアントとして宣言されたいくつかの変数もありますが、それらを使用する非常に具体的な理由がない限り、これは悪い考えです。バリアントは、追跡が非常に困難なバグにつながる可能性があります。上記のスニペットでそれを修正しました。

コード内のこの行はi、バリアントおよびx整数として宣言していることに注意してください。

Dim i, x As Integer

yearまた、 と の両方をleapyearバリアントとして宣言しました。代わりに、おそらく整数である必要があります。

最後のコメント: コードをインデントでフォーマットします。正しくフォーマットされていれば、何をしているのかを理解するのはずっと簡単です。

于 2012-09-09T16:51:02.777 に答える