(36) 自分仕様の「表検索3(表内の全てのセルが検索対象)」の作成!
1. CurrentRegion を利用して、「列・行方向順の」表検索 機能を実装する
2. VBAコードの説明
Excel メニューバーの [ヘルプ] - [更新プログラムのチェック] にて、適用されていないアップデートがあれば行ってください。
Excel 2016 for Mac 環境での説明となりますので、 Mac版 Excel 2011 では( VBA が利用できますが )同じ結果にならない場合があるかもしれません。
現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)
前回使用した XLSM ファイルを、「マクロを有効」にして開きます。
今回は、まだデータ入力していない「Sheet4」ワークシートを用い、VBAコードも「Sheet4」に実装します!(今回は、前回実装したコードの修正)
任意のセルをダブルクリックすると、「キーワード」入力のための InputBox が開く。
「ダブルクリックしたセルの右側」のセルから対象の表内を「列方向・行方向」順に検索し、キーワードを含むセルを選択する。
再度ダブルクリックすると、「そのセルの右側」のセルからさらに検索を行う。
CurrentRegion プロパティが示すセル範囲は、上記画面で示したセル範囲となる。
上記セル範囲内のセルを1つ以上選択している場合、指定したセルを含む「表全体」が参照される。
このとき参照される「表全体」のセル範囲を「アクティブセル領域」といいます。
今回の実装例は、表内( CurrentRegion )のセル全てを対象として「該当行を列方向で左から右に検索後、その下の行に移り同様の検索を行う」パターン。
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 を忘れていて申し訳ない。
変数の宣言を忘れてもエラーにならずにバグを誘発する可能性があるので、皆さんは忘れないよう努めてほしい。
お疲れ様でした!
[command] + [Q] にてExcel を終了時、「作業中のブック」を保存するか確認のダイアログ画面が表示されるため 「保存」しましょう。
現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)
ぜひ、右側の「人気ブログランキング」投票に ご協力ください。
また、お越しくださいませ。
// アタル
1. CurrentRegion を利用して、「列・行方向順の」表検索 機能を実装する
2. VBAコードの説明
「広告」
(36) 自分仕様の「表検索3(表内の全てのセルが検索対象)」の作成!
Excel メニューバーの [ヘルプ] - [更新プログラムのチェック] にて、適用されていないアップデートがあれば行ってください。
Excel 2016 for Mac 環境での説明となりますので、 Mac版 Excel 2011 では( VBA が利用できますが )同じ結果にならない場合があるかもしれません。
現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)
前回使用した XLSM ファイルを、「マクロを有効」にして開きます。
今回は、まだデータ入力していない「Sheet4」ワークシートを用い、VBAコードも「Sheet4」に実装します!(今回は、前回実装したコードの修正)
任意のセルをダブルクリックすると、「キーワード」入力のための InputBox が開く。
「ダブルクリックしたセルの右側」のセルから対象の表内を「列方向・行方向」順に検索し、キーワードを含むセルを選択する。
再度ダブルクリックすると、「そのセルの右側」のセルからさらに検索を行う。
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 を利用して、「列・行方向順の」表検索 機能を実装する
CurrentRegion プロパティが示すセル範囲は、上記画面で示したセル範囲となる。
上記セル範囲内のセルを1つ以上選択している場合、指定したセルを含む「表全体」が参照される。
このとき参照される「表全体」のセル範囲を「アクティブセル領域」といいます。
今回の実装例は、表内( CurrentRegion )のセル全てを対象として「該当行を列方向で左から右に検索後、その下の行に移り同様の検索を行う」パターン。
2. VBAコードの説明
表内( 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コード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)
「広告」
最後まで読んでいただき、ありがとうございます。ぜひ、右側の「人気ブログランキング」投票に ご協力ください。
また、お越しくださいませ。
// アタル
「広告」
コメント