0

创建一个将cell.value在工作表 A 中获取(字符串)的宏,然后转到工作表 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 行。

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

比如说,该值是字符串“Iphone Charger”。然后,cells.find(what:=myvar (Basically 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

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

4

1 回答 1

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 找到与您为找到的第一个实例保存的地址相同的单元格。

有关此代码示例,请参阅此说明说明,以及可以在网络上找到的许多其他说明。

于 2013-07-30T16:49:50.550 回答