2016-06-21 87 views
2

我想在UDF函數中模擬內建「文本到字段」的結果。 我需要這樣做是因爲我的原始數據來自網絡查詢,我需要在單獨的頁面上使用結果並繪製這些結果。 對於繪圖,我需要缺少值來解析空單元格,因爲這是excel圖表顯示空缺值的唯一選項。excel VBA - 從函數返回可變長度數組

你不能這樣做與內建,因爲兩個限制;

1)它不能將解析的字段定位到另一個工作表上。

2)嘗試將數據值複製到目標工作表以解析出現故障,因爲text-to-field分析引用表達式而不是它引用的值。

3)我無法解析原始數據表,然後將解析的字段複製到目標工作表,因爲沒有表達式可以複製空單元格,它將轉換爲零值。 (畢竟,導致空單元格的表達式會自行刪除!)

因此,我需要一個DIY字段解析器,並且在任何情況下,使用公式都比我的整體需求更適合宏觀化內置函數(即使它會起作用)。

我的領域是這樣的:

calm 
    S 10 
    S 10 G 20 

而且我希望他們分析只是作爲一個文本到油田是,這將使文本的數字數字,字符串和失蹤字段(即較短的讀數)。

所以我使用了這段代碼;

Function Explode(texte As String, Optional ByVal delimiter As String = " ") _ 
      As String() 
' mimic the text-to-fields, 
' but allow inter-sheet references 
    Explode = Split(texte, delimiter) 
End Function 

但使用它,我必須預先定義的函數調用單元作爲數組,這是固定大小的一部分,我不知道怎麼有這個返回可變數目解析領域成一個固定大小的數組。我從上面的樣本數據要的是:

enter image description here

但我得到的卻是:

enter image description here

注意空單元格必須是空的 - 不只是看空(不是「 「字符串)。

編輯: 我懷疑我可能改爲建立這臺解析字段的值,並清除細胞的其餘失蹤領域(我總是最多四個領域都有),而不是返回他們,但我不是很熟練的VBA。例如,獲取兩個單元格引用的東西,一個用於源引用,另一個用於解析字段的目標列表。然後從函數中調用該函數,我可以將其嵌入到工作表中。基於副作用的編程...

+0

讓困難見你會怎麼做這行由行使用UDF,當一些線條比其他線條短:任何給定的線條本身都需要知道「假定」有多少個字段。幾乎需要傳入一個附加參數來確定輸出中應該有多少個值。 –

+0

你能提供一些樣本數據,或者更好的可下載測試存根嗎? –

+1

你不能從函數中返回Empty,所以恐怕你的UDF不會做你想做的事情。你可以使用'Application.Caller.Count'來簡單調整你的輸出數組的值, – Rory

回答

0

您可以使用Redim Preserve使您的函數返回固定的數組大小。

{=爆炸($ A $ 1,50, 「」)}

Function Explode(texte As String, ArraySize As Integer, Optional ByVal delimiter As String = " ") _ 
      As String() 
    Explode = Split(texte, delimiter) 
    ReDim Preserve Explode(ArraySize- 1) 
End Function