記事キャッチ画像
 (34) 自分仕様の「表検索」機能を作成する! 

 1. CurrentRegion が示すセル範囲とは? 

 2. CurrentRegion を利用して、自分仕様の「表検索」 機能を実装する 
  「広告」  
 


  (34) 自分仕様の「表検索」機能を作成する! 


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

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

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

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

行方向(行を上から下)に検索したい「列」を含むセルをダブルクリックすると、「キーワード」入力のための InputBox が開く。
19

46

次の行をダブルクリックすれば、そこからもう一度検索も可能。

23

44

25


'----------------------------------------
'    Event: Worksheet_BeforeDoubleClick()
'----------------------------------------
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    Dim row As Long
    Dim col As Long
    Dim region1 As Range
    Dim str As String

    Cancel = True

    col = Target.Column

    For Each region1 In Target.CurrentRegion
        Exit For
    Next region1

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

    For row = Target.Row To (region1.Row + Target.CurrentRegion.Rows.Count - 1)
        If Cells(row, col).Value Like str Then
            Cells(row, region1.Column).Resize(1, Target.CurrentRegion.Columns.Count).Select
            Exit For
        End If
    Next row

End Sub


 1. CurrentRegion が示すセル範囲とは? 

11

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

今回の実装例は「行方向で上から下に検索」するパターンだが、このVBAコードを参考にすれば「列方向に検索」することもできるはずだ。


 2. CurrentRegion を利用して、自分仕様の「表検索」 機能を実装する 

CurrentRegion を利用すれば選択したセルを含む「表全体」が参照できるため、 CurrentRegion が示すセル範囲限定で 検索を行えば良い。

Cancel = True は、セルをダブルクリックした際の「セル内編集」になるのをキャンセルするため。

region1 には、 CurrentRegion が示すセル範囲内の一番左上のセルがセットされる!

VBの Trim関数 は、文字列内の「前後」の空白を取り除くもの。
文字列内の「前」の空白を取り除く LTrim関数 、「後」の空白を取り除く RTrim関数 もある。

VB の Like演算子 は正規表現のようなマッチング(あくまでも簡易的なもの)が可能で、そのマッチング結果として TrueFalse を返す。
Trimをかけた文字列の前後に「0個以上の任意の文字」でマッチする * を付加して、キーワードが含まれる場合 True を返すようにした。
 * 以外に使用可能なマッチング文字列を含め、詳細は「VBA Like演算子」で検索して出てくる以下サイト等を参照して頂きたい。
 【自宅でプログラミング!】比較演算子 ( Like も含む)  

Resize は基準セルを行(下)・列(右)方向にセル選択範囲を拡張するもので、「1」なら基準セルから拡張無しとなる。
今回は Select メソッドを利用してマッチした行をセル選択しているが、応用すれば背景色や文字属性も変更可能だ。


次回も、 復習を含め セル参照に関して説明します


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


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

  「広告」