0

私はExcell2010でデータベースに取り組んでいて、多くの重複した名前を見つけました。これを解決するためにVBAスクリプトを作成しようとしましたが、無限ループで終了します。空白のセルに当たったときに停止したかったのです。これが私が思いついたコードです

Sub excluirDuplicatas()

   Dim lngCont As Long
   Dim lngLinhas As Long
   Dim rngNom1 As Range
   Dim rngNom2 As Range

lngCont = 0
lngLinhas = Cells.SpecialCells(xlCellTypeLastCell).Row

While lngCont <= lngLinhas

Set rngNom1 = ActiveCell
Set rngNom2 = rngNom1.Offset(1, 0)

While rngNom1.Value = rngNom2.Value And rngNom2 <> lastRow


rngNom2.Select
rngNom2.EntireRow.Delete
Set rngNom2 = ActiveCell
Wend


Set rngNom1 = rngNom2
Set rngNom1 = ActiveCell



Set rngNom1 = rngNom2
rngNom1.Select

lngCont = lngCont + 1

Wend

End Sub

何が悪いのかわかりません、私の推測は私が述べている部分です

rngNom2 <> Cells.SpecialCells(xlCellTypeLastCell).Row

今日(3月22日)にVBAプログラミングを開始したことに注意してください。回答だけでなく、簡単な説明も投稿していただければ幸いです。

PS:データシートの長さは2000行を超えています

4

3 に答える 3

2

使用を避けるために、For ループを使用することをお勧めします。このリンク.Selectを参照してください。

たとえば、コードは次のようになります

For i = 1 To lastRow
    If Len(Trim(Sheets("Sheet1").Range("A" & i).Value)) = 0 Then Exit For

    '
    '~~> Rest of your code
    '
Next i
于 2013-03-22T20:28:45.480 に答える
0

このコマンドが役立つと思います。Range("a1")テストしたい範囲に置き換えます。

IsEmpty(Range("a1"))

すなわち、do while isempty(range("a1"))...またはdo while not isempty(range("a1"))

于 2013-03-22T20:22:43.283 に答える
0

あなたが何をしているのかは 100% わかりませんが、これが出発点です。

rngまず、調べたいすべてのセルを含む範囲変数を宣言します。このrng変数を設定した方法は、列の最初の空白セルで自動的に停止します

カウンターrを使用して、これらのセルを最後から最初に反復処理します (これは削除時に必要です)。

この反復中に、変数clを単一のセル範囲として使用します。

Sub excluirDuplicatas()

Dim rng as Range
Dim r as Integer 'row counter.
Dim cl As Range


lngCont = 0
lngLinhas = Cells.SpecialCells(xlCellTypeLastCell).Row

set rng = Range(ActiveCell.Address, Range(ActiveCell.Address).End(xlDown)) 

For r = rng.Rows.Count to 1 Step - 1 'Step backwards when deleting, otherwise you have infinite loop

    'This tests to see if the cell value is the same as the value below it.
     ' and deletes it if it is the same value.
    If cl.Value = cl.Offset(1,0).Value Then
        cl.EntireRow.Delete

    End If
Next

サブ終了

于 2013-03-22T20:40:51.830 に答える