拆分单元值成数字数组
我有一个包含一些像“12_34_56”拆分单元值成数字数组
我使用的小区:
MyNumbers = Split(Cells(1, 1).Value, "_")
到的数值分成数组,但结果是一个字符串数组!
我知道我可以在数组的每个值上使用CInt,但不是以任何方式直接获取数值数组吗?
在此先感谢
据我知道这是不可能的,以一个类型的数组转换为另一种类型的单次调用,但如果你打算做在多个位置这个转换显而易见的选择是编写返回所需的结果的功能,如下图所示:
Public Function SplitIntegers(StringToSplit As String, Sep As String) As Variant
Dim arrStrings() As String
Dim arrIntegers() As Integer
Dim i As Long
On Error GoTo Err_SplitIntegers
arrStrings = Split(StringToSplit, Sep)
ReDim arrIntegers(LBound(arrStrings) To UBound(arrStrings))
For i = LBound(arrStrings) To UBound(arrStrings)
arrIntegers(i) = CInt(arrStrings(i))
Next i
SplitIntegers = arrIntegers
Exit Function
Err_SplitIntegers:
Select Case Err.Number
Case 13 'Type Mismatch Error: StringToSplit contains non-numeric substrings
On Error GoTo 0
Err.Raise 9114, "SplitIntegers", _
"SplitIntegers failed: substring '" & arrStrings(i) & "' of string '" & StringToSplit & "' is not numeric"
Case Else 'Unhandled error, return to calling code
Dim iErrNum As Integer, strErrDesc As String
iErrNum = Err.Number
strErrDesc = Err.Description
On Error GoTo 0
Err.Raise iErrNum, "SplitIntegers", strErrDesc
End Select
End Function
当你需要这个功能,你可以调用这个函数作为一个班轮,你会分流功能。
Dim arrMyInts() As Integer
arrMyInts = SplitIntegers(Cells(1,1).Value, "_")
错误处理! – 2014-12-05 11:13:23
@ vba4all真的值得处理函数中的错误吗?如果我运行(或可能运行)语句'SplitIntegers(“Bob_Alice_Fred_Emily”,“_”)'我完全期望类型不匹配错误,并且包含调用代码中的错误处理,我可以修改或以更好的上下文感觉回应无效输入。验证这种输入可能是正则表达式的工作。 – Aiken 2014-12-05 12:03:24
任何函数都可以处理可能由函数引起的错误。 Type-mismatch不是来自传入错误的类型参数,而是来自函数体内的Cint。如果你允许某人传递一个字符串,他们这样做 - 他们不会通过传递一个字符串知道他们做错了什么 - 一个简单的错误转到
这对我很好,非常容易设置!我将用单元格A1作为数字串的例子。
Dim strarray as Variant
Dim intarray as Variant
Dim x as Long
strarray = Split(Range("A1").Value, "_")
ReDim intarray(LBound(strarray) to UBound(strarray))
For x = LBound(strarray) To UBound(strarray)
intarray(x) = CInt(strarray(x))
Next x
请问直接把它拆分成一个'Integer'数组的目的是什么? – 2014-12-05 10:36:36
['Split()'function](http://msdn.microsoft.com/en-us/library/gg278528(v = office.14).aspx)总是返回一个基于字符串的数组。在VBA中没有直接的'.Cast'。你需要一个包装器来将基于String的数组转换为基于Integer的数组。 –
2014-12-05 10:39:12
1)只能避免在从数组中提取每个值时使用CInt。 2)所以在每个值上使用CInt是最简单的解决方案? – genespos 2014-12-05 10:45:41