記事キャッチ画像 (36) 自分仕様の「表検索3(表内の全てのセルが検索対象)」の作成! 

 1. CurrentRegion を利用して、「列・行方向順の」表検索 機能を実装する 

 2. VBAコードの説明 


  「広告」  
 


 (36) 自分仕様の「表検索3(表内の全てのセルが検索対象)」の作成! 


Excel メニューバーの [ヘルプ] - [更新プログラムのチェック] にて、適用されていないアップデートがあれば行ってください。 

Excel 2016 for Mac 環境での説明となりますので、 Mac版 Excel 2011 では( VBA が利用できますが )同じ結果にならない場合があるかもしれません。

現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)

前回使用した XLSM ファイルを、「マクロを有効」にして開きます。
今回は、まだデータ入力していない「Sheet4」ワークシートを用い、VBAコードも「Sheet4」に実装します!(今回は、前回実装したコードの修正)

任意のセルをダブルクリックすると、「キーワード」入力のための InputBox が開く。
「ダブルクリックしたセルの右側」のセルから対象の表内を「列方向・行方向」順に検索し、キーワードを含むセルを選択する

45

18

再度ダブルクリックすると、「そのセルの右側」のセルからさらに検索を行う。

22

45

56



Rem
Rem    Sheet4 (Sheet4)
Rem

Option Explicit

'----------------------------------------
'    Event: Worksheet_BeforeDoubleClick() [ Ver.3 ]
'----------------------------------------
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    Dim str As String
    Dim aRange As Range
    Dim cellOvered As Boolean

    Cancel = True
    cellOvered = False

    str = InputBox("検索キーワードを入力してください", "キーワード", "")
    str = "*" & Trim(str) & "*"

    For Each aRange In Target.CurrentRegion

        If cellOvered Then
            If aRange.Value Like str Then
                aRange.Select
                Exit For
            End If
        Else
            If aRange.Address(False, False) = Target.Address(False, False) Then
                cellOvered = True
            End If
        End If

    Next aRange

End Sub


 1. CurrentRegion を利用して、「列・行方向順の」表検索 機能を実装する 

11

CurrentRegion プロパティが示すセル範囲は、上記画面で示したセル範囲となる。
上記セル範囲内のセルを1つ以上選択している場合、指定したセルを含む「表全体」が参照される。
このとき参照される「表全体」のセル範囲を「アクティブセル領域」といいます。

今回の実装例は、表内( CurrentRegion )のセル全てを対象として「該当行を列方向で左から右に検索後その下の行に移り同様の検索を行う」パターン。


 2. VBAコードの説明 

Boolean型 の変数 cellOvered はいわゆるスイッチとして使用される。
表内( CurrentRegion )を上記の順で検索し、ダブルクリックしたセルまで繰り返し処理を進め、値を False から True に変更する。
なお、 Rangeオブジェクトの Address(False, False) プロパティ は、「A1」や「C3」等の、セルの列・行を示す文字列を示す。

そのため、その右側のセルから Like演算子を用いたマッチング処理が行われる。
このサンプルコードだと、ダブルクリックしたセルにキーワードが含まれていても無視される点に注意してほしい。
マッチングした場合は、そのセルを選択後 Exit For にて 繰り返し処理を中断する。

If cellOvered Then は、「 If cellOvered = True Then 」の省略形だ。
条件式は最終的に True か False となるため、Boolean変数の場合  = True を書かなくても良い。

前回、前々回のコード(Sheet4モジュールの先頭)に、 Option Explicit を忘れていて申し訳ない。
変数の宣言を忘れてもエラーにならずにバグを誘発する可能性があるので、皆さんは忘れないよう努めてほしい。


次回は、 UsedRange を説明します


お疲れ様でした!
[command] + [Q] にてExcel を終了時、「作業中のブック」を保存するか確認のダイアログ画面が表示されるため 「保存」しましょう。
現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)



「広告」
最後まで読んでいただき、ありがとうございます。
ぜひ、右側の「人気ブログランキング」投票に ご協力ください。
また、お越しくださいませ。
// アタル

  「広告」