使用VB(excel)基于文本string将单元格移动到另一个工作表

寻找任何指导来帮助写一个VB脚本

在Excel中,我们有一列包含列A中的文件名

“Y:\主文档\同种异体\ DP \ ABO \标签\ 100毫克\ 4.packaging \同种异体制表为100mg-DP-9-PP-moa- [ABO-PR-ANL-0685-ver4.0]。 pdf“”Y:\ master-documentation \ allo \ dp \ abo \ tab \ 100mg \ 4.packaging \ zz-archive \ test-form-00mg-dp-xxx-test- [test-file] -01.01.1900。 DOCX”

SHEETNAME =文件

如果string“zz-archive”未包含在单元格中,则要复制到sheetname = Current,否则移至Sheetname = Archive。

我们已经使用公式,但它会留下空行。

任何帮助非常感谢感谢加里

如果基于公式的解决scheme仍然是可能的,那么Current!A2中的这个数组公式仍然可行。

=IFERROR(INDEX(Files!$A$2:$A$99,MATCH(0, IF(LEN(Files!$A$2:$A$99),IF(ISERROR(SEARCH("zz-archive",Files!$A$2:$A$99)),COUNTIF(A$1:A1,Files!$A$2:$A$99),1),1),0)),"") 

它需要在A2中,因为非参与单元需要在它之上以避免循环引用。 作为一个数组公式,它需要Ctrl + Shift + Enter而不是简单的input。 一旦input正确,可以根据需要填写以获得所有可能的回报。

附录:要在存档!A2中使用相同的公式,请将ISERROR更改为ISNUMBER

这是一个VBA解决scheme,将过滤的数据复制到当前和存档工作表中的每一个。

 Sub categorize_filesnames() Dim ws As Worksheet, wsa As Worksheet, wsc As Worksheet Set ws = Sheets("Files") Set wsc = Sheets("Current") Set wsa = Sheets("Archive") wsa.Cells(1, 1).CurrentRegion.Offset(1, 0).ClearContents wsc.Cells(1, 1).CurrentRegion.Offset(1, 0).ClearContents With ws.Cells(1, 1).CurrentRegion .AutoFilter .AutoFilter Field:=1, Criteria1:="=*zz-archive*" .Offset(1, 0).Copy Destination:=wsa.Cells(2, 1) .AutoFilter Field:=1, Criteria1:="<>*zz-archive*" .Offset(1, 0).Copy Destination:=wsc.Cells(2, 1) .AutoFilter End With Set wsc = Nothing Set wsa = Nothing Set ws = Nothing End Sub