1

このコードは、Excelスプレッドシートの列の重複行を削除するために作成しました。関数自体の中からwhileループを終了する方法、または可能かどうかはわかりません。ループに2番目の条件(などCounter < 100)を追加したくないのは、必要以上に実行したくないからです。

Sub Deletion()
Dim Cond As Boolean
Dim Counter As Integer
Cond = True
Counter = 2
    While Cond = True
    RecDel (Counter)
    Counter = Counter + 1
    Wend
End Sub

Function RecDel(Varii As Integer)
Set CurrentCell = Workbooks("Duplicate.xls").Sheets("Sheet1").Cells(Varii, 2)
        If CurrentCell.Value = CurrentCell.Offset(1, 0).Value And CurrentCell.Offset(1, 0).Value <> "" Then
                Workbooks("Duplicate.xls").Sheets("Sheet1").Rows(Varii + 1).Delete
                RecDel (Varii) 'Repeats deletion until this row and the next row are different
        ElseIf CurrentCell.Offset(1, 0).Value = "" Then
            Cond = False  'This can't change the global variable and break the loop
        Else
        End If
End Function
4

1 に答える 1

2

問題はCond、関数内とCondサブ内のが同じではないことです。これらは両方ともローカル変数です。グローバルにして2の間で共有することもできます。あるいは、関数にブール値を返し、フラグを完全Condに取り除くこともできます。Cond

Function RecDel(Varii As Integer) As Boolean
    Set CurrentCell = Workbooks("Duplicate.xls").Sheets("Sheet1").Cells(Varii, 2)
    If CurrentCell.Value = CurrentCell.Offset(1, 0).Value And CurrentCell.Offset(1, 0).Value <> "" Then
        Workbooks("Duplicate.xls").Sheets("Sheet1").Rows(Varii + 1).Delete
        RecDel = RecDel (Varii) 'Repeats deletion until this row and the next row are different
    ElseIf CurrentCell.Offset(1, 0).Value = "" Then
        RecDel = False  'This can't change the global variable and break the loop
    End If
End Function

そして、あなたの呼び出しサブで、RecDelのステータスを確認してください:

While RecDel (Counter) = True
    Counter = Counter + 1
Wend
于 2012-06-26T13:33:58.567 に答える