2013-08-01 542 views
7

我想要一個可以調用並傳遞單元格的excel函數。輸入:VBA空格拆分字符串

Firstname   Lastname  [email protected]  
Firstname  midname  Lastname  [email protected] 

中間的空格數是隨機的。輸出應該只是一個數組。數組可以有任何長度,因爲我不知道字符串是什麼樣的。輸出應該是:

Firstname, Lastname, [email protected]  
Firstname, midname, Lastname, [email protected] 

我會調用該函數從一個細胞像=MySplitFunction(A1),而應該把名字在A1,姓氏在B1和[email protected]在C1。我創建了一個新的模塊,並試圖下面的代碼:

Function MySplitFunction(s As String) As String() 
    MySplitFunction = Split(s, " ") 
End Function 

這給了我輸出

Firstname 

我如何得到它返回整個數組?是否有可能在一個單元格中寫入一個函數,將函數放在靠近它的單元格中?

編輯:在A1

  • 選擇B1

    enter image description here

  • 回答

    10
    • 輸入您輸入數據:D1範圍
    • 輸入公式=MySplitFunction(A1)
    • 按CTRL使它成爲一個數組公式+ SHIFT + ENTER而不只是ENTER。

    要刪除多個空格,你可以修改你這樣的代碼(不是超級效率,但工程):

    Function MySplitFunction(s As String) As String() 
        Dim temp As String 
    
        Do 
         temp = s 
         s = Replace(s, " ", " ") 'remove multiple white spaces 
        Loop Until temp = s 
    
        MySplitFunction = Split(Trim(s), " ") 'trim to remove starting/trailing space 
    End Function 
    
    +0

    這種有點奏效,但我沒有擺脫所有額外的空白。有任何想法嗎? – Goatcat

    +0

    我想我想用一個單一的空格替換所有多個空格,然後在其上運行Split(s,「」)。思考? – Goatcat

    +0

    @Goatcat看我的編輯。 – assylias

    5

    替代解決方案是:

    1. 使用正則表達式作爲第一一步刪除所有空格
    2. 根據單個空格剩餘步驟第一步拆分結果
    3. 此外,因爲您需要返回不同單元格中的文本元素,而不是附加函數參數將解決該問題。

    之所以提出這一建議功能:

    Public Function MySplitFunction(sMark As String, nTh As Integer) As String 
    
    On Error GoTo EH 
        'regexp declaration 
        Dim objRegExp As Object 
        Set objRegExp = CreateObject("vbscript.regexp") 
    
        Dim tmpTXT As String 
        Dim tmpArr As Variant 
        With objRegExp 
         .Global = True 
         .Pattern = "\s+" 
    
         tmpTXT = .Replace(sMark, " ") 
        End With 
    
        tmpArr = Split(tmpTXT, " ") 
        MySplitFunction = tmpArr(nTh - 1) 
    
    Exit Function 
    EH: 
        MySplitFunction = "" 
    
    End Function 
    

    ,這是屏幕截圖展示它是如何工作的:

    enter image description here

    重要!在Excel中調用函數時,使用逗號分隔參數(而不是由於我使用的本地國家版本的excel而提供的分號)。

    +0

    我完全按照B2中的方式輸入公式,但出現錯誤「您無法更改數組的一部分。」 – Goatcat

    +0

    在我的回答結尾處,我在最後一句中提到了逗號與分號? –

    +0

    檢查原始帖子的編輯。我不認爲我應該使用逗號。我通常總是使用分號。 – Goatcat