2017-08-12 313 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

忘记它,我设法做到这一点。谢谢阿加安 –