もくじ

taka



最新記事 by taka (全て見る)
- 『雑記』最近の私の話~ - 2019年9月26日
- 【動画】自作パソコン構成変更!ケースをNZXT H500に交換しました! - 2019年6月5日
- VBA 『Array関数』指定した要素で配列を作成する - 2019年5月23日
- 「動画」初完全ワイヤレスイヤホン『Jabra Elite Active 65t』 - 2019年5月17日
- VBA 日付で令和を簡単に判定してみよう - 2019年5月7日
どうも、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フォロー
Follow @taka_pc1027■YouTubeチャンネル登録
コメントを残す