2016-09-23 134 views
1

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

到目前为止,我已经能够建立一个正则表达式为我串

[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 

灿有人指着我正确的方向?

+0

它的保证**是格式'ISBN ### - ### - ## - # - ##'? – BruceWayne

+0

这实际上几乎是[如何在Microsoft Excel中使用正则表达式(正则表达式)in-cell和loops]的副本(http://stackoverflow.com/questions/22542834/how-to-use-regular-expressions- regex-in-microsoft-excel-both-in-cell-and-loops) –

回答

1

如果您想提取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来完成此操作。

+0

我注意到你在D列有源代码。你可以找到 - 用A2代替A2。 – eshwar

+0

这工作对我来说,谢谢 –

0

您的代码(或缺少样例数据)不清楚您的数据是从第1行还是第2行开始(第1行包含列标题标签)。无论哪种情况,您当前的代码都会遍历D列中的每个单元格;总计1,048,576个细胞,这可能不是优选的。

要定义一列中填充的单元格的范围,请定义一个Range object,方法是提供起始单元格,然后从底部查找结束单元格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 

有何时在使用静态变量许多其他的例子。


¹更多在具有对Range.Cells性质限定Range object参见Is the . in .Range necessary when defined by .Cells

²用户定义函数(aka UDF)被放入标准模块代码表中。点击Alt键 + F11和VBE打开时,立即使用下拉菜单插入►模块Alt键 + 中号)。将功能代码粘贴到名为Book1 - Module1(Code)的新模块代码表中。点击Alt + 问题返回到您的工作表。