№0009. Excel VBA-[範囲内セルの、検索語と一致する文字列の個数を求める。] | GTZ&RSのブログ

GTZ&RSのブログ

GT-Z&RSでは、コンピュータ関連情報や地域情報を中心に発信しています。

№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