首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除所有重复行Excel不能正常工作

删除所有重复行Excel不能正常工作
EN

Stack Overflow用户
提问于 2015-01-07 12:23:38
回答 2查看 2.3K关注 0票数 2

我用userform在excel中创建了一个工作簿,它允许您在工作表中导入.csv数据。知道我有重复行的问题。我在这里找到了一个解决办法,但它不能百分之百地发挥作用。(Delete all duplicate rows Excel vba)脚本删除大部分重复数据,但仍然有2-5个重复行。首先我认为这是单元格的格式,但这不是问题.

这是马克罗:

代码语言:javascript
复制
    Sub DeleteRows()
       With ActiveSheet
           Set Rng = Range("A1", Range("T1").End(xlDown))
            Rng.RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20), Header:=xlYes
       End With
    End Sub

重复的数据从负数开始。我不知道这是否有助于找到解决办法.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-12 12:40:34

我不知道真正的问题,但我通过在每个单元格中添加一个点来修正它。外:

代码语言:javascript
复制
1. Cell1  -> .Cell1
2. Remove the duplicates
3. .Cell1 -> Cell1

以下是代码:

代码语言:javascript
复制
Sub DeleteRows()
Dim c As Long
With ActiveSheet
    For c = 1 To 20
        If Application.CountA(.Columns(c)) Then
            .Columns(c).TextToColumns Destination:=.Cells(1, c), _
              DataType:=xlFixedWidth, FieldInfo:=Array(0, 1)
        End If
    Next c
    With .Range("A1", .Range("T1").End(xlDown)).Cells
        .RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20), Header:=xlYes
    End With
End With
End Sub

Private Sub CommandButton2_Click()
.
.'some code'
.
For i = 2 To ActiveSheet.Cells(Rows.Count, 1).End(xlUp).row
    column = ActiveSheet.Range("A" & i).value
    If column < 0 Then
        column = "." & column
        ActiveSheet.Range("A" & i).value = column
    End If
Next

Call DeleteRows

For i = 2 To ActiveSheet.Cells(Rows.Count, 1).End(xlUp).row
    firstChar = Left(ActiveSheet.Range("A" & i).value, 1)
    If firstChar = "." Then
        column = Right(ActiveSheet.Range("A" & i).value, Len(ActiveSheet.Range("A" & i).value) - 1)
        ActiveSheet.Range("A" & i).value = column
    End If
Next
.
.'some code'
.
End Sub

这不是最好的解决办法,但它是有效的!来寻求帮助。

票数 1
EN

Stack Overflow用户

发布于 2015-01-07 12:53:29

我强烈怀疑负号不是传统的CHAR(45)连字符,或者有前导/尾随零。有些值是左对齐的,而另一些值是对齐的?这将表明,有些被视为文本,而另一些则被视为真实数字。

移除文本对列中的前导/尾随空格的最快方法--►固定每列的宽度。

代码语言:javascript
复制
Sub DeleteRows()
    Dim c As Long
    With ActiveSheet
        For c = 1 To 20
            If Application.CountA(.Columns(c)) Then
                .Columns(c).TextToColumns Destination:=.Cells(1, c), _
                  DataType:=xlFixedWidth, FieldInfo:=Array(0, 1)
            End If
        Next c
        With .Range("A1", .Range("T1").End(xlDown)).Cells
            .RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20), Header:=xlYes
        End With
    End With
End Sub

这样做的原因可能不那么明显;不间断的空间(ASCII 160或0×A0)马上就会出现在脑海中。与实际显示一些示例数据不同,您需要仔细检查您的值,看看是什么原因导致Excel不将这些值视为重复值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27819461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档