Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2374|回复: 8

[已解决]请修改代码

[复制链接]
发表于 2013-12-11 19:21 | 显示全部楼层 |阅读模式
本帖最后由 ymq123 于 2013-12-11 20:59 编辑

    1、sheets(2)表中每一行都和sheets(1)表中每一行相比较,若有5个及以上相同的数字,就删除sheets(2)表中相应的行。如:sheets(2)表第二行和sheets(1)表第一行有6个相同的数字(相同数字是1、3、7、8、10、11),就删除sheets(2)表第二行数字。Sheets(2)表中红字是符合删除条件的行。
    2、我编写的代码看是符合逻辑,运行时就出错。请老师帮助修改主。
最佳答案
2013-12-11 19:50

Private Sub CommandButton1_Click()
    Dim ar1, ar2, re, y%, x%, mm%
    Dim i As Integer, j As Integer, m As Integer, r As Integer
    ar1 = Range(Cells(1, 1), Cells(4, 15))
    ar2 = Sheets(2).Range(Sheets(2).Cells(1, 1), Sheets(2).Cells(8, 15))
    ReDim re(1 To UBound(ar2), 1 To 15)
    r = 0
    For mm = 1 To UBound(ar2)
        For x = 1 To UBound(ar1)
            m = 0
            For i = 1 To 15
                If ar1(x, i) = ar2(mm, i) And ar2(mm, i) <> "" Then
                    m = m + 1
                End If
            Next i
            If m > 5 Then Exit For
        Next x
        If x > UBound(ar1) Then
            r = r + 1
            For j = 1 To 15
                re(r, j) = ar2(mm, j)
            Next j
        End If
    Next mm
    If r > 0 Then Sheets(2).Cells(1, 18).Resize(r, 15) = re
End Sub

修改代码.zip

27.32 KB, 下载次数: 5

发表于 2013-12-11 19:39 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2013-12-11 19:48 | 显示全部楼层
excel-work 发表于 2013-12-11 19:39
顶起

这是什么意思
回复

使用道具 举报

发表于 2013-12-11 19:50 | 显示全部楼层    本楼为最佳答案   

Private Sub CommandButton1_Click()
    Dim ar1, ar2, re, y%, x%, mm%
    Dim i As Integer, j As Integer, m As Integer, r As Integer
    ar1 = Range(Cells(1, 1), Cells(4, 15))
    ar2 = Sheets(2).Range(Sheets(2).Cells(1, 1), Sheets(2).Cells(8, 15))
    ReDim re(1 To UBound(ar2), 1 To 15)
    r = 0
    For mm = 1 To UBound(ar2)
        For x = 1 To UBound(ar1)
            m = 0
            For i = 1 To 15
                If ar1(x, i) = ar2(mm, i) And ar2(mm, i) <> "" Then
                    m = m + 1
                End If
            Next i
            If m > 5 Then Exit For
        Next x
        If x > UBound(ar1) Then
            r = r + 1
            For j = 1 To 15
                re(r, j) = ar2(mm, j)
            Next j
        End If
    Next mm
    If r > 0 Then Sheets(2).Cells(1, 18).Resize(r, 15) = re
End Sub
回复

使用道具 举报

 楼主| 发表于 2013-12-11 20:06 | 显示全部楼层
zjdh 发表于 2013-12-11 19:50
Private Sub CommandButton1_Click()
    Dim ar1, ar2, re, y%, x%, mm%
    Dim i As Integer, j As  ...

老师你好:运行代码时,sheets(2)表中第四行有5个数字和sheets(2)表中第一行相同,也符合条件,却没有被删除。请修改主。谢谢
sheets(2)表中第四行如下:
1
3
5
7
9
10
11
回复

使用道具 举报

发表于 2013-12-11 20:48 | 显示全部楼层
我以为要6个呢!

If m > 5 Then Exit For
改为
If m > 4 Then Exit For
回复

使用道具 举报

 楼主| 发表于 2013-12-11 20:58 | 显示全部楼层
zjdh 发表于 2013-12-11 20:48
我以为要6个呢!

If m > 5 Then Exit For

还要麻烦你:代码中x > UBound(ar1)是什么意思? x是什么变量?
谢谢
If x > UBound(ar1) Then
             r = r + 1
             For j = 1 To 15
                 re(r, j) = ar2(mm, j)
             Next j
         End If
回复

使用道具 举报

发表于 2013-12-11 21:23 | 显示全部楼层
x 是上一个循环的变量,当循环结束时(未找到>4个相同的数据),则x > UBound(ar1)。

评分

参与人数 1 +3 收起 理由
ymq123 + 3

查看全部评分

回复

使用道具 举报

发表于 2013-12-11 22:14 | 显示全部楼层
excel-work 发表于 2013-12-11 19:39
顶起

帮你一起寻求帮助
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-19 07:29 , Processed in 0.412904 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表