当前位置:编程学习 > VB >>

求教育,关于EXCEL判断重复数据的代码

我这儿有个需求,循环excel中所有的数据,如果有两行数据相同,就整行删除第二行数据,保留第一行 --------------------编程问答-------------------- 设置一个按钮,然后把这段代粘贴进去就行。
Private Sub CommandButton1_Click()
Dim a As Integer
a = Worksheets("Sheet1").Range("A65535").End(xlUp).Row
For i = 1 To a
    If Worksheets("Sheet1").Cells(i, 1).Value = "" Then
       Exit For
    Else
          For j = i + 1 To a
              If Worksheets("Sheet1").Cells(i, 1).Value = Worksheets("Sheet1").Cells(j, 1).Value Then  '判断两个单元格的数值是否相等'
              Sheets("Sheet1").Rows(j).Delete
              Else
              End If
          Next j
    End If
Next i

End Sub --------------------编程问答-------------------- 我到是觉得把数据都导入内存后对比重组,然后将重组后的数据写入一个新创建的Excel文件更合适。 --------------------编程问答--------------------
引用 2 楼 Veron_04 的回复:
我到是觉得把数据都导入内存后对比重组,然后将重组后的数据写入一个新创建的Excel文件更合适。


这个办法肯定比在sheet里循环要好,我通常是用dictionary+数组做,完成后放在一个新的sheet里,这样即使有错误也容易检查。不知道说的对不对。 --------------------编程问答-------------------- 要善用Excel自己的功能:
1)在最左插入一列,A1 填数字 1,用等差序列向下填充。
2)按需要比较的列排序
3)一次循环,如果相邻的两行相同,删除下面一行
4)按A列排序(恢复原次序)
5)删除A列

除了步骤3,其他都可以录制宏得到。 --------------------编程问答-------------------- 这个还要VBA啊。。。直接数据->筛选->高级->选择不重复的数据勾上,复制到其他位置选择下直接就出来了啊。。 --------------------编程问答-------------------- 如果所谓的重复是指整行相同而不仅仅是关键字相同,5楼方法的更好。 --------------------编程问答-------------------- 基本思路:
1。先把数据读入一个数组1
2。新建一个数组2,比数组1多一列
3。将数组1的内容放入数组2,数组2的最后一列用于存放是否删除的标志,(假设一开始全部为0)
4。数组2从第一行的标志为0的开始与其后面的所有标志为0的行比较,如果全部相同,则设标志为1。
5。删除所有标志为1的数组所表示的行。即可。
我的电脑不能运行VBA,否则就做个代码出来了 --------------------编程问答-------------------- 没有附件只能瞎猜啊,比如你的数据在A2:Z100的区域。
如果是我做,首先定义字典dic,数组arr(), xm()
先将数据放进arr,然后做循环,假定arr(n,1)的数据是每行不同的。
 r=0

for n=1 to ubound(arr,1)
  if dic.exists(arr(n,1))=false then
       r=r+1
       dic.add (arr(n,1)),arr(n,1)
       redim xm(1 to ubound(arr,2),1 to r)
        for i=1 to ubound(arr,2)
          xm(i,r)=arr(i,n)
        next
  end if
next    
xm=WorksheetFunction.Transpose(xm)

将xm粘贴到你想要的任何地方,比如sheet2
代码是个大概意思,如果想要准确的,请发附件上来。

--------------------编程问答-------------------- 修正一下
r=0
for n=1 to ubound(arr,1)
  if dic.exists(arr(n,1))=false then
       r=r+1
       dic.add (arr(n,1)),arr(n,1)
       ReDim Preserve xm(1 to ubound(arr,2),1 to r)
        for i=1 to ubound(arr,2)
          xm(i,r)=arr(i,n)
        next
  end if
next    
xm=WorksheetFunction.Transpose(xm) --------------------编程问答-------------------- 大炮打蚊子,根本不需要VBA,筛选功能即可。
补充:VB ,  VBA
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,