2017-01-17 19 views
0

我試圖寫一個Excel函數,從長的字母數字字符串中提取任何N位數字。我在幾個地方(1,2)在線找到了一個示例,但我無法弄清楚。此Excel函數從字符串中提取N位數字。它是如何工作的?

例如,給定字符串0xabc_2014528888_abcde_30285_q!,函數應返回2014528888(假設N = 10)。

我發現了幾個地方(這裏N = 10)以下的Excel片段:

=LOOKUP(10^10,MID(A1,ROW(INDIRECT("1:"&LEN(A1)-9)),10)+0) 

但我不明白它是如何工作的。

  1. 微軟LOOKUP() function documentation說,第一個參數是LOOKUP()查找值...如何設置這個值到10^N返回N個字符?

  2. INDIRECT()函數好像它得到的參數1:21(在我的示例字符串中)。這是如何有效的單元格引用?如果我單獨將它輸入到單元格中,它不會計算任何明智的內容。

任何人都可以解釋這個函數是如何提取數字序列嗎?

回答

0

我會給這個鏡頭,雖然有些部分我不確定。

基本上,我們這裏有一個數組公式,它不是作爲一個數組輸入的 - 也就是說,當給定一個數值範圍時,它將爲每個可能的值執行它的函數,而不是一次一個的範圍。

INDIRECT("$1:$22")返回對所有行122的引用。然後ROW函數使用引用的行返回一個列表或數組(這是我不知道的部分 - 我不知道它是如何創建一個數組)的數字{1;2;3;4;5;6;7;8;9;...22}

的然後使用MID從源值返回所有10個字符的字符串,使用前面的線性數組數組作爲起點。 MID返回另一個數組,{"0xabc 2014";"xabc 20145";"abc 201452";..."e 30285 q!"}。然後這些字符串被強制執行+1的數學函數。這會強制數組中包含非數字字符的任何字符串返回#VALUE!錯誤,而數字字符串將其自身作爲值返回。我們得到這樣{#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;2014528888;#VALUE!;...}

數組最後,LOOKUP看起來通過陣列,並認爲比第一個參數較小的最大值 - 也就是說,唯一的結果,不返回#VALUE數組中!

我懷疑 - 但不能肯定地說 - 關鍵是使用LOOKUP而不是VLOOKUP或任何其他數據庫功能。 LOOKUP有兩種操作模式 - 矢量模式和數組模式。我懷疑,如果在數組模式下使用,它會強制任何數據饋入第二個參數成爲一個數組。