dポイントプレゼントキャンペーン実施中!

VBA Excelに関するしつもんです。

ddd = "23:53"

のような文字列変数があり、
これをハイフンで分割してLong型の配列に格納したいのですが
一度、
eee = Split(ddd,":")
としてから
dim fff() as long
redim fff(ubound(eee)

for i = 1 to ubound(eee)
fff(i) = eee(i)
next i

のようにして、別で用意した配列に格納しなおす必要がありますか?

直接Split関数でLong配列に入れる方法があれば教えてください。

A 回答 (1件)

そのような関数を自前で作成するのが最善の策かと思います。


以下は、Long型の配列にSplit結果を格納する関数:MySplitの実装例です。
Sub hyoujiは結果を表示する関数です。(参考用)
-----------------------------------------------------
Option Explicit
Public Sub sample()
Dim result1() As Long
Dim result2() As Long
Dim result3() As Long

result1 = MySplit("23:53:12345678901888", ":")
Call hyouji(result1)
result2 = MySplit("1:23:456.7", ":")
Call hyouji(result2)
result3 = MySplit("aaa", ":")
Call hyouji(result3)
End Sub

Public Function MySplit(str As String, dlm As String) As Long()
Dim i As Long
Dim strArray() As String
Dim vals() As Long
strArray = Split(str, dlm)
For i = 0 To UBound(strArray)
ReDim Preserve vals(i)
On Error GoTo MYSPLIT_ERR
vals(i) = Val(strArray(i))
Next
MySplit = vals
Exit Function
MYSPLIT_ERR:
MsgBox ("実行時エラー:" & Err.Number & " " & Err.Description & vbCr & "不正データ=[" & strArray(i) & "]")
vals(i) = 0
Resume Next
End Function
Public Sub hyouji(vals() As Long)
Debug.Print "-------------"
Dim i As Long
For i = 0 To UBound(vals)
Debug.Print vals(i)
Next
End Sub
--------------------------------------------------
以下、実行結果です。
-------------
23
53
0
-------------
1
23
457
-------------
0
ーーーーーーーーーーーーーー
尚、Long型に格納できないような数字(例では12345678901888)
等が、指定されると、エラーが発生しますので、その場合は、
メッセージBOXにエラー表示し、0を格納するようにしています。
もし、メッセージBOXの表示が不要であれば、その行をコメントアウトしてください。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています