0

我在 Excell 2010 中处理数据库,发现许多重复的名称。我试图制作一个 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% 确定你在做什么,但这将是一个开始。

首先声明一个范围变量rngtaht 包含您要检查的所有单元格。我设置此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 回答