どうも!リョクちゃです。
プログラムを作っていて、ふとこんなことに悩まされることはありませんか?
入力値として受け取った文字列に複数の情報が含まれていて、
これをそれぞれ文字列内から取り出して処理をするといった
問題に直面することがないでしょうか。
そんな時に使えるのがMid関数になります。
今回は、Mid関数と呼ばれる関数について紹介をしていきます。
ちなみに前回はこちら
目次
Mid関数とは
- 第1引数に、抽出したい文字列を指定
- 第2引数に、開始位置(1から)を指定
- 第3引数に、抽出する文字列の長さを指定(※省略可能)
これらを指定することで第1引数の文字列から指定の位置の長さを持つ文字列を抽出し、
戻り値として返してくれる関数になります。
Mid関数の書き方
書き方としては、
と書くことで使うことができます。
実際に例に則って使い方を学んでいきましょう。
準備編:フォームの作成
今回は以下のフォームを作成します。
入力値から情報を3つ抽出し表示するプログラムを作成していきます。
実行環境
筆者の実行環境は、
- VisualStudio2019
- Windows 10 64bit
- .Net Framework 4.5.1
になります。
※ Windows7 8 8.1でも動作はできますが、画面デザインの表示が変わるかもしれません。
アプリケーションの目的
適当な入力値を入力し、ボタンを押すことでそれぞれ指定の位置から情報を抽出し、
プログラム編
それではプログラムを作成していきます。
まずは、フォームデザイン上でボタンコントロールをダブルクリックし、
コードビューにボタンイベントを作成します。
1 2 3 4 5 6 |
Public Class TestMid Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click End Sub End Class |
入力値ボックスに入力がされていれば処理をするようにします。
1 2 3 4 5 6 7 8 |
Public Class TestMid Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' 入力値があれば If Me.TextBox1.Text <> "" Then End Sub End Class |
ここからは抽出するための準備をしていきます。
考え方として、入力値に既に含まれる情報がわかっている場合、
今回は、入力される文字列には、
所在地コード、電話番号、氏名コードの順番に18桁の情報が含まれているとします。
それを踏まえて下準備をすると、以下のコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 |
Public Class TestMid Private Const PlaceCode As Integer = 3 ' 所在地コード Private Const TeleCode As Integer = 10 ' 電話番号 Private Const NameCode As Integer = 5 ' 氏名コード Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' 入力値があれば If Me.TextBox1.Text <> "" Then End If End Sub End Class |
定数として、各情報の桁数(文字列の長さ)を代入しています。
これら定数を元に入力値から各情報を抽出するコードを書いていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Public Class TestMid Private Const PlaceCode As Integer = 3 ' 所在地コード Private Const TeleCode As Integer = 10 ' 電話番号コード Private Const NameCode As Integer = 5 ' 氏名コード Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' 入力値があれば If Me.TextBox1.Text <> "" Then Dim place As String = Mid(TextBox1.Text, 1, PlaceCode) Dim tele As String = Mid(TextBox1.Text, PlaceCode + 1, TeleCode) Dim name As String = Mid(TextBox1.Text, PlaceCode + TeleCode + 1, NameCode) End If End Sub End Class |
各作成した変数(place,tele,name)に入力値から抽出した情報を代入しています。
各変数を例に説明していくと、
place変数には所在地コードを入力値から抽出して代入しています。
抽出方法としては、
とそれぞれ引数を渡すことで、
入力値の1文字目から長さ3の文字を抽出し代入しています。
tele変数には電話番号を入力値から抽出して代入しています。
これは、
とそれぞれ渡すことで、
入力値のPlaceCodeの長さ+1をした位置から長さ10の文字を抽出し代入しています。
+1をしているのは開始位置が0からではなく1からになるためにその分の調整になります。
+1をしないで抽出をしてしまうと、PlaceCodeの最後の文字を開始位置とし、
抽出してしまいます。
開始位置に関しては、あらかじめ位置がわかっている場合は、
定数として宣言した各桁数を順番に足し合わせて最後に+1
をしてあげることで正確に抽出をすることができます。
ただし、これは入力値に含まれる各情報が固定値の場合に有効です。
抽出した値は各テキストボックスに表示をします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Public Class TestMid Private Const PlaceCode As Integer = 3 ' 所在地コード Private Const TeleCode As Integer = 10 ' 電話番号コード Private Const NameCode As Integer = 5 ' 氏名コード Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' 入力値があれば If Me.TextBox1.Text <> "" Then Dim place As String = Mid(TextBox1.Text, 1, PlaceCode) Dim tele As String = Mid(TextBox1.Text, PlaceCode + 1, TeleCode) Dim name As String = Mid(TextBox1.Text, PlaceCode + TeleCode + 1, NameCode) ' テキストボックスへ出力 Me.TextBox2.Text = place Me.TextBox3.Text = tele Me.TextBox4.Text = name End If End Sub End Class |
これでコードは完成です。
実行編
先ほど作成したコードを実行していきます。
入力値欄に、「777991234567866574」と入力し、ボタンを押します。
ボタンを押すと、それぞれ入力値から抽出した情報を各テキストボックスに表示がされます。
まとめ
Mid関数について、使い方や抽出における考え方を例を交えて紹介していきました。
Mid関数はExcelでもサポートされているので、
知っている読者の方も多かったのではないでしょうか。
知っているけどどうやって使っていいのかわからない、
そんな読者の方の参考になればと思っております。
ぜひ、この記事をきっかけに使い方を学んでいただけたら嬉しいです。
最後までご覧いただきありがとうございます。
・こちらの書籍を参考にVB.Net勉強しています。