2014-08-28 48 views
-1

当代码执行此行Set r = tbl.Find(what:= mx)时,如果单元格包含重复的零或任何数字,则它会重复返回相同的位置。例如,如果我有重复的零搜索:它给我的结果为V1B,V1B,V1B,而不是返回V1B,V2B和V2C。我认为只有重复这些值才能做到这一点。如何修改此代码?使用find方法搜索值

V1 V2 V3 

A 1 5 9

乙0 0 0

的C 7 8 4

子搜索() 昏暗TABL作为范围,HEADR作为范围,MX作为双人 昏暗r作为范围,colr As Range Dim p As Long

With Sheet1 

    For p = 1 To 9 
     Set tbl =.Range("B3:D5") 
     Set headr =.Range("B2:D2") 
     Set colr =.Range("A3:A5") 
     mx =.Cells(6 + p, 3) 
     Set r = tbl.Find(what:=mx) 
     v = Intersect(headr, r.EntireColumn).Value 
     v = v & " " & Intersect(colr, r.EntireRow).Value 
     .Cells(6 + p, 2) = v 
    Next p 
End with 

末次

+0

看一看的.FindNext方法 - 你会必须阻止它无限循环通过你的范围! – citizenkong 2014-08-28 13:06:44

+0

@Citizenkong:我在尝试.FindNext方法,你知道如何在这段代码中使用吗? – Pratzy 2014-08-28 13:08:24

+0

诀窍是,当你再次到达起始地址时,或者如果你正在改变事物,你需要停止“查找”,直到“Find”返回“Nothing”。 – citizenkong 2014-08-28 13:09:49

回答

0

这里找到细胞块中的所有零的典型方式(它会忽略空格!)

Sub ZeroFinder() 
    Dim Block As Range, Zero As Long, _ 
     r As Range, msg As String, st As String 
    Set Block = Range("D6:O32") 
    Zero = 0 
    Set r = Block.Find(What:=Zero, after:=Block(1)) 
    If r Is Nothing Then 
     MsgBox "no zeros" 
     Exit Sub 
    End If 
    msg = r.Address(0, 0) 
    st = msg 
    Do Until r Is Nothing 
     Set r = Block.FindNext(after:=r) 
     If r.Address(0, 0) = st Then Exit Do 
     msg = msg & vbCrLf & r.Address(0, 0) 
    Loop 
    MsgBox msg 
End Sub 
+0

第一个代码发生了什么事,代码执行这一行Set r = tbl.Find(what:= mx),如果cell包含重复的零或1。例如,如果A1包含0,则b1包含0并且c1包含0.它给出的结果为A1,A1,A1而不是A1,B1和C1。我认为它只有在值为1或0时才有效。 – Pratzy 2014-08-28 13:31:45