VBA【Split関数】文字列を分割できる

ロゴ



The following two tabs change content below.
アバター

taka

あることがキッカケでVBAを独学で勉強しました、今ではブログを通してVBAでできることを解説しつつ、VBAや他の言語の勉強、ブログ運営の勉強をしています(^^♪

どうも、taka(@takabou63)です(^^♪

皆さんは、VBAを使用しているなときに文字を分割したいと思ったことはありませんか?

たとえば電話番号、「-」で区切って別のセルに保存したいと思ったことはありませんか?

今回はそんなときに便利な「指定した文字を起点に文字列を区切る【Split関数】をご紹介します!(^^)!

VBAのSplit関数とは?

VBAのSplit関数は上記でお話しした通り、指定した文字を起点に文字を分割することができます(^^)

少し癖のある関数だと思いますが、定型文を分割したり使いこなせればとても便利な関数ですので個人的には、便利な関数だと思っております!

Split関数の書式

Split関数の書式は以下の通りです。

Split(対象文字列, 区切文字,配列の要素数,文字列判定の設定)
引数名説明
対象文字列区切りたい対象文字列です。【A:B:C:D】を【:】で区切りたい場合はこの部分に【A:B:C:D】を指定してください。
区切文字※①上の説明でいうと【:】で区切りたいのでここには【:】を入力します。
配列の要素数※①返す配列の要素数を指定。つまりどこまで区切るのかを指定すると考えてください。
sp = Split(“A:B:C:D”, “:”, 3) このように指定した場合は【sp(2)】の値は【C:D】が返されます。
 文字列判定の設定※① 文字列を比較するモードを指定します。詳細は下記にて名説明

※①省略可能です
※②【区切文字】を省略したときは半角スペース が指定されます。
※③指定した【区切文字】が見つからないときは要素数 0 の配列が返ります。

【文字列判定の設定】については下記の表のようになります。

数値説明
0 テキストモードで比較します。大文字と小文字の区別をしません
 1 バイナリモードで比較をします
 2 Microsoft Accessでのみ使用できます

Split関数のサンプルコード

Split関数を使用して簡単なコードを作成しました、参考程度にお使いください(。-∀-)

下記には定型文を区切ることができるフォームと解説も記述しておりますのでご覧ください(^.^)

Sub sample()

Dim msg As Variant
Dim sp As Variant
Dim i As Long

msg = "No.1,山田太郎,1999/01/01,千葉県千葉市出身"

sp = Split(msg, ",")

'-----------各要素の中身------------
' sp (0) 'No.1
' sp (1) '山田太郎
' sp (2) '1999/1/1
' sp (3) '千葉県千葉市出身
'----------------------------------

 For i = 0 To UBound(sp) 'セルA列にそれぞれの要素を書き込む

 Cells(i + 1, 1).Value = sp(i)

 Next i

End Sub

Split関数を使用して定型文の文字の分割をするコード

今回はユーザーフォーム上にTextboxを4つ配置し、Textbox1〜3が項目別、Textbox4が入力用として設定、Textbox4に定型文を貼り付けるとそれぞれの項目別に文字列を分割する。というコードです(^_-)-☆

詳しくはサンプルファイルをご覧ください(^^♪

Private Sub TextBox4_Change(
Dim a As Variant
Dim b As Long
Dim odai As String
Dim odai1 As String
Dim odai2 As String
Dim odai3 As String

odai = Replace(TextBox4.Value, vbCrLf, "")
odai1 = Replace(odai, "お名前", "")
odai2 = Replace(odai1, "電話番号", "")
odai3 = Replace(odai2, "メールアドレス", "")

  For b = 1 To 3
 a = Split(odai3, ":")
  Controls("TextBox" & b).Value = a(b)
  
 Next b

    
End Sub

サンプルコードの解説

上記のコードの解説をしていきます(^^)/

今回はReplace関数を使用します、この関数は指定した内容を置き換えることができる関数です。

Replace(①.置き換える文字列,②.①の中で置き換える文字 ,③ .置き換える文字)

つまりコード上の「odai = Replace(TextBox4.Value, vbCrLf, “”)」というのは、「odai=TextBox4の内容のvbCrLf(改行)を””空白にしなさい。」という意味になります( ..)φメモメモ

なので処理を実行後の変数「odai」は改行が消され、【お名前:山田太郎電話番号:000-0000-0000メールアドレス:*****@***.**.jp】という値に変化しました(^^♪

続いてこのコード3行は

odai1 = Replace(odai, "お名前", "")
odai2 = Replace(odai1, "電話番号", "")
odai3 = Replace(odai2, "メールアドレス", "")

これは変数「odai」から、お名前・電話番号・メールアドレス、を空白にしなさい。というコードになります。

この処理を繰り返した結果、odai3 の内容は

【:山田太郎:000-0000-0000:*****@***.**.jp】になり。項目ごとに【:】で区切られてデータが完成するわけです(^^♪。

最後にこれを【:】ごとに区切っていけば、項目ごとに文字の分割の完成です。

For b = 1 To 3
a = Split(odai3, ":")
Controls("TextBox" &; b).Value = a(b)
Next b

文字を分割するのは下記のコードの部分です。

a = Split(odai3, ":")

Split関数は指定した文字を起点に文字を分割して返してくれる関数です。

今回の指定文字は今回は【:】です。なので下記「a」値はこのようになっています・

【                         a(0)

山田太郎                      a(1)

000-0000-0000       a(2)

*****@***.**.jp       a(3) 】

Split関数が返す配列の要素は0から始まります。なので今回の定型文は山田太郎の前に【:】があったので、a(0)は空欄、山田太郎  はa(1)に入ってきます。

そして変数の数字とTextBoxのオブジェクトの数字が同じなら

Controls("TextBox" &; b).Value = a(b)

このように前にご紹介したTextBoxを変数で処理する方法で処理をしたほうが簡単に処理ができます(^^)/

サンプルファイル

最後に今回のコードを書くにあたって作ったサンプルファイルがあるのでUPします!

サンプルファイルのコードにはTextBox5.Value = odai3というコードがありますが、これはodai3の状態を示すためのものなので無視をしていただいて構いません(^^)/

フォロー・チャンネル登録お願いします

VBA以外についてのブログはこちら↓

https://yb-log.com/

■Twitterフォロー

■YouTubeチャンネル登録

ファイルやコードの利用、WEBサイトの利用について

サンプルコードなどは当サイトの免責事項をよくお読みになってからお使いください。

Sponsored Link

 

WordPressでブログを始めるなら

WordPress簡単インストール&安心の安定性

レンタルサーバー Xserver

ロゴ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です