在范围+循环中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
什么也没有,那么下面这行不会被处理,如果它不是什么,那么这行就会被执行。