在范围+循环中find一个值

我需要我的macros来查看我范围内的一个单元格,在不同的WS中find这个值,并将值粘贴到我正在查找的值(我的原始WS)旁边。 一次又一次地做到这个范围内的值。

现在这一切都可以正常工作,但是由于某种原因,这个值被卡在第一个search上,并且不会在原始范围内寻找其他值。 这里是我的代码,图片应该帮助。

Sub Macro1() 

“现在我要去匹配”UDD“到”S / O“

 Worksheets("Sheet1").Activate Range("c17").Select Dim Searchkey As Range, cell As Range Set Searchkey = Range("c17:c160") For Each cell In Searchkey Sheets("data").Activate Cells.Find(What:=Searchkey, After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, SearchFormat:=False).Activate ActiveCell.Offset(0, -1).Range("A1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Activate ActiveCell.Offset(0, 1).Range("A1").Select ActiveSheet.Paste ActiveCell.Offset(1, -1).Range("A1").Select Selection.Copy Next cell 

结束小组

为什么我的macros卡在“84225”,而不是循环到其他S / O?

谢谢 在这里输入图像说明

 Sub mac1() Worksheets("Sheet1").Activate Range("c17").Select Dim srch As Range, cell As Variant Set srch = Range("c17:c160") For Each cell In srch Sheets("data").Activate Cells.Find(What:=cell, LookIn:=xlValues, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ , SearchFormat:=False).Activate ActiveCell.Offset(0, -1).Range("A1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Activate ActiveCell.Offset(0, 1).Range("A1").Select ActiveSheet.Paste ActiveCell.Offset(1, -1).Range("A1").Select Selection.Copy Next cell 

结束小组

这是工作! 谢谢你们

在每个循环中,您都在searchSearchKey的整个范围,而不仅仅是Cell所以我猜测它始终使用SearchKey中的第一个单元格作为search条件。

你也在search公式而不是价值观,并寻找可能返回不正确的结果部分匹配(部分匹配20将返回查找20,201,11120001等)。

不符合您的工作表名称和使用激活可能没有什么帮助。

试试这个代码:

 Public Sub Test() Dim SrcSht As Worksheet, TgtSht As Worksheet Dim SearchKey As Range, Cell As Range Dim FoundValue As Range With ThisWorkbook Set SrcSht = .Worksheets("Sheet1") Set TgtSht = .Worksheets("Data") End With Set SearchKey = SrcSht.Range("C17:C21") For Each Cell In SearchKey 'Search column 3 (C) for your the value Set FoundValue = TgtSht.Columns(3).Find(What:=Cell, _ After:=TgtSht.Columns(3).Cells(1, 1), _ LookIn:=xlValues, _ LookAt:=xlWhole, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext) 'Only proceed if value found, otherwise an error will occur. If Not FoundValue Is Nothing Then Cell.Offset(, 1) = FoundValue.Offset(, 1) End If Next Cell End Sub 

编辑:
要testing代码,将光标放在过程中,然后按F8依次处理每行。 FoundValue每次执行时都应该包含一个值。

要检查这个hover你的光标在variables上看到它的值:

在这里输入图像说明

以黄色突出显示的行是将要执行的下一行。 如果FoundValue什么也没有,那么下面这行不会被处理,如果它不是什么,那么这行就会被执行。