おつかれさまです。

EXCEL超初心者マクロ(7)- 検索(FIND)-

2018年9月20日

EXCEL超初心者マクロと言いつつ、自分の思いつきでUPしてるような気がしてますが、そこは置いといて…

今回は、検索をご紹介します。

Findを使うのですが

例は、【球団名】が入っているシートから、【選手名と球団名】が入っているシートを検索して、その【球団名】とマッチした数をカウントします。
ついでに、1回でも検索されたら○マークを【選手名と球団名】に入れます。
完全一致ではなく、部分一致を使います。

※マスタ検索などは、【選手名と球団名】から【球団名】を完全一致で検索してデータを抽出するのが一般的です。

サンプルです。
Sample_7V1.xlsm

MSG_FLG = MsgBox(" ◆ CHECK 開始致します クリアOK?◆", vbYesNo)
    If MSG_FLG = vbNo Then
       Exit Sub
    End If
    mySheetName001 = "球団"
    mySheetName002 = "選手"

'    Application.ScreenUpdating = False '### 高速化on
    
    TSTART = Timer

'  ***クリア処理***
   '### シートフィルタ解除サブプロシジー ###
    sheet_clear
    
    Sheets(mySheetName002).Select
    Cells.Interior.ColorIndex = xlNone
    
    Sheets(mySheetName001).Select

'######## 球団クリア #########
    Sheets(mySheetName002).Select
    Columns("C:C").Select
    Selection.ClearContents
    Range("A1").Select
    
'######## COUNTクリア #########
    Sheets(mySheetName001).Select
    Columns("C:C").Select
    Selection.ClearContents
    Range("A1").Select

    CNT01 = 1
    CNT02 = 0
    CNT03 = 0
    Application.StatusBar = "処理件数 >" & CNT03 & " 件"

    Set set_data01 = Worksheets(mySheetName001).Range("A2")
    set_data01.Offset(-1, 2).Value = "件数"
    
    Do Until set_data01.Offset(0, 0).Value = ""

       CNT02 = 0
'########## データ 検索 #############
       kensaku1 = set_data01.Offset(0, 1).Value
       Set MyRange1 = Worksheets(mySheetName002).Columns(2).Find(kensaku1, lookat:=xlPart, MatchByte:=False) '部分一致
       If Not MyRange1 Is Nothing Then
          firstAddress = MyRange1.Address
          Do
             CNT02 = CNT02 + 1
             MyRange1.Offset(0, 2).Value = "○"
          
          Set MyRange1 = Worksheets(mySheetName002).Columns(2).FindNext(MyRange1)
          Loop While Not MyRange1 Is Nothing And MyRange1.Address <> firstAddress
          set_data01.Offset(0, 2).Value = CNT02
       End If
                
'########## 次行 #############
       Set set_data01 = set_data01.Offset(1, 0)
       
       CNT03 = CNT03 + 1
       Application.StatusBar = "NGWORD / 処理件数 >" & CNT03 & " 件"
   
   Loop
   
    
'   Application.ScreenUpdating = True '### 高速化off
   
   TEND = Timer
   MsgBox ("かかった時間は" & TEND - TSTART & "秒です")
   Worksheets("START").Range("H4").Value = TEND - TSTART
   
   Application.StatusBar = "処理件数 >" & CNT03 & " 件(END)"

がんばりましょう。