FindNextメソッド、任意の文字列が入力されているセルをすべて取得する(Excel VBA)
ここで紹介するテクニックは、Unionメソッドと、前回紹介したFindメソッドの発展形であるFindNextメソッドを融合させた、みなさんのVBAスキルを1ランク引き上げるほどの極めて有用性の高いサンプルです。
まず最初に、サンプルをご覧ください。
ここでは、全セルを対象に検索しています。
Sub Sample_016()
Dim myRange As Range
Dim myFirstCell As Range
Dim myUnion As Range
Set myRange = Cells.Find(What:=”大村あつし”)
If myRange Is Nothing Then -①
MsgBox “「大村あつし」が見つかりません”
Exit Sub
Else
Set myFirstCell = myRange
Set myUnion = myRange
End If
Do
Set myRange = Cells.FindNext(myRange) -②
If myRange.Address = myFirstCell.Address Then -③
Exit Do
Else
Set myUnion = Union(myUnion, myRange) -④
End If
Loop
MsgBox “「大村あつし」が ” & myUnion.Count & “件見つかりました”
End Sub
①は、「大村あつし」と入力されたセルが1つもない場合の処理です。
FindNextメソッドは、前回見つかったRangeオブジェクトを引数にして、次に条件に一致するRangeオブジェクトを返しますので、②のようなステートメントになります。
そして、このサンプルの鍵を握るのが③のステートメントです。
Do…Loopステートメントでループをするわけですが、③のステートメントで取得した変数「myRange」が、Findメソッドで検索した一番最初のセルである「myFirstCell」と一致したら、すべての対象セルを検索し終わったことになるので、ループを終了します。
なお、この一致の判断は、必ずAddressプロパティで比較しなければなりません。
すなわち、FindNextメソッドで検索したセルの「アドレス」が、一番最初に検索したセルの「アドレス」と一致したときが、すべての対象セルを検索し終えたときなのです。
このAddressプロパティを省略してしまうと、Valueプロパティを指定したことになり、2つのRangeオブジェクトの値は当然どちらも「大村あつし」なのですから、このサンプルは正常に動作しません。
そして、④で対象セルをUnionメソッドで集合体にしてオブジェクト変数に格納していることはおわかりですね。
毎日30分かかる事務作業のルーティンワーク。
エクセルのマクロなら1秒で!
その作業、VBAid(ブイビーエイド)にお任せしませんか?
『新装改訂版 Excel VBA 本格入門』
~マクロ記録・If文・ループによる日常業務の自動化から高度なアプリケーション開発までVBAのすべてを完全解説~
Chapter2 VBAの基本構文を理解する
Chapter3 ブックとシートをVBAで操作する
Chapter4 セルをVBAで操作する
Chapter5 変数を理解する
Chapter6 条件分岐を理解する
Chapter7 繰り返し処理(ループ)を理解する
Chapter8 対話型のマクロを作る
Chapter10 ユーザーフォーム
Chapter11 基本的な入力や表示を行うコントロール
Chapter12 選択を行うコントロール
Chapter13 そのほかの便利なコントロール
Chapter14 文字列を操作する関数
Chapter15 日付や時刻を操作する関数
Chapter16 そのほかの便利な関数
Chapter17 マクロの連携とユーザー定義関数
Chapter18 イベントマクロ
Chapter19 エラー処理
Chapter20 画面表示と組み込みダイアログボックス
Chapter21 グラフをVBAで操作する
Chapter22 ファイルの操作
『いつもの作業を自動化したい人の Excel VBA 1冊目の本』
Excel VBAは、一人ひとりの作業のあり方、いえ、ひいてはあなたの時間の使い方、すなわち「人生すら変えてしまう」パワーがあります!
本書は、Excel VBAを使いこなしたい方がどこでつまずいてしまうのかを徹底的に研究して書き上げた「1冊目」の決定版です!
まずは第1章の立ち読みから(スマホ対応)→ こちら
→ Amazonへ
最近の画像つき記事
-
ソフィア・ケニン、リヨン・オープン優勝!(女子テニス359)
-
ソフィア・ケニン、リヨン・オープン決勝進出!(女子テニス358)
-
ソフィア・ケニン、全豪オープン2020優勝!ガルビネ・ムグルッサを撃破!(女子テニス357)
-
ソフィア・ケニン、大大大金星!アシュリー・バーティーを撃破!(全豪オープン2020)(女子テニス356)
-
ソフィア・ケニン、勝つには勝ったが・・・(全豪オープン2020)(女子テニス355)
-
ココ・ガウフはなぜ負けたのか(全豪オープン2020)(女子テニス354)
-
大坂なおみは、なぜココ・ガウフに負けたのか(全豪オープン2020)(女子テニス353)
-
ワン・チャン、セレナ・ウィリアムズを撃破!ココ・ガウフ、大坂なおみを撃破(全豪オープン2020)(女子テニス352)
-
ベンチッチ、オスタペンコを撃破!(全豪オープン2020)(女子テニス351)
-
シャラポワはこのまま引退してしまうのか?(全豪オープン2020)(女子テニス350)