2016-09-23 104 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 + 問題返回到您的工作表。