題 有沒有辦法在Excel公式中使用正則表達式(或類似的解決方案)?


我有一個傳感器,需要我做一些匹配,即說出一個債券清單,它們的代碼(名稱)和一些關於它們的數據。我想匹配他們的代號(名稱),我知道正則表達式如何使用正則表達式匹配它們(“[AZ] + \ d {2,4} - \ w + \ w +”),但我不熟悉如何使用他們不在VBA之外(是的,我更喜歡不使用VBA,那些會使用這個人的人不會使用VBA)。

我讀了這篇文章 微軟,所以我知道這一點 (有問題的陳述不是答案)是不正確的,但我從來沒有運氣實際上找到如何在Excel中實現正則表達式,尤其是公式(可能在 MATCH 只是也許)。

最後,我的一個例子(只是相關專欄)讓我的問題更具體,我想 返回單元格行 帶代碼:

JPMCC 2012-1 A1 

Prepay %
Loss %
Credit Support
ETC...

MLMTI 2014-6 B4

Prepay %
Loss %
Credit Support
ETC...

要返回的行:

JPMCC 2012-1 A1 
MLMTI 2014-6 B4

請注意,我在這個專欄中有很多這樣的債券,我需要逐一找到

另外如果您發現使用幫助列在這裡很有用,我對此持開放態度,現在我只想避免使用VBA。

如果需要,我會提供進一步的信息。

謝謝

UPDATE

在這種情況下,數據包括諸如“信用支持”,“累積損失%”,“預付%”等標題。有許多這樣的標題但是它的所有文本文本,數字都在不同的列中找到。


5
2017-10-06 13:40


起源


我想我們需要更多地了解您想要匹配的數據以及您將如何使用它,以及“數據”單元通常是什麼樣的。根據這些參數,匹配可以簡單到“此行包含庫存ID(TRUE / FALSE)”或“這是此行上的庫存ID”。 - Iszi
@Iszi我用數據更新了問題。 - sgp667
我沒有真正關注 - 我很難“閱讀”一個正則表達式。你能用文字解釋你的正則表達式設計嗎? - Mike Honey
有一個問題可以解決你的問題 正則表達式和Excel - Sun


答案:


Excel沒有正則表達式,但你肯定可以構建他們一次可以做一個公式的大部分內容。這裡有些例子:

提取第一個以空格分隔的單詞:

B1: =FIND(" ", A1)
C1: =LEFT(A1, B1 - 1)

檢查第一個單詞是否全是非小寫:

D1: =EXACT(UPPER(C1), C1)

提取第二個以空格分隔的單詞:

E1: =FIND(" ", A1, B1 + 1)
F1: =MID(A1, B1 + 1, E1 - B1 - 1)

如果可能,提取4位數年份:

G1: =LEFT(F1, 4) - 0

您可以根據需要創建盡可能多的這些提取和測試,以確信A1中的數據與自動收報機格式匹配,而不是標題格式,然後使用類似的內容僅在正確的情況下重現該單元格:

H1: IFERROR(IF((B1+E1+LEN(C1)+LEN(F1)+G1+D1)*0=1,"",A1),"")

spreadsheet showing helper columns


4
2017-10-06 14:52





我會嘗試高級過濾器 - 您可以使用通配符設置標準表,然後在其上指向過濾器操作。您可以在“數據功能區”的“排序和篩選”部分(Excel 2013中)中找到“高級”按鈕。

這裡有一個非常詳細的演練:

http://searchengineland.com/advanced-filters-excels-amazing-alternative-to-regex-143680


2
2017-10-07 00:04





接受的答案是好的。我將特別為RegEx添加一個範圍,您可以將範圍傳遞給VBA函數,然後使用RegEx評估其值。

  1. 添加對“Microsoft VBScript Regular Expressions 5.5”的引用

如何在Microsoft Excel中使用正則表達式(正則表達式)在單元格和循環中

  1. 創建一個取一個範圍的函數,然後使用RegEx對其進行評估。

從Excel公式調用函數 - 用戶不必知道VBA,只需要知道函數的名稱。

Excel中的輸出將實時更新,只要該函數採用範圍而不是字符串。 (Excel將知道範圍何時被修改,而如果它只是從單元格傳遞的字符串,則它將不知道。)

或者您也可以創建一個按鈕或其他調用VBA並進行過濾的東西。這將滿足用戶不需要知道VBA的要求。


2
2018-05-17 19:01