为ce​​lls.find函数创建动态循环

时间:2013-07-30 14:17:14

标签: excel vba excel-vba ms-office excel-2010

创建一个将在工作表A中取cell.value(字符串)的宏,然后转到工作表B,使用cells.find方法找到与该字符串匹配的单元格。

示例

SheetA.activecell.value = "Harry Potter"
set myvar = SheetA.activecell.value
sheetB.select
Cells.Find(What:=myvar, After:=ActiveCell, LookIn:=xlValues, _ 
    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
    MatchCase:=False).Select 

假设上述语法正确,将自动选择工作表A中包含字符串“Harry Potter”的单元格。

这就是我的问题所在。我想循环遍历整个列,为列中的每个单元格执行Cells.Find函数。

例如,SheetA.cells(3 ,1)包含“哈利波特”。在每次循环完成时使用偏移函数,包含要找到的值的单元格将偏移1行。

因此,在循环的下一次迭代中,SheetA中的Cells(4, 1)将包含要在cells.find函数中使用的值。

说,该值是字符串“Iphone Charger”。然后,cell.find(what:= myvar(基本上是myvar =“Iphone Charger”)将在工作表B中执行。

依次在工作表A中的列。

其次,我想在工作表A中复制某些值。

场景:

If "Harry Potter" is found in sheetA then
     Do an `activecell.offset` function to copy some values in the same row as the cell in sheet A and 
     Copy those values to worksheet B using Copy destination
Else if "Harry Potter" can be found then 
     Jump to the next cell value.
End if 

Keep looping until worksheet B hits an empty cell, that is cells(X , 1).value = ""

Then the whole macro ends

一直在杀死我的脑细胞来解决这个问题,如果你们这个论坛的任何人能帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

我建议在单元格上使用For Each构造作为主循环,并在工作表A中找到值。在伪代码中:

For each cell in column A of sheet A
    With the sheet B range to look in
        If cell value is "" 
            Exit the sub
        Else
            result = .find the cell value
            If the find is successful ("Not result is nothing") 
                Copy sheetA.cells(cell.row, <column of interest>) to sheet B
                Copy ... (cell.row,<another column of interest>) ...
            End the If
         End the if
    End the with 
Next cell

请注意,这仅查找工作表A的A列中每个值的一个实例。

正如Jaycal所说,你需要使用FindNext在第一个实例之后找到其他实例。

基本思想是找到第一个实例并保存其地址,然后使用带有FindNext的do循环来查找更多实例。 do循环继续执行,直到FindNext找到与您为找到的第一个实例保存的地址具有相同地址的单元格。

有关此问题的代码示例,请参阅可在网络上找到的许多其他内容中的this explananationthis one