№0009. Excel VBA-[範囲内セルの、検索語と一致する文字列の個数を求める。]
Excelマクロでは、範囲内セルの検索語と一致する文字列の個数を求めるユーザー定義関数を作成することができます。
このCOUNTAIFユーザー関数は、標準のCOUNTIF関数と同様の機能を持ちます。
標準のCOUNTIF関数では、INDIRECT関数を使用してセル内容を間接参照したり、メタキャラクタを検索語とした場合、正しく検索語の個数を求めることができませんが、このCOUNTAIFユーザー関数では、これらの場合でも正しく検索語の個数を求めることができます。
For Each...Nextステートメント
For Each...Nextステートメントは、配列や各コレクションの各要素に対して、一連の文を繰返し実行するフロー制御文です。
【構文】
For Each element In group
statements
[Exit For]
Next [element]
- element:各要素を格納する変数。
- group:配列名或いはコレクション名
※コンパイルエラー等で、実行できない場合は、[参照設定]でMicrosoft Office 11.0 Object Libraryを指定してください。
《ソースコード》
Option Explicit #Const DEBUG_VERSION = 1 ' 本番環境の場合は = 0 Public Function COUNTAIF(ByVal oRange As Object, ByVal sSearchWord As String) As Integer ' 範囲内の、検索語と一致する文字列の個数を求める。 ' (範囲、検索語) ' 関数値(一致個数:0~, 範囲不適合:-1) Dim oWord As Object ' 検索条件語格納変数の定義 Dim sWord As String ' 範囲内の検索語格納変数の定義 Dim iCounter As Integer ' カウンター変数の定義 COUNTAIF = 0 ' 関数の初期化 If (oRange.Count < 1) Then ' オブジェクト数のチェック COUNTAIF = -1 ' オブジェクト数のエラー Exit Function End If iCounter = 0 ' カウンター変数の初期化 For Each oWord In oRange ' 検索処理 sWord = oWord.Value ' 検索語の取り出し If (sSearchWord = sWord) Then ' 検索語の確認 ' 検索語が一致する場合 iCounter = iCounter + 1 ' カウンター変数のインクリメント End If Next oWord COUNTAIF = iCounter ' 関数値の設定 End Function
update:2013.05.02
Copyright (C) 2009 - 2013 S.IKE