2017-08-12 417 views
0

我需要在由逗號分隔的單元格中分隔一些數據。我知道這可能是文本列的Excel功能,但我需要它在VBA中,因爲這個過程必須是自動的。我創建了這個功能:VBA用於分隔逗號分隔單元格的函數

Function SepararDatos(splitVal As Variant) 
Dim totalVals As Long 

splitVal = Split(splitVal, ",") 
totalVals = UBound(splitVal) 
Range(Cells(ActiveCell.Row, ActiveCell.Column + 1), Cells(ActiveCell.Row, ActiveCell.Column + 1 + totalVals)).Value = splitVal 
End Function 

但我不知道它爲什麼不起作用。如果我將其更改爲sub,它的效果很好,但它不是我所需要的。有人能告訴我如何改變功能來工作。此外,子返回字符串,但我想返回數字。

+0

所以,你要進入一個細胞,因爲這一個公式,並有它的工作? –

+0

是的,這是可能的嗎? –

+0

是的,沒有,看到我的答案有三種方法來做你想做的事情,第三種不使用vb​​a,而是使用本地公式。 –

回答

3

用作公式的UDF不能影響另一個單元格的值。所以,你有兩種方法可以使用:

陣列輸入:

Function SepararDatos(splitval As String) 
Dim splitval2() As String 

splitval2 = Split(splitval, ",") 

SepararDatos = splitval2 
End Function 

然後突出顯示足夠的輸出細胞。與第一個是有源:

enter image description here

然後在式條型:

=--SepararDatos(A1) 

而代替的回車點擊Ctrl-Shift鍵輸入到陣列輸入公式。 Excel將把這個公式放在所有三個單元格中,周圍有{}。這些將被連接成一個數組。

--把它變成你就可以在你所希望的方式

enter image description here


方法二的格式,需要第二個標準號:

Function SepararDatos(splitval As String, i As Long) 
Dim splitval2() As String 

splitval2 = Split(splitval, ",") 

SepararDatos = splitval2(i - 1) 
End Function 

然後在第一您輸入的單元格:

=--SepararDatos($A$1,COLUMN(A:A)) 

並拖動。 --將字符串轉換爲數字。

enter image description here


第三種方法是使用本地公式:

=--TRIM(MID(SUBSTITUTE($A$1,",",REPT(" ",999)),(COLUMN(A:A)-1)*999+1,999)) 

並拖過:

enter image description here

+0

所有這些都非常完美,非常感謝。只有1個問題,我如何在第二種或第三種方法中有效地添加「IFERROR」。我試着把它放在第一位,但它不起作用。 –

+0

忘記它,我設法做到這一點。謝謝阿加安 –