こんにちは!ぐーです。
いつもブログをご覧いただき、ありがとうございます!
仕事をしていると、月末にこんな「困ったファイル」が回ってきませんか?
たとえば、「シートが50枚以上もある巨大な売上管理表」など。
画面下の見出しを何度もスクロールして、「4月のA社の請求書は……あ、行き過ぎた!戻らなきゃ……あれ、どこ?」なんて経験、きっと一度はありますよね。
そこで役立つのが、「For Each(フォー・イーチ)」という考え方です。
想像してみてください。机の引き出しに50冊のノート(シート)が乱雑に入っている状態を。
そこから「4月のA社」のノートを探すとき、あなたならどうしますか?
きっと、手前から一冊ずつ「これはA社?……違う、次!」と順番に確認していきますよね。
今回ご紹介するコードは、この「順番にめくって探す作業」を、一瞬で代行してくれるものです。
「For Each」は、「それぞれの(Each)シートに対して(For)、順番に処理してね」という命令です。
人がやると数分かかる作業も、パソコンならわずか1秒で完了します。
【コピペでOK】シートを一瞬で検索する魔法のコード
では、実際のコードです。
さっそく、Excelの「開発」タブからVBAエディタを開き、以下のコードをコピー&ペーストしてみましょう!
Sub FindSpecificSheet()
Dim ws As Worksheet
Dim targetName As String
Dim isFound As Boolean
' ★ここに探したいシートの名前を入れてください
targetName = "集計用"
' 最初は「見つかっていない」状態(False)にしておきます
isFound = False
' すべてのシートを1枚ずつ確認します
For Each ws In ThisWorkbook.Worksheets
' もし、シートの名前が探している名前と一致したら…
If ws.Name = targetName Then
ws.Activate
MsgBox "見つかりました!", vbInformation, "検索結果"
isFound = True
Exit For ' 見つかったので、探す作業を終了します
End If
Next ws
' もし最後まで探して見つからなかったら…
If isFound = False Then
MsgBox "「" & targetName & "」というシートは見当たりませんでした", vbExclamation
End If
End Sub
このコードのポイント
このコードは、ただ探すだけではありません。
- 見つかったシートへ瞬時にジャンプ!
「あったよ!」と教えてくれるだけでなく、そのシートをアクティブ(表示状態)にしてくれるので、そのまま流れるように作業を始められます。
- 見つからなかった時も教えてくれる
もし名前が間違っていたり、シートが削除されていたりしても、「見当たりません…」と優しく教えてくれます。エラーで画面が固まるようなことはありません。
今回は「シート探し」を例にしましたが、「大量のデータの中から条件に合うものを探す」という場面で、For Eachは最強の味方になります。
ぜひ毎日の業務にも取り入れてみてください!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。
リンク
リンク

コメント