【问题标题】:Delete one duplicate cell out of table range删除表格范围外的一个重复单元格
【发布时间】:2018-05-15 13:23:02
【问题描述】:

我想删除特定表格范围之外的重复单元格,但不应删除一个重复项(从顶部开始的第一个)。不应在表的 A 列中搜索重复项。也有可能从B列开始的表格中没有内容。

这是它的外观(对不起编号,不知道如何格式化):

  1. ABCDE
  2. 一个
  3. 英国广播公司
  4. cbcef
  5. ddefgh

这就是我想要的:

  1. ABCDE
  2. 一个
  3. 英国广播公司
  4. 参考
  5. dgh

我尝试使用两个 for 循环来做到这一点。第一个循环遍历每一行,第二个循环遍历每一列。如果发现重复项,则应将其删除。

但我想我在那里的 for 循环搞砸了,因为有时它会删除一些奇怪的东西而不是重复的东西..

Dim reportsheet As Worksheet
Dim C1row As Long
Dim C2row As Long
Dim C2column As Long
Dim C2TotalRows As Long
Dim CustID As String
Dim NoDups As Long

Set reportsheet = ThisWorkbook.Worksheets("Tabelle44")
reportsheet.Activate
Sucher_rowTotalRows = Application.CountA(Range("A:A")) ' switchen durch Reihen
Duplikat_row = 1 'für aeuseres For zum durchswitschen zwischen den Ist
Sucher_row = 1
Duplikat_column = 2
Sucher_column = 2

testwert = Cells(Duplikat_row, Columns.Count).End(xlToLeft).Column

Do While Duplikat_row <= Sucher_rowTotalRows

    If Cells(Duplikat_row, Columns.Count).End(xlToLeft).Column = 1 Then
    Duplikat_row = Duplikat_row + 1
    Sucher_row = Sucher_row + 1
    End If

    duplikat = reportsheet.Cells(Duplikat_row, Duplikat_column).Value

     For Sucher_row = 1 To Sucher_rowTotalRows
        For Sucher_column = 2 To (Cells(Sucher_row, Columns.Count).End(xlToLeft).Column) '' Breite der Spalte
            If duplikat = Cells(Sucher_row, Sucher_column).Value Then '' Falls gesuchtes und gesuchert uebereinstimmt

                Cells(Sucher_row, Sucher_column).Delete xlShiftToLeft '' löschen und nach links verschieben
                Sucher_column = Sucher_column - 1
                Exit For
            End If
        Next
        Sucher_column = Sucher_column + 1 '' Suchspalte eins weiter
    Next
    Duplikat_row = Duplikat_row + 1 ''suchreihe eins weiter
Loop

知道那里出了什么问题吗?非常感谢!

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    试试这个:

    duplikat = reportsheet.Cells(Duplikat_row, Duplikat_column).Value
    
    For Sucher_row = 1 To Sucher_rowTotalRows
        For Sucher_column = 2 To (Cells(Sucher_row, Columns.Count).End(xlToLeft).Column) '' Breite der Spalte
            Do While duplikat = Cells(Sucher_row, Sucher_column).Value  '' Falls gesuchtes und gesuchert uebereinstimmt
                If Sucher_row = Duplikat_row And Sucher_column = Duplikat_column Then
                    Exit Do
                Else
                    Cells(Sucher_row, Sucher_column).Delete xlShiftToLeft '' löschen und nach links verschieben
                End If
            Loop
        Next
    Next
    

    【讨论】:

    • 感谢您的帮助!它适用于第一个副本,但它缺少切换到它应该寻找的下一个副本。鉴于上述示例,您的代码删除了所有“b”,但缺少删除“c”、“e”、“f”......希望你明白我的意思......
    • 另外,当我尝试运行您的代码时,excel 崩溃了。我只看到一次错误消息,我认为它是“运行时错误'-2147024809 (80070057)”。但是当我使用 F8 时,它适用于第一个副本。
    猜你喜欢
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 2014-12-11
    • 2016-12-30
    • 2021-07-06
    相关资源
    最近更新 更多