(34) 自分仕様の「表検索」機能を作成する!
1. CurrentRegion が示すセル範囲とは?
2. CurrentRegion を利用して、自分仕様の「表検索」 機能を実装する
「広告」
(34) 自分仕様の「表検索」機能を作成する!
Excel メニューバーの [ヘルプ] - [更新プログラムのチェック] にて、適用されていないアップデートがあれば行ってください。
Excel 2016 for Mac 環境での説明となりますので、 Mac版 Excel 2011 では( VBA が利用できますが )同じ結果にならない場合があるかもしれません。
現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)
前回使用した XLSM ファイルを、「マクロを有効」にして開きます。
今回は、まだデータ入力していない「Sheet4」ワークシートを用い、VBAコードも「Sheet4」に実装します!
行方向(行を上から下)に検索したい「列」を含むセルをダブルクリックすると、「キーワード」入力のための InputBox が開く。
次の行をダブルクリックすれば、そこからもう一度検索も可能。
'----------------------------------------
' 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 が示すセル範囲とは?
CurrentRegion プロパティが示すセル範囲は、上記画面で示したセル範囲となる。
上記セル範囲内のセルを1つ以上選択している場合、指定したセルを含む「表全体」が参照される。
このとき参照される「表全体」のセル範囲を「アクティブセル領域」といいます。
今回の実装例は「行方向で上から下に検索」するパターンだが、このVBAコードを参考にすれば「列方向に検索」することもできるはずだ。
2. CurrentRegion を利用して、自分仕様の「表検索」 機能を実装する
CurrentRegion を利用すれば選択したセルを含む「表全体」が参照できるため、 CurrentRegion が示すセル範囲限定で 検索を行えば良い。
Cancel = True は、セルをダブルクリックした際の「セル内編集」になるのをキャンセルするため。
region1 には、 CurrentRegion が示すセル範囲内の一番左上のセルがセットされる!
VBの Trim関数 は、文字列内の「前後」の空白を取り除くもの。
文字列内の「前」の空白を取り除く LTrim関数 、「後」の空白を取り除く RTrim関数 もある。
VB の Like演算子 は正規表現のようなマッチング(あくまでも簡易的なもの)が可能で、そのマッチング結果として True か False を返す。
Trimをかけた文字列の前後に「0個以上の任意の文字」でマッチする * を付加して、キーワードが含まれる場合 True を返すようにした。
* 以外に使用可能なマッチング文字列を含め、詳細は「VBA Like演算子」で検索して出てくる以下サイト等を参照して頂きたい。
【自宅でプログラミング!】比較演算子 ( Like も含む)
Cancel = True は、セルをダブルクリックした際の「セル内編集」になるのをキャンセルするため。
region1 には、 CurrentRegion が示すセル範囲内の一番左上のセルがセットされる!
VBの Trim関数 は、文字列内の「前後」の空白を取り除くもの。
文字列内の「前」の空白を取り除く LTrim関数 、「後」の空白を取り除く RTrim関数 もある。
VB の Like演算子 は正規表現のようなマッチング(あくまでも簡易的なもの)が可能で、そのマッチング結果として True か False を返す。
Trimをかけた文字列の前後に「0個以上の任意の文字」でマッチする * を付加して、キーワードが含まれる場合 True を返すようにした。
* 以外に使用可能なマッチング文字列を含め、詳細は「VBA Like演算子」で検索して出てくる以下サイト等を参照して頂きたい。
【自宅でプログラミング!】比較演算子 ( Like も含む)
Resize は基準セルを行(下)・列(右)方向にセル選択範囲を拡張するもので、「1」なら基準セルから拡張無しとなる。
今回は Select メソッドを利用してマッチした行をセル選択しているが、応用すれば背景色や文字属性も変更可能だ。
次回も、 復習を含め セル参照に関して説明します!
お疲れ様でした!
[command] + [Q] にてExcel を終了時、「作業中のブック」を保存するか確認のダイアログ画面が表示されるため 「保存」しましょう。
現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)
「広告」amazon WINTER SALE
最後まで読んでいただき、ありがとうございます。ぜひ、右側の「人気ブログランキング」投票に ご協力ください。
また、お越しくださいませ。
// アタル
「広告」
コメント