在Excel VBA中,如何find一个子string,select下面的列的其余部分,然后将选定的区域移动到另一个工作簿?

更新:我意识到,A1有一个关键字,我正在寻找,我没有看到,并导致了问题出现。

我需要find一个单词 – “P / position”,“S / site”或“Residue”,然后将其下面的列中的所有内容复制到不同工作簿中的表单中的一列(“ExtractedColumns”,“Sheet1” )。 我能够用macros中的前两个代码块来完成所有这些工作 – 我正在寻找不同的单词并粘贴到不同的列上,但是这对于那些工作是有效的。 当我在另一张纸上运行下面的代码时,它工作。 但是,下面的代码从A2开始复制列A中的所有内容,但是它应该find的子string在E列中,所以它应该从E5和下面复制。 那么为什么从一个完全不同的列中select代码块呢? (“curr”是一个范围)

For Each curr In Range("A1:S10") If InStr(1, curr.Value, "residue") > 0 Or InStr(1, curr.Value, "Residue") > 0 Or InStr(curr.Value, "Position") > 0 Or InStr(curr.Value, "position") > 0 Or InStr(1, curr.Value, "Site") > 0 Or InStr(1, curr.Value, "site") > 0 Then Range(curr.Offset(1), Cells(Rows.Count, curr.Column).End(xlUp)).Copy Destination:=Workbooks("ExtractedColumns").Sheets("Sheet1").Range("G2") Exit For End If Set curr = curr.Offset(1) Next 

刚刚testing过,对我来说工作得很好。 你确定A1没有包含你正在search的任何string吗?

两件小事:如果你想inStr工作不区分大小写,你可以设置比较参数为vbTextCompare,例如

 InStr(1, curr.Value, "residue", vbTextCompare) 

其次,第六行是什么? for循环遍历范围内的所有单元格,为什么要手动将其更改为下一个单元格?