Excel精英培训网

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

[已解决]不知道怎么写这个条件

[复制链接]
发表于 2016-7-3 13:24 | 显示全部楼层 |阅读模式
我的想法是建立一个动态数组drr,用它来记录sheet1A列中有而sheet2A列中没有的项所在的行,然后倒序把那些行删除使sheet1A列与sheet2A列一致。但那个条件怎么也想不到怎么写。

Dim arr(), brr(), n%, c%, j%, k%
Dim drr() As Variant
arr = Sheet1.Range("A1").CurrentRegion
brr = Sheet2.Range("A1").CurrentRegion
m = UBound(arr, 1)
n = UBound(brr, 1)
For i = 2 To m
For j = 2 To n
If arr(i, 1) = brr(j, 1) Then
Exit For
Else:
c = c + 1
ReDim Preserve drr(1 To c)
drr(c) = i
End If
Next
Next

For k = c To 1 Step -1
Rows(drr(k)).Delete
Next


最佳答案
2016-7-3 14:04
本帖最后由 zjdh 于 2016-7-3 14:16 编辑

Sub TEST()
    Dim arr(), brr(), drr(), n%, c%, j%, k%
    arr = Sheet1.Range("A1").CurrentRegion
    brr = Sheet2.Range("A1").CurrentRegion
    For i = 2 To UBound(arr)
        For j = 2 To UBound(brr)
            If arr(i, 1) = brr(j, 1) Then Exit For
        Next
        If j > UBound(brr) Then
            c = c + 1
            ReDim Preserve drr(1 To c)
            drr(c) = i
        End If
    Next
    For k = c To 1 Step -1
        Rows(drr(k)).Delete
    Next
End Sub

比较数据小.rar

8.83 KB, 下载次数: 10

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-7-3 14:04 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zjdh 于 2016-7-3 14:16 编辑

Sub TEST()
    Dim arr(), brr(), drr(), n%, c%, j%, k%
    arr = Sheet1.Range("A1").CurrentRegion
    brr = Sheet2.Range("A1").CurrentRegion
    For i = 2 To UBound(arr)
        For j = 2 To UBound(brr)
            If arr(i, 1) = brr(j, 1) Then Exit For
        Next
        If j > UBound(brr) Then
            c = c + 1
            ReDim Preserve drr(1 To c)
            drr(c) = i
        End If
    Next
    For k = c To 1 Step -1
        Rows(drr(k)).Delete
    Next
End Sub
回复

使用道具 举报

 楼主| 发表于 2016-7-3 14:29 | 显示全部楼层
谢谢兄弟的无私帮助。直接删除不同的行比重新建立一个数组再把相同的项目装进去效率高太多了,而且又没有排序的问题。下面是重新建立数组的方法。
Sub test()
    Dim d As Object, arr, brr(), i%, j%, n%
    Set d = CreateObject("Scripting.Dictionary")
    arr = Sheet2.Range("a1").CurrentRegion
    n = UBound(arr)
    For i = 1 To UBound(arr)
        d(arr(i, 1)) = ""
    Next
    arr = Sheet1.Range("a1").CurrentRegion
    ReDim brr(1 To n, 1 To UBound(arr, 2))
    n = 0
    For i = 1 To UBound(arr)
        If d.exists(arr(i, 1)) Then
            n = n + 1
            For j = 1 To UBound(arr, 2)
                brr(n, j) = arr(i, j)
            Next
        End If
    Next
    Sheet1.Range("H1").Resize(n, j - 1) = brr
End Sub
回复

使用道具 举报

发表于 2016-7-3 17:12 | 显示全部楼层
songdg 发表于 2016-7-3 14:29
谢谢兄弟的无私帮助。直接删除不同的行比重新建立一个数组再把相同的项目装进去效率高太多了,而且又没有排 ...

这个我知道,我只是顺着你的思路帮你完善一下。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 22:25 , Processed in 0.594607 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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