从Excel单元格中提取textpattern

我有一个大约500行的Excel表。 一列(D)包含一个文本,并在该文本中的某个地方可能有一个ISBN号码,看起来像这样的“国际标准书号123-456-67-8-90”。 我想提取该ISBN(将其从单元格中移除)并将其移到同一行(K)中的不同单元格中。

到目前为止,我已经能够为我的stringbuild立一个正则expression式

[ISBN]+ [0-9]+-[0-9]+-[0-9]+-[0-9]+-[0-9]+ 

而且我想我也有一个与我的细胞相匹配的外部机制的概念:

 Sub MoveISBN() Dim myrange, cell As Range Set myrange = ActiveSheet.Range("D:D", Range("D:D").End(xlDown)) For Each cell In myrange If *** HERE GOES MY REGEX SOMEHOW *** Then *** HERE THE FOUND ISBN IS REMOVED FROM THE CURRENT CELL AND MOVED TO COL K *** End If Next cell 

有人能指出我正确的方向吗?

如果您想提取ISBN号码,我有一个准备好的公式。

 =LEFT(RIGHT(SUBSTITUTE(A2,"ISBN ","|"),LEN(SUBSTITUTE(A2,"ISBN ","|"))-FIND("|",SUBSTITUTE(A2,"ISBN ","|"))),IFERROR(FIND(" ",RIGHT(SUBSTITUTE(A2,"ISBN ","|"),LEN(SUBSTITUTE(A2,"ISBN ","|"))-FIND("|",SUBSTITUTE(A2,"ISBN ","|")))),LEN(RIGHT(SUBSTITUTE(A2,"ISBN ","|"),LEN(SUBSTITUTE(A2,"ISBN ","|"))-FIND("|",SUBSTITUTE(A2,"ISBN ","|")))))) 

这假定源单元格是A2和ISBN后面是一个“空格”或在单元格的末尾。

这只会读取ISBN。 如果要从源单元格中删除ISBN,则只能使用VBA来完成。

您的代码(或缺less示例数据)不清楚您的数据是从第1行还是第2行开始(第1行包含列标题标签)。 在任何一种情况下,你当前的代码都会遍历D列中的每个单元格; 总共有1,048,576个细胞,这可能不是可取的。

要在列中定义填充单元格的范围 ,可以通过提供起始单元格来定义一个Range对象 ,然后从下往上看结束单元格1。

 Dim myrange with worksheets("Sheet1") '<~~ know what worksheet you are on!!! 'your current method Set myrange = ActiveSheet.Range("D:D", Range("D:D").End(xlDown)) debug.print myrange.address(0,0) '<~~ results in D:D, the entire column 'with data in D2 to D99 use this alternate Set myrange = .Range(.cells(2, "D"), .cells(.rows.count, "D").end(xlup)) debug.print myrange.address(0,0) '<~~ results in D2:D99, only the populated cells end with 

在excel或excel-vba中还有很多其他的例子。


¹ 请参阅。 在.Range中定义的时候 , 必须使用.Cells来定义一个Range.Cells属性。

² 用户自定义函数(aka UDF)被放入标准的模块代码表中。 点击Alt + F11 ,当VBE打开时,立即使用下拉菜单来插入►模块Alt + IM )。 将function代码粘贴到名为Book1 – Module1(Code)的新模块代码表中。 点击Alt + Q返回到您的工作表。