• ベストアンサー

VBA split(文字列, ★) ★←複数デリミタ指定することできますか?

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

  • xespr
  • お礼率73% (61/83)

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

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

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

書いた後に気がついたことだけれども、パターンは、「\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
xespr
質問者

お礼

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

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

パターンをそのまま使わせていただくことにしました。 ただ、空白が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

関連するQ&A

  • マージ型文字列のデリミタ2文字以上のSplit関数のようなものは実現できますか?

    素人で間違っているかもしれませんが、String::Splitは wchar_tのように1文字だけしか使えないので、\r\nのような2文字以上のデリミタに対応しているperlのsplit関数みたいのを探しています。 以下のソースで※ここですの部分で、2文字以上の任意のデリミタでマージ型文字列を配列にしたいです。 .NETは覚えたてですが、Vista以降でも廃れることは無いのでしょうか? 覚えて無意味はきついので・・・ /* VC++2005でperlのようなsplit関数を実現したい 区切り文字は\r\n */ using namespace System; int main( array<String^>^ args ){ String^ str = nullptr; if (1 > args->Length ){ str = "太郎\r\n花子\\純一郎"; } else { str = args[0]; } // strマージ文字列をPerlのsplit関数のようなもので、以下のようなnamesを作成したい。 // $names = split /\r\n/ $str; <=※ここです。 array<String^> ^names = { "太郎", "花子", "純一郎" }; String^ name; for each ( name in names ) { Console::WriteLine("{0}", name); } return 0; }

  • 文字列をsplitするSQL文を教えて下さい

    SQLServer2000上で指定した文字で文字列をsplitような関数があれば教えて頂けますか? 例えば"12345.6789"という文字列を"."(ピリオド)を指定して、"12345"と"6789"という2つの文字列を取得したいと思っています。 Transact-SQLの関数リファレンスを見てみたのですが、適当なものが見つかりませんでした。 自作するしかないのでしょうか・・

  • splitしない文字列について

    split("\t",$moji) で$mojiを分割しているのですが、タブ区切りなのに分割しない文字列があります。 企業秘密な所もあり、問題の文字列そのままを報告できないのですが、分割をキャンセルするような文字コードってあるのでしょうか? その文字コードであやしい物は 「 」:スペース 「!」、「♪」 などが含まれています。 通常であれば10個に分割される文字列がまったく分割されなく分割数は1と出ます。もちろんタブ区切りになっています。 1つの文字列だけの事なのです。原因はまったく不明。よろしくお願いします。

    • ベストアンサー
    • PHP
  • split関数のデリミタに「"」を使用する方法

    split関数のデリミタに「"」を使う方法を教えてください。 SplitedData = Split(Data, """) だと当然エラーになってしまうのです。

  • 文字列をSplitを使って区切りたい。 ","

    "," で区切られた文字列をSplitを使って区切りたいのですが。 例. "abc","123d","fr44","1erg" Dim Arr_Koumoku as string() Dim delimiter as string delimiter = Chr(34) & Chr(44) & Chr(34) 'delimiter = """,""" "← これでも結果は同じだった Arr_Koumoku = Arr_Kaigyo(i).Split(delimiter) とやると。 Arr_Koumoku(0) =   Arr_Koumoku(1) = abc Arr_Koumoku(2) = , Arr_Koumoku(3) = 123d Arr_Koumoku(4) = , Arr_Koumoku(5) = fr44 Arr_Koumoku(6) = , ・・・・ と区切られてしまいます。 Arr_Koumoku(0) ="abc" Arr_Koumoku(1) ="123d" Arr_Koumoku(2) ="fr44" Arr_Koumoku(4) ="1erg" としたいのですが。アドバイスを頂けたら幸いです。 開発環境 WindowsXP SP2 Visual Studio 2005 Standard Edition SP1

  • splitでの文字列分割

    文字列中の「,」で分割をしたいのですが 「\,」では分割したくありません このような場合、どのような正規表現をかけばいいのでしょうか? <?php $str = "asd,fgh,qwge\,zxc"; $ary_ary = split("[^\],",$str); print_r($ary_ary); ?> ------結果------ Array ( [0] => as [1] => fg [2] => qwge\,zxc ) いろいろ考えてみましたが 上のようにうまくいきませんでした ご教示おねがいします

    • ベストアンサー
    • PHP
  • Excel97 VBA とVBSのsplit関数

    新しい職場で、Excel VBAでデータを取り込み、それを改行文字ごとにsplit関数で区切って配列に入れようとしました。 arr=split(文字列,vbcrlf) って感じでですね。しかし、なんとその職場のExcelのバージョンが97のため、VBAでsplit関数が使えず、この意図が実現できませんでした。そのため、ネットで調べてVBScriptのsplit関数を流用しようとしたのですが、「終了していない文字列型の定数です。」とエラーが出てしまいます。ソースは次のとおりなのですが、どう直せばいいでしょうか。改行文字で区切るのでなく、カンマなどで区切るのなら、上手く出来るのですが・・・。 Sub sample() Dim vs As Object Dim rtn As Variant Dim q As String Dim buf As String q = Chr$(34) 'ダブルクォーテーション Set vs = CreateObject("ScriptControl") vs.Language = "VBScript" 'Excel97のVBAにはsplit関数がないのでVBSからsplitを流用 buf = "1" & vbCrLf & "2" & vbCrLf & "3" '改行で区切った文字。実際は、もっと複雑な文字を取り込みます。 rtn = vs.Eval("split(" & q & buf & q & ", vbCrLf)") 'Excel97のVBAにはsplit関数がないのでVBSからsplitを流用 Debug.Print rtn(1) 'ここで「終了していない文字列型の定数です。」エラーが出る End Sub

  • ■str_split()で指定した文字数ではなく、指定した文字までを配列に入れることは可能ですか?

    いつもお世話になっています。 文字列を配列に入れようと思って、str_split()を調べました。 $str = "Hello Friend"; $arr = str_split($str, 3); print_r($arr); の結果は Array ( [0] => Hel [1] => lo [2] => Fri [3] => end ) になりますよね?これを $str = "今日はいい天気です。遠足に行きましょう。楽しかったですね。"; としたときに、「。」までを区切りとして配列に入れることは可能でしょうか? つまり、この後何かしらのことをして、 print_r($arr); をすると、以下のように出力されるようにしたいのです。 今日はいい天気です。 遠足に行きましょう。 楽しかったですね。 str_split()で指定した文字数ではなく、指定した文字までを配列に入れることは可能でしょうか?

    • ベストアンサー
    • PHP
  • 【VBA】 文字列の中から指定の文字列を取り出す

    VBAで文字列から指定の文字のn番目からn+1番目までの文字列を取り出すことは可能でしょうか? A1セルに下記の文字列があった場合、「1番目の半角スペースから2番目の半角スペースまでの文字列」を取り出したいのです。 5 53 00 8R この場合、53を取り出したいというわけです。 また、可能でしたら「最後の半角スペースから文字列の最後まで」を取り出す方法も教えていただけるとありがたいです。 この場合は8Rとなります。 InStr関数を使えばできるかもと思ったのですが、できそうなものが思い浮かびません。 どなたか教えていただけませんでしょうか。 よろしくお願いいたしますm(_ _)m

  • 文字列を指定桁数で分割して配列に入れたい。

    文字列を指定桁数で分割して配列に入れたい。 Splitは指定した文字毎に分割して配列に入れてくれますが、 これを指定した桁数で区切って配列に入れたいのですが、 どうすればいいでしょうか? 環境はVisual Studio 2005でVBを使っています。

専門家に質問してみよう