【问题标题】:extract textpattern from excel cell从excel单元格中提取文本模式
【发布时间】:2016-09-23 20:06:10
【问题描述】:

我有一个大约 500 行的 Excel 表格。一列 (D) 包含一个文本,在该文本的某处可能有一个 ISBN 编号,类似于“ISBN 123-456-67-8-90”。我想提取该 ISBN(将其从单元格中删除)并将其移动到同一行 (K) 中的不同单元格。

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

[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

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

【问题讨论】:

标签: excel excel-formula vba


【解决方案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。

【讨论】:

  • 我注意到您在 D 列中有来源。您可以用 D2 查找-替换 A2。
【解决方案2】:

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

要定义列中填充单元格的范围,请通过提供起始单元格来定义 Range object,然后从下往上查找结束单元格¹。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    相关资源
    最近更新 更多