11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VBScript「Filter関数」を使用時の注意点

Last updated at Posted at 2020-10-28

#本記事の目的
VBSの中で「配列Aの中から、文字列Bに一致する配列の値を抜き出す」ための関数としてFilter関数があります。こちらを業務で実装する時に気づいた仕様上の注意点について、ナリッジメモとして残したいと思います。初めて本関数を使用する方などの、実装時の補助線となれば幸いです。

#Filter関数について
基本形式は下記のようになります。
抽出モード(抽出結果をTrue or Falseで返す)と、文字列比較のモード(バイナリモード(0) or テキストモード(1))については省略可能です。


Filter(配列A, 文字列B,(抽出モード),(文字列比較のモード))

#注意点
この関数で、文字列Bと一致するかの処理を行う際、値同士は**「完全一致」ではなく「部分一致」**で比較されます。例を挙げると、「9」に一致する値を抜き出す時、範囲が「1~10」の時と「1~20」の時では、下記のような違いがでます(「テストコード」→「実行結果」の順に記載します)。

####テストコード


dim moji
dim array
dim extraction
dim index
dim result

' 実際に処理する際は、どちらかのmojiをコメントアウト
' 1~10の時
moji = "1,2,3,4,5,6,7,8,9,10"

' 1~20の時
moji = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20"

array = Split(moji, ",")
extraction = Filter(array,9)

For index = 0 To UBound(extraction)
	result = extraction(index)
	response.write "抜き出し結果:" & result & "<br>"
Next

response.end

####実行結果

1~10の時

抜き出し結果:9

1~20の時

抜き出し結果:9
抜き出し結果:19

上記のような結果となるため、Filter関数の使用は**「指定する文字列が、部分的に一致すればOKな時に限られる/完全一致させたい時はNG」**という点に注意して頂ければと思います。

#補足
もし完全一致での比較を行いたい場合、StrComp関数で文字列同士の比較を行い、その戻り値を使用する等の方法があります。こちらのサイトに分かりやすい使用方法が記載されていますので、ご参照下さい。

11
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?