OKボタン
Private Sub CommandButton1_Click()
aa = 2
Dim Mynumber As String
Dim i As Long
Do While aa <= ThisWorkbook.Worksheets.Count
Mynumber = UserForm1.TextBox1.Text
Worksheets(aa).Activate
Range("B3").Select
If Len(Mynumber) = 0 Then Exit Sub
Mynumber = "*" & Mynumber & "*"
For i = Cells(3, 2).End(xlDown).Row To 2 Step -1
If i < 3 Then
aa = aa + 1
Exit For
Else
With Cells(i, 2)
If .Value Like Mynumber Then
.Activate
Exit Sub
End If
End With
End If
Next i
Loop
MsgBox "一致データはありません"
End Sub
まず、OKボタンのオブジェクト名を確認します。
↓のように、UserForm1のOKボタンをクリックして、左のオブジェクト名を確認してください。
OKボタンのオブジェクト名はCommandButton1なので、CommandButton1をクリックした場合の
プログラムを書いていきます。
(ボタンを作成した順番が違っていて、CommandButton2になっています、という場合は、以下のCommandButton1
の部分を2に変更して作成すればOKです)
まず、Visual Basicの画面で①のUserFormの部分をダブルクリックします。
次に②の”コードの表示”というボタンをクリックし、③と④が↓のようなメニューになるように
プルダウンを選択します。
あとは、上記のように、プログラムを入力するだけなのですが、簡単にプログラムの説明も追記しておきます。
まず、
aa=2
の”aa”は、シートが前から数えて何枚目か、という変数を割り当てています。
aa=2という初期値を与えることで、2枚目のシート、つまり今月分のシートから検索をはじめます。
Do While aa <= ThisWorkbook.Worksheets.Count
というのは、aaの値が、このワークブックに含まれる、ワークシートの枚数(Worksheets.Count)を
超えない限り、検索を続けます、という意味です。
Mynumberには、検索ワードを入力します。
さらに
Mynumber = "*" & Mynumber & "*"
と、入力することで、完全一致ではなく、部分一致の摘要名に関しても検出することができます。
↑の*は、不特定の文字を表しています。
For i = Cells(3, 2).End(xlDown).Row To 2 Step -1
は、2行目の末端の行から、1行ずつ上に向かって移動して、2行目にたどり着くまで、
プログラムを続けます、という意味です。
If i < 3 Then
aa = aa + 1
Exit For
は、2行目までたどり着いた時点で、検出のプログラムを終了し、次のシートへ移行します、
という意味です。
With Cells(i, 2)
If .Value Like Mynumber Then
.Activate
Exit Sub
End If
End With
は、検索ワードが発見されれば、そのセルをアクティブにして、プログラムを終了しなさい
と、いう意味です。
Next i
Loop
は、次の行へ行きなさい、という命令です。
MsgBox "一致データはありません"
は、Do~Loopの外にあるので、
Do While aa <= ThisWorkbook.Worksheets.Count
↑に当てはまらない場合、つまり、aaの数が、ブックに含まれるシート数を超えてしまった時点で
一致データはありませんというメッセージを出力して、プログラム終了となります。