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

VBAのsplit()関数ですが、
デリミタは1つしか指定できないのでしょうか?
例えば、
------------------
2005-5/23 19'02"40
------------------
のような文字列を Perlの様に簡単に分割することは無理でしょうか?
Array = split(文字列, /[ :\/\'\"-]/)

A 回答 (3件)

split関数では、デリミタにパターンを指定することはできないと思います。


質問者がやりたいことは、要は数字の部分の取り出しだと思いますので、"VBScript.RegExp"オブジェクトを使って数字部分をマッチさせて取り出すことができます。
サンプル
Dim objRegExp, objMatches, x
Dim str
str = "2005-5/23 19'02""40"
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Pattern = "(\d+)"
objRegExp.Global = True
Set objMatches = objRegExp.Execute(str)
For Each x In objMatches
MsgBox x
Next
    • good
    • 0

書いた後に気がついたことだけれども、パターンは、「\D」ですね。



>Array = split(文字列, /[ :\/\'\"-]/)
それに、BregExp を使えばよいのではないでしょうか?

http://www.hi-ho.ne.jp/babaq/bregexp.html

サンプル:
'<標準モジュール>
Option Explicit
Private Declare Function Split Lib "BRegExp" _
   (szRegstr As String, szTarget As String, limit As Long) As Variant

Sub test2()
Dim myData As String
Dim myArray As Variant
 myData = "2005-5/23 19'02""40"
 myArray = Split("/\D+/", myData, 0)
End Sub

参考URL:http://www.hi-ho.ne.jp/babaq/bregexp.html
    • good
    • 0
この回答へのお礼

Bregexp.dll で正規表現使えるようになりました。
ありがとうございました。

お礼日時:2005/07/10 16:11

パターンをそのまま使わせていただくことにしました。


ただ、空白が2個以上入ることを考えると、以下のパターンのほうがよいかと考えました。正規表現を使わなくてもできるでしょうけれども、やはり、こちらの方が短くで済みます。

Option Explicit
Sub test()
Dim objRe As Object
Dim Matches As Object
Dim Match As Object
Dim myData As String
Dim myRepData As String
Dim myArray As Variant
Set objRe = CreateObject("VBScript.RegExp")
myData = "2005-5/23 19'02""40"
With objRe
   .Pattern = "[\s:\/\'\""-]+" 'パターン
   .Global = True
  Set Matches = .Execute(myData)
  For Each Match In Matches
    myRepData = .Replace(myData, ",")
  Next Match
 myArray = Split(myRepData, ",")
End With
 Set objRe = Nothing
End Sub
    • good
    • 0

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