メイン画像

VBScript - 文字列処理

VBScript - 文字列処理


アルファベットの大文字を小文字にする(LCase 関数)

アルファベットの大文字を小文字にするには LCase 関数を使います。

全角も変換されます。

LCase(string)
string
変換する文字列

text1 = LCase("Hello World!")
' → hello world!

text2 = LCase("Hello World!")
' → hello world!

アルファベットの小文字を大文字にする(UCase 関数)

アルファベットの小文字を大文字にするには UCase 関数を使います。

全角も変換されます。

UCase(string)
string
変換する文字列

text1 = UCase("Hello World!")
' → HELLO WORLD!

text2 = UCase("Hello World!")
' → HELLO WORLD!

文字列の先頭から指定した文字数の文字列を取得する(Left 関数、 Mid 関数)

文字列の先頭から指定した文字数の文字列を取得するには、Left 関数または Mid 関数を使います。

Left(〈元の文字列〉, 〈取得する文字数〉)
Mid(〈元の文字列〉, 1, 〈取得する文字数〉)

文字列から先頭の1文字を取得します。

text1 = Left("ABCDE", 1)
' → A

text2 = Mid("あいうえお", 1, 1)
' → あ

文字列の末尾から指定した文字数の文字列を取得する(Right 関数、 Mid 関数)

文字列の末尾から指定した文字数の文字列を取得するには、Right 関数または Mid 関数を使います。

Right(〈元の文字列〉, 〈取得する文字数〉)
Mid(〈元の文字列〉, Len(〈元の文字列〉), 〈取得する文字数〉)

文字列から末尾の1文字を取得します。

text1 = Right("ABCDE", 1)
' → E

text2 = Mid("あいうえお", Len("あいうえお"), 1)
' → お

文字列の指定した位置から指定した文字数の文字列を取得する(Mid 関数)

文字列の指定した位置から指定した文字数の文字列を取得するには Mid 関数を使います。

Mid(〈元の文字列〉, 〈開始位置〉, 〈取得する文字数〉)
開始位置
文字列の先頭を 1 として、取得開始位置を指定します。
0 以下を指定した場合、実行時エラーとなります。
取得する文字数
取得する文字数を指定します。 0 を指定すると何も取得されません(長さ 0 の文字列が返る)。
省略、または元の文字列より多い文字数を指定すると末尾まで取得されます。

文字列の2~4文字目を取得します。

text1 = Mid("あいうえお", 2, 3)
' → いうえ

文字列の2文字目から末尾までを取得します。

text1 = Mid("あいうえお", 2)
' → いうえお

スペースを取り除く(Trim 関数、 LTrim 関数、 RTrim 関数)

先頭と末尾のスペースを取り除くには Trim 関数を、
先頭のスペースのみを取り除くには LTrim 関数を、
末尾のスペースのみを取り除くには RTrim 関数を使います。

全角のスペースも取り除かれます。

Trim(〈文字列〉)
LTrim(〈文字列〉)
RTrim(〈文字列〉)

text1 = Trim("  Hello World!  ")
' → "Hello World!" が返る

text2 = LTrim("  Hello World!  ")
' → "Hello World!  " が返る

text3 = RTrim("  Hello World!  ")
' → "  Hello World!" が返る

文字列の一部を指定した文字列に置換する(Replace 関数)

文字列を置換するには Replace 関数を使います。

Replace(〈元の文字列〉, 〈検索する文字列〉, 〈置換する文字列〉[, 〈検索開始位置〉[, 〈置換する回数〉[, 〈文字列の比較モード〉]]])
検索開始位置
文字列の先頭を 1 として、検索開始位置を指定します。
省略した場合、先頭から検索されます。
置換する回数
置換する回数を指定します。
省略した場合、既定値の -1 となり、すべての候補が置換されます。
文字列の比較モード
バイナリモードまたはテキストモードを指定します。省略した場合、バイナリモードで比較されます。

文字列に含まれるすべてのスラッシュを取り除きます(長さ 0 の文字列に変換)。

text = Replace("1868/09/08", "/", "")
' → 18680908

文字列の4文字目から検索を開始して、2個目までのドットをハイフンに変換します。
(3個目以降のドットはそのまま)

text = Replace("12.34.56.78.90", ".", "-", 4, 2)
' → 34-56-78.90

文字列に指定した文字列が含まれるか検索する(InStr 関数、 InStrRev 関数)

文字列を検索しするには InStr 関数または InStrRev 関数を使います。

先頭から検索するときは InStr 関数を、末尾から検索するときは InStrRev 関数を使います。

どちらの関数も、最初に見つかった文字の位置(先頭からその文字までの文字数)を返します。
見つからない場合は 0 が返ります。

InStr([〈検索開始位置〉, ]〈元の文字列〉, 〈検索する文字列〉[, 〈文字列の比較モード〉])

検索開始位置には、文字列の先頭を 1 として検索開始位置を指定します。
省略した場合、先頭から検索されます。

InStrRev(〈元の文字列〉, 〈検索する文字列〉[, 〈検索開始位置〉[, 〈文字列の比較モード〉]])

検索開始位置には、文字列の先頭を 1 として検索開始位置を指定します。
省略した場合、末尾から検索されます。

半角スペースを検索します。

pos = InStr("1868/09/08 10:35:27", " ")
' → 11

pos = InStrRev("1868/09/08 10:35:27", " ")
' → 11

検索する文字列に長さ 0 の文字列を指定した場合、
InStr 関数は 1 を返します。
InStrRev 関数は元の文字列の文字数(末尾の文字の位置)を返します。

pos = InStr("1868/09/08", "")
' → 1

pos = InStrRev("1868/09/08", "")
' → 10

文字数を取得する(Len 関数)

文字列の文字数を取得するには Len 関数を使います。

(返されるのはバイト数ではなく文字数です。注意してください)

Len(〈文字列〉)

length = Len("Hello World!")
' → 12

length = Len("Hello World!")
' → 12

指定した区切り文字で文字列を分割する(Split 関数)

指定した区切り文字で文字列を分割するには Split 関数を使います。
分割した文字列は1次元配列で返ります(添え字の開始は 0 )。

Split(〈元の文字列〉[, 〈区切り文字〉[, 〈配列の要素数〉[, 〈文字列の比較モード〉]]])
元の文字列
分割する文字列を指定します。
長さ 0 の文字列を指定した場合、要素もデータもない空の配列が返ります。
区切り文字
文字列の区切り文字を指定します。
省略した場合、スペース(" ")となります。
長さ 0 の文字列を指定した場合、元の文字列全体を含む単一の要素の配列が返ります。
配列の要素数
返される配列の要素数を指定します。
省略した場合、既定値 -1 となり、分割された文字列を各要素に持つ配列が返ります。
0 を指定した場合、最大インデックスが -1 の配列が返ります。
分割された数より少ない数を指定した場合、最後の要素に残りの文字列が格納されます。
文字列の比較モード
バイナリモードまたはテキストモードを指定します。省略した場合、バイナリモードで比較されます。

既定の区切り文字で分割します。

strings = Split("Hello World!")
' → "Hello", "World!" を要素に持つ配列が返る

カンマ区切りで分割します。

strings = Split("Windows,Mac,Linux", ",")
' → "Windows", "Mac", "Linux" を要素に持つ配列が返る

戻り値の配列の要素数を指定します。

strings = Split("Python,Java,C++,C#,JavaScript", ",", 3)
' → "Python", "Java", "C++,C#,JavaScript" を要素に持つ配列が返る

指定した文字を指定した個数で取得する(String 関数)

指定した文字を指定した個数で取得するには String 関数を使います。

String(〈文字の個数〉, 〈文字または文字コード〉)
  • 2文字以上の文字列を指定した場合、先頭の1文字が使われます。
  • 文字コードに 256 以上を指定した場合、指定値÷256の余り(指定値 Mod 256の結果)が使われます。
    • 後述のとおり、この説明は誤りのようです。

text = String(5, "A")
' → AAAAA

text = String(5, 65)
' → AAAAA

text = String(5, "ABCDE")
' → AAAAA

文字コードに 256 以上を指定した場合、指定値を 256 で割った余りが使われるとありますが、使われていないようでした。
実際に使われるのは、「余り」ではなく「商」のようです。

'321 Mod 256 で 65 が使われるはず
code = Asc(String(1, 321))
' → 1 が返された。321 ÷ 256 = 1 余り 65 → 余りではなく商が使われているよう。

'ということは 512 を指定すれば 2 になるはず
code = Asc(String(1, 512))
' → 2 が返された。

code = Asc(String(1, 768))
' → 3 が返された。

' 16640 を指定したら 65 (つまり "A")になるはず
text = String(1, 16640)
' → A が返された

指定した数のスペースを取得する(Space 関数)

指定した数のスペースを取得するには Space 関数を使います。

Space(〈取得するスペースの数〉)

text1 = Space(0)
' → 0個のスペース("")

text2 = Space(10)
' → 10個のスペース("          ")

String 関数でも同じことができます。

text3 = String(10, " ")
' → 10個のスペース("          ")

文字の並びを逆にする(StrReverse 関数)

文字の並びを逆にするには StrReverse 関数を使います。

StrReverse(〈元の文字列〉)

text = StrReverse("Hello World!")
' → !dlroW olleH

text = StrReverse("Hello World!")
' → !dlroW olleH

文字列を比較する(StrComp 関数)

文字列を比較するには StrComp 関数を使います。

StrComp(〈比較する1つ目の文字列〉, 〈比較する2つ目の文字列〉[, 〈文字列の比較モード〉])
  • 1つ目の文字列が2つ目の文字列より小さい場合 -1 が返ります。
  • 1つ目の文字列と2つ目の文字列が同じ場合 0 が返ります。
  • 1つ目の文字列が2つ目の文字列より大きい場合 1 が返ります。

ret = StrComp("abc", "ABC")
' → 1

ret = StrComp("1", "100")
' → -1

ret = StrComp("あいうえお", "あいうえお")
' → 0

大文字と小文字、全角と半角を区別せずに比較する(文字列の比較モードの話)

大文字の "A" と小文字の "a" 、全角の "A" と半角の "A" を同じと見なすにはどうすれば良いのでしょうか。

Replace 関数や StrComp 関数などの引数には、文字列の比較モードを指定できるようになっています。
この比較モードにテキストモードを指定してください。
大文字と小文字、全角と半角を区別せずに比較するようになります。

ちなみに文字列の比較モードには、以下の2つのモードがあります。

バイナリモード(vbBinaryCompare: 0
大文字と小文字、全角と半角を区別して比較します。
テキストモード(vbTextCompare: 1
大文字と小文字、全角と半角を区別せずに比較します。
全角カナと半角カナも区別されなくなります。ただし、濁点・半濁点を含むカナは別物と判定されるので注意が必要です。

大文字と小文字は区別されません。

ret = StrComp("abc", "ABC", vbTextCompare)
' → 0

全角と半角は区別されません。

ret = StrComp("abc", "abc", vbTextCompare)
' → 0

大文字と小文字、全角と半角は区別されません。

ret = StrComp("abc", "ABC", vbTextCompare)
' → 0

全角カナと半角カナも区別されません。

ret = StrComp("アイウエオ", "アイウエオ", vbTextCompare)
' → 0

濁点または半濁点のカナは、全角と半角で区別されます。

ret = StrComp("ガ", "ガ", vbTextCompare)
' → 1

ret = StrComp("パ", "パ", vbTextCompare)
' → 1

文字の ANSI コードを取得する(Asc 関数)

文字の ANSI コードを取得するには Asc 関数を使います。

Asc(〈文字列〉)

2文字以上の文字列を指定した場合、先頭の文字が使われます。

code = Asc("A")
' → 65

code = Asc("ABC")
' → 65

code = Asc("あ")
' → -32096

ANSI コードに対応する文字を取得する(Chr 関数)

ANSI コードに対応する文字を取得するには Chr 関数を使います。

Chr(〈コード〉)

char1 = Chr(65)
' → "A"

char1 = Chr(97)
' → "a"

char1 = Chr(-32096)
' → "あ"

文字列(シフトJIS)のバイト数を取得する

VBScript には、文字列(シフトJIS)のバイト数を取得する関数はありません。
自前で準備しなければなりません。

と言ってもそれほど難しい話ではないです。

文字列内の文字単位にバイト数を判定し、合計すれば OK です。

文字のバイト数は、 Asc 関数の戻り値と 0xFF00 の論理積を取り、 0 なら1バイト、それ以外なら2バイトと判定できます。

If (Asc(〈文字〉) And &HFF00) = 0 Then
  ' → 1バイト文字
Else
  ' → 2バイト文字
End If

以下の関数は、シフトJIS文字列のバイト数を返します。

Function GetSJISByteCount(str)

  Dim byteCount
  byteCount = 0

  Dim i
  For i = 0 To Len(str) - 1
    Dim ch
    ch = Mid(str, i + 1, 1)

    If (Asc(ch) And &HFF00) = 0 Then
      byteCount = byteCount + 1
    Else
      byteCount = byteCount + 2
    End If
  Next

  GetSJISByteCount = byteCount

End Function

アカウントを作成 して、もっと沢山の記事を読みませんか?


この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。


この記事にコメントをしてみませんか?


酒とアクアリウムが最近の楽しみ。

おすすめの記事