連載
» 2006年08月18日 00時00分 公開

基礎解説 演習方式で身につけるチェック式WSH超入門:第4回 関数を使いこなす(その1) 文字列、数値、日付を扱う関数 (2/4)

[牟田口大介(Microsoft MVP Visual Developer - Scripting),著]

文字列処理関数 その1(大文字/小文字変換)

 文字列を扱う関数は、多数用意されている。引数に指定した文字列に何らかの加工を施して、戻り値として文字列を返すものが多い。例えばLCase関数は、引数に文字列を取り、その文字列に含まれるアルファベットの大文字(uppercase)を小文字(lowercase)に変換して、変換後の文字列を戻り値として返す(大文字以外の文字はそのまま)。UCase関数はその逆で、小文字を大文字に変換する(小文字以外の文字はそのまま)。

Option Explicit
Dim strSource, strLower, strUpper
strSource = "Apple" '加工したい文字列
strLower = LCase(strSource) '大文字を小文字に
strUpper = UCase(strSource) '小文字を大文字に
MsgBox strSource & "の小文字は" & strLower & "、大文字は" & strUpper

 このサンプルでは、LCase関数とUCase関数を使って、strSource変数のアルファベット文字列を小文字と大文字にそれぞれ変換し、その戻り値である文字列をそれぞれ変数strLower、strUpperに代入している(4行目と5行目)。そしてこれらの結果をMsgBox関数で表示している。

 このスクリプトを実行すると、次のメッセージ・ボックスが表示される。

LCase関数、UCase関数の実行例
大文字が小文字に、小文字が大文字に変換される。

 これらは引数に文字列を1つ取り、戻り値に文字列を返す最も単純な関数である。同様の関数に、文字列の左右(先頭と末尾)、あるいは両方のスペースを取り除くためのLTrim、RTrim、Trim関数などがある。

 なお、このサンプルでは、strSourceなどの変数名にstrという接頭辞を付けているが、これは変数のデータ型が文字列型(String)であることを強調するためだ。次回、データ型について説明するが、いまは、データ型とは変数の「種類」であり、この関数で扱っている変数が文字列であるということだけを理解しておけばよいだろう。

文字列処理関数 その2(文字列から一部を切り出す)

 引数に文字列のほかに値を指定する関数もある。その例としてLeft関数を見てみよう。Left関数は、第1引数に指定した文字列の左から、第2引数に指定した文字数分だけ文字列を切り出して戻り値として返す。Right関数は、同様に右から数文字取り出す関数である。左右ではなく真ん中から一部の文字列を取り出すにはMid関数を使えばよい。サンプル・コードをご覧に入れよう。

Option Explicit
Dim strSource, strLeft, strRight, strMid
strSource = "Peter paid the piper to pick some pickled peppers." '加工したい文字列
strLeft = Left(strSource, 5) '左から5文字抜き出す
strRight = Right(strSource, 8) '右から8文字抜き出す
strMid = Mid(strSource, 7, 4) '7文字目から4文字分抜き出す
MsgBox strSource & "の" & vbCrLf & _
"左から5文字抜き出すと、" & strLeft & "、" & vbCrLf & _
"右から8文字抜き出すと、" & strRight & "、" & vbCrLf & _
"7文字目から4文字分抜き出すと、" & strMid & "。"

 このスクリプトを実行すると、次のメッセージ・ボックスが表示される。

Left関数、Right関数、Mid関数の実行例
文字列の左右から、あるいは真ん中から文字列を抜き出すことができる。

 このように、文字列の一部を抜き出すことが自由自在に行える。なお、Mid関数は第3引数(抜き出す文字列の数)を省略すると、文字列の最後までを抜き出す。また、文字列の先頭の文字を1文字目と数える。

 これらの関数の引数には変数ではなく、文字列リテラル(特定の文字列そのもの)を指定してもよいし、英語のみならず日本語でも同様に使用できる。例えば、「事件は会議室で起きてるんじゃない」という文字列から先頭の「事件」を切り出して表示するには、

MsgBox Left("事件は会議室で起きてるんじゃない", 2)

のように記述することで可能だ。

文字列処理関数 その3(文字列の部分変換)

 複数の文字列を引数に取る関数もある。その中でよく使うのが、文字列の一部を変換するReplace関数だ。Replace関数は、第1引数に含まれる、第2引数の文字列を、第3引数の文字列で置換した文字列を返す関数である。

Option Explicit
Dim strSource, strReplace
strSource = "日本沈没" '置換元の文字列
strReplace = Replace(strSource, "日本","日本以外全部") '置換した文字列
MsgBox strSource & "→" & strReplace

 このスクリプトを実行すると次のメッセージ・ボックスが表示される。

Replace関数の実行例
文字列の一部が置換される。

 このサンプルでは、「日本沈没」という文字列に含まれる「日本」という文字列を「日本以外全部」に置換している。Replace関数は、第3引数までの指定が必須だが、ほかに省略可能な第4引数、第5引数、第6引数を指定することで、検索開始文字の位置や置換する文字列数などの指定もできる(詳細はVBScriptのReplace関数のヘルプを参照)。

 これまでは文字列を引数に取り、文字列を返す関数を説明してきたが、文字列を取り、数値を返す関数もある。そのうちの1つ、Len関数は文字列の長さ(文字数)を返す関数である。

Option Explicit
Dim strSource
strSource = "いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす" '文字数を数える文字列
MsgBox """" & strSource & """の文字数は、" & Len(strSource)

 このスクリプトを実行すると、次のメッセージ・ボックスが表示される。

Len関数の実行例
文字列に含まれる文字数を得ることができる。

 これは、指定した文字列の文字数を表示する例である。Len関数の戻り値は数値だが、すでに説明したとおり、&演算子で連結すると、数値が文字列に変換され結合される。

 なお補足だが、「"」(ダブルクオーテーション)を文字列中に記述するには、「""」のように2つ重ねて記述する。

ダブルクオーテーションを文字として出力する
ダブルクオーテーション(")を文字列として出力するには、2回続けて記述する。

文字列処理関数 その4(文字列中の文字位置を調査する)

 同様に数値を返す関数として、文字列に、ある文字列が含まれているかどうか、また見つかった場合に、その文字位置を調べる関数がInStr関数、InStrRev関数だ。

Option Explicit
Dim strSource, strInput, intPosition
strSource = "水素、ヘリウム、リチウム、ベリリウム、ホウ素、炭素、窒素、酸素、フッ素、ネオン" '検索対象の文字列
strInput = InputBox("探したい元素名を入力してください") '検索する文字列を入力
intPosition = Instr(strSource, strInput) '対象文字列を検索し、見つかった位置を返す
If intPosition = 0 Then 'InStr関数の戻り値が0、すなわち文字列が見つからなかった場合
        MsgBox "「" & strSource & "」の中に、" & vbCrLf & _
        "「" & strInput & "」はありません。"
Else 'InStr関数の戻り値が0以外、すなわち文字列が見つかった場合
        MsgBox "「" & strSource & "」の中で、" & vbCrLf & _
        "「" & strInput & "」は"  & intPosition & "文字目にあります。"
End If

 このスクリプトを実行すると次のようになる。上は「カリウム」を、下は「炭素」をそれぞれ入力した結果である。

InStr関数の使用例
検索対象文字列があるかどうかを調べ、ない場合は「ありません」と表示し、ある場合は見つかった位置を表示する。

 このサンプルでは、元素名を複数含んだ文字列の中に、InputBox関数で入力した元素名があるかどうかを調べ、あった場合はどの位置にあるかを表示する。このように、InStr関数では、第2引数に検索対象文字列を指定し、第3引数に検索する文字列を指定すると、その文字位置を返す(第1引数は検索開始位置を指定するものだが省略可能で、省略時には第2引数の文字列の最初から検索する)。例えば、先頭にあれば1が結果として返される。しかし検索する文字列が見つからなければ0を返す。なお、intPosition変数の接頭辞intは、数値型の1つである整数型(Integer)であることを示す。同様にInstrRev関数は文字列を検索するのだが、InStrとは逆に、文字列の後ろから検索し、文字列が見つかった位置を返す。

文字列処理関数 その5(組み合わせ利用)

 これまでに文字列を使う関数の一部を紹介したが、実際はこれらの関数を組み合わせて複雑な文字列処理をしていくことが多い。例えば、指定したファイルのフルパス名から、ファイル名を抜き出すには、次のようなコードを書く。

Option Explicit
Dim strSource
strSource = "C:\Program Files\Internet Explorer\iexplore.exe"
MsgBox strSource & vbCrLf & _
"のファイル名は、" & vbCrLf & _
Mid(strSource, InStrRev(strSource,"\") + 1)

 
Mid関数とInstrRev関数を組み合わせた例
ファイルのフルパスからファイル名を取得している。

 この例では、InstrRev関数を用い、C:\Program Files\Internet Explorer\iexplore.exeというパスの後ろから”\”を検索し、最初に見つかった文字位置の次(+1することで指定)の文字位置を、Mid関数の第2引数に指定することで、”\”より後の文字列、すなわちファイル名を取得している。

 では次に、同じ文字列を取り上げ、親フォルダのフルパスとドライブ名を取り出す方法を考えてもらいたい。

CHECK!

マーカーで隠れたところを選択してチェックしてみよう。


Option Explicit
Dim strSource
strSource = "C:\Program Files\Internet Explorer\iexplore.exe"
MsgBox strSource & vbCrLf & _
"ファイル名: " & Mid(strSource, InStrRev(strSource,"\") + 1) & vbCrLf & _
"フォルダ名: " & Left(strSource, InStrRev(strSource,"\") - 1)1
"ドライブ名: " & Left(strSource, InStr(strSource,"\"))

 この例でも文字列処理関数を複数組み合わせることで目的の文字列を取り出している。特にLeft、Right、Mid関数とInstr、InstrRev関数の組み合わせはよく使うので覚えておくとよいだろう。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。