文字列関数(関数編) |
01 文字数を調べる 02 文字を取り出す 03 大文字/小文字の変換を行う 04 文字列の変換を行う 05 文字列コードを操作する 06 文字列を数値に変換する 07 数値を文字列に変換する 08 スペースを削除する 09 文字列の置換 10 データを比較する 11 文字を検索する 12 String 関数
【書式】 Len(文字列式)
Len関数は指定した文字列式に含まれる文字数を返します。
【サンプルコード】
Sub example_len() Dim str As String str = "accessVBA講座" MsgBox "Len: " & Len(str) ’「11」が表示されます End Sub
Mid関数は文字列から指定した位置から指定した文字数分の文字列を返します。Right関数は文字列の右端から指定した文字数分の文字列を返します。Left関数は文字列の左端から指定した文字数分の文字列を返します。
【書式】Mid(文字列式,抽出開始位置,抽出文字数) Right(文字列式,抽出文字数) Left(文字列式,抽出文字数) 文字列式 :取り出す元になる文字列を変数などで指定します。 Null値が含まれる場合はNull値を返します。 抽出開始位置:文字列の先頭文字を「1」としてどのこから文字列を取り出すかを数値で設定。 総文字数を超える数値を設定した場合は,長さ0の文字列(””)を返します。 抽出文字数 :取り出す文字数を設定。総文字数より大きい数を設定した場合は,抽出開始位 置以降の全文字が返されます。 Mid関数でこの引数を省略した場合や抽出開始以降の文字数より大きい値を指定 した場合は,抽出開始位置以降の全文字列が返えされます。
【サンプルコード】
Sub mojiretu() Dim str As String str = "accessVBA講座" MsgBox Mid(str, 3, 7) '「cessVBA」と表示されます
MsgBox Right(str, 3) '「A講座」と表示されます MsgBox Left(str, 3) '「acc」と表示されます End Sub
Ucase関数はアルファベットの小文字を大文字に,Lcase関数はアルファベットの大文字を小文字に変換します。
【書式】 Ucase(文字列式) Lcase(文字列式) 文字列式:変換する文字列です。Null値が含まれる場合はNull値を返します。
【サンプルコード】
Sub mojiretu() Dim str As String str = "AccessVBA講座" MsgBox UCase(str) ’「ACCESSVBA講座」と表示されます MsgBox LCase(str) ’「accessvba講座」と表示されます End Sub
StrConv関数を利用して,設定した文字列をいろいろな形式に変換できます。
【書式】 StrConv(文字列式,変換形式) 文字列式:変換する文字列です。 変換形式:実行する変換の種類の合計値として設定。
定数 値 内容 vbUpperCase 1 大文字に変換 vbLowerCase 2 小文字に変換 vbProperCase 3 各単語の先頭の文字を大文字に変換 vbWide 4 半角文字を全角文字に変換 vbNarrow 8 全角文字を半角文字に変換 vbKatakana 16 ひらがなをカタカナに変換 vbHiragana 32 カタカナをひらがなに変換 vbUnicode 64 システム既定のコードページを使って文字列をUnicodeに変換 vbFromUnicode 128 文字列をUnicodeからシステム既定のコードページに変換
【サンプルコード】
Sub mojiretu3() Dim str As String str = "yamada Tarou / ヤマダ たろう" MsgBox "大文字変換:" & StrConv(str, vbUpperCase) MsgBox "大文字+カタカナ変換:" & StrConv(str, vbUpperCase + vbKatakana) MsgBox "小文字+ひらがな変換:" & StrConv(str, 34) End Sub
Asc関数,Chr関数を利用して,文字コード(ASSCIIコード)の変換を行うことができます。ASCIIコードの文字コード(0〜255)にはスペースや各種記号(+,!,&,*など)が対応しています。例えば”A”〜”Z”には65〜90のASCIIコードが対応しています。
【書式】 Asc(文字) Chr(文字コード) 文字:ASCIIコードに変換する文字 文字コード:文字に変換するASCIIコード
【サンプルコード】
Sub 文字コード() Dim i As Integer 'A〜zを表示 For i = 65 To 90 MsgBox Chr(i)
Next 'メッセージを改行して表示 MsgBox "この文章をここで改行しますよ。" & Chr(13) & Chr(10) & "改行しました。" End Sub
次の例はイミディエイトウインドウに@AB・・・・Sを表示します。
Sub Exsample() Dim i As Integer For i = 1 To 20 Debug.Print Chr(Asc("@") + i - 1) Next i End Sub
Val関数は数字(String型)を適当な数値型のデータに変換します。ただし、数値に変換できない文字を読み込んだ時点で変換を中止します。
【書式】 Val(文字列式) 文字列式:数値に変換可能な任意の文字列式
【サンプルコード】
Sub VAL関数() Dim A As String Dim B As String A = "123": B = "15才" MsgBox Val(A) + Val(B) ’138(123+35)が表示されます。 MsgBox A + B '12315才が表示されます。 End Sub
【書式】 Str(数値) 数値:文字列に変換する数値
【サンプルコード】
Sub VAL関数() Dim A As Integer Dim B As Integer A = 123: B = 12 MsgBox A + B '135が表示されます MsgBox str(A) + str(B) '12312が表示されます。(文字列の連結) MsgBox str(A) + str(B) End Sub
LTrim関数,RTrim関数,Trim関数を利用して文字列の中からスペースを取り除くことができます。引数に設定した文字式から,全角,半角にかかわらず,LTrim関数は先頭のスペースを,RTrim関数は末尾のスペースを,Trim関数は先頭と末尾のスペースをを取り除きます。
【書式】 LTrim(文字列式) RTrim(文字列式) Trim(文字列式) 文字列式:スペースを取り除く文字列式
Replace関数は指定文字列を別の文字列に置換します。
【書式】 Replace(文字列式,被置換文字列,置換文字列[,検索開始位置[, 置換回数[,比較種別]]]) 文字列式:置換する文字列を含む文字列式 被置換文字列:置換される文字列 置換文字列:置換する文字列 検索開始位置:文字列式内の検索開始位置。省略した場合は先頭位置から検索されます。 置換回数:置換する文字列数。この引数を省略した場合はすべての候補が置換されます。 比較種別:文字式を比較するときに使用する文字列比較モード。規定値は-1です。
■文字列比較モード 定数 値 内容 vbUseCompareOption -1 OptionCompareステートメントの設定を使用して比較 vbBinaryCompare 0 バイナリモードで比較(大文字/小文字 半角/全角 ひらがな/カタカナを区別して比較 vbTextCompare 1 テキストモードで比較(大文字/小文字 半角/全角 ひらがな/カタカナを区別されず五十音で比較 vbDatabaseCompare 2 Accessのデータベースの設定を使用して比較
【サンプルコード】 (全角・半角のスペースを半角のスペースで検索して,””で置き換える)
Sub Space_DEL() Dim Str As String Str = "Access VBA 講座" MsgBox "比較モードがvbUserCompareOption: " & Replace(Str, " ", "") MsgBox "比較モードがvbBainaryCompare: " & Replace(Str, " ", "", , , 0) MsgBox "比較モードがvbTextCompare: " & Replace(Str, " ", "", , , 1) MsgBox "比較モードがvbDarabaseCompare: " & Replace(Str, " ", "", , , 2) End Sub
StrComp関数は引数に設定した2つの文字列を比較するときに使用します。
【書式】 StrComp(比較文字列,被比較文字列[,比較方法]) 比較文字列:比較する文字列 被比較文字列:比較される文字列 比較方法:Replace関数の比較方法と同じ。
■StrComp関数の戻り値 内容 値 比較文字列は被比較文字列未満の場合 -1 比較文字列と被比較文字列が等しい場合 0 比較文字列は被比較文字列を超える場合 1 比較文字列か被比較文字列がNull値の場合 Null値
InStr関数は,検索対象として設定した文字列の中に,検索条件とした文字列が含まれているかどうかを調べるときに使用します。
【書式】 InStr([検索開始位置,]検索対象文字列,検索条件文字列[,検索方法]) 検索開始位置:文字列式内の検索開始位置。省略した場合は先頭位置から検索されます。 ただし,検索方法を設定した場合は指定しなければなりません。 検索対象文字列:検索対象となる文字列。 検索条件文字列:検索条件となる文字列。 検索方法:文字列の検索方法を指定。設定値は,StrComp関数と同じ。
■InStr関数の戻り値 内容 値 検索文字が見つかった場合 その文字位置 検索対象文字列が長さ0の文字列(””)のとき 0 検索対象文字列または検索条件文字列がNUll値のとき NUll値 検索条件文字列が長さ0の文字列(””)のとき 検索開始位置 検索文字が見つからないとき 0 検索開始位置の値が検索対象文字列の文字数を超えるとき 0
【サンプルコード1】 (全角のスペースを検索して見つかればスペースを削除します)
Sub 検索() Dim Str As String Dim ret As Variant Str = "山田 太郎" ret = InStr(1, Str, " ", vbBinaryCompare) If ret <> 0 And IsNull(ret) = False Then MsgBox Left(Str, ret - 1) & Mid(Str, ret + 1) Else MsgBox "検索できませんでした" End If End Sub
【サンプルコード2】次のコードはパス名からファイル名を取り出す関数の例です。
Function Get_FilleName(Temp As String) Dim l As Integer Dim j As Integer Dim RT As Variant Dim F_Name As String l = Len(Temp) For j = l To 1 Step -1 RT = InStr(j, Temp, "\", vbBinaryCompare) If RT <> 0 And IsNull(RT) = False Then F_Name = Mid(Temp, RT + 1, l - RT) Exit For End If Next j Get_FilleName = F_Name End Function Sub Test() Debug.Print Get_FilleName("D:\Access2003\本科生管理\本科生管理2005") End Sub
InStrRev 関数はある文字列 の中から指定された文字列 を最後の文字位置から検索を開始し、最初に見つかった文字位置 (先頭からその位置までの文字数) を返す文字列処理関数です。
【書式】InstrRev(検索対象文字列, 検索条件文字列[, 検索開始位置[, 検索方法]])
InstrRev 関数の構文は、次の名前付き引数から構成されます。
指定項目 説明 検索対象文字列 検索先の文字列式を指定。 検索条件文字列 検索する文字列式を指定。 検索開始位置 省略可能。各検索の開始位置を設定する数式を指定します。引数を省略すると 、最後の文字位置から検索を開始します。 検索方法 省略可能。文字列比較のモードを表す数値を指定します。引数 を省略すると、バイナリ モードで比較。
検索方法 の設定値 定数 値 説明 vbUseCompareOption -1 Option Compare ステートメントの設定を使用して比較 vbBinaryCompare 0 バイナリ モードで比較 vbTextCompare 1 テキスト モードで比較 VbDatabaseCompare 2 データベースに格納されている設定に基づいて比較
InStrRev関数の戻り値 条件 InStrRev の戻り値 検索対象文字列 が zero-lengthのとき 0 検索対象文字列 が Null 値のとき Null 値 検索対象文字列 が zero-lengthのとき Start 検索条件文字列 が Null 値のとき Null 値 検索条件文字列 が見つからないとき 0 検索条件文字列 iが見つかったとき 文字列が見つかった位置 検索開始位置 > Len(検索条件文字列)のとき 0
【サンプルコード3】次のコードは【サンプルコード2】と同様、パス名からファイル名を取り出す関数の例です。
Function Get_FilleName(Temp As String) Dim RT As Variant Dim F_Name As String RT = InStrRev(Temp, "\") If RT > 0 And IsNull(RT) = False Then F_Name = Mid(Temp, RT + 1, Len(Temp) - RT) Else F_Name = "" End If Get_FilleName = F_Name End Function Sub Test() Debug.Print Get_FilleName("D:\Access2003\本科生管理\本科生管理2005") End Sub
【書式】String(number, character)
指定した文字コード (ASCII またはシフト JIS コード) の示す文字、または文字列の先頭文字を、指定した文字数だけ並べた文字列を返す文字列処理関数です。
指定項目 内容 number 長整数型 (Long) の値を指定します。文字をいくつ並べるのかを指定します。 character バリアント型 (Variant) の値を指定します。文字の文字コード、または文字列式を指定します。この文字列の先頭文字を number 回繰り返したものを返します。
【サンプルコード3】次のコードは0001から0100までの文字列をイミディエイトウインドウに表示します。
Sub Sample() Dim strTemp As String Dim i As Integer For i = 1 To 100 strTemp = Lrim(Str(i)) Debug.Print String(4 - Len(strTemp), "0") & strTemp Next i End Sub
【解説】Str(i)は数値iを文字列iに変換します。ただし、先頭にスペースが付いています。Lrimはこのスペースを取り除いています。