記事キャッチ画像 (37) Worksheet.UsedRange と Range.CurrentRegion を理解する 

 1. CurrentRegion はワークシート内に複数存在可能だが、UsedRange は一つだけ 

 2. UsedRange 範囲は微妙すぎるが、少なくとも UsedRange 範囲内に全ての CurrentRegion が含まれる 


  「広告」  
 


  (37) Worksheet.UsedRange と Range.CurrentRegion を理解する 


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

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

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

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

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

つまり、「セルの背景色の変更と罫線付加」を除けば、前回と同じ検索コードのままだ。

27


Rem
Rem    Sheet4 (Sheet4)
Rem

Option Explicit

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

    ActiveSheet.UsedRange.Interior.Color = vbYellow

    Target.CurrentRegion.BorderAround LineStyle:=xlContinuous, _
                            ColorIndex:=3, Weight:=xlMedium

    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 はワークシート内に複数存在可能だが、UsedRange は一つだけ 

18

任意のセルをダブルクリックすると、 UsedRange 範囲の背景色を黄色に変更する。
また、 CurrentRegion 範囲の外枠に赤色の罫線を付加する。
前回のVBAコードに上記2項目(2行のコード)を付け足しただけのため、この2行以外は前回の説明を参照してほしい。

50

「D12」セルをダブルクリックすると「B3」セル時と異なり、「B2:G2」の背景色が余分に黄色になったことに注目して欲しい。
どうやら、罫線を付加した影響のようだ。
UsedRange はセル未入力状態でも、罫線や背景色の変更だけで範囲が変わってしまうらしい。
プログラムで取り扱うには、ちょっと微妙だと思う。

UsedRange は ワークシートに1つだけのため、シートオブジェクトのプロパティとなる。
よって省略時は、今回のコードでは敢えて記述したが ActiveSheet オブジェクトの UsedRange となる。
あるいは、「 Sheets("Sheet4").UsedRange 」のように指定が必要。

上記画面のとおり、CurrentRegion はワークシート内に複数存在可能だが、UsedRange は一つだけとなる。


 2. UsedRange 範囲は微妙すぎるが、少なくとも UsedRange 範囲内に全ての CurrentRegion が含まれる 

少なくとも UsedRange 範囲内に全ての CurrentRegion が含まれるため、UsedRange 範囲内で(複数の) CurrentRegion を探すようなVBAコードが想定される。

最後に、追加した2行のコードの説明を…

ActiveSheet.UsedRange は、UsedRange と記述しても大丈夫だ。
で、その背景色を黄色に変更。

Range.BorderAround メソッドは、指定したセル範囲の外枠罫線を引く
詳細は後日、「VBAコードで罫線を引く」際に解説するが、LineStyle で罫線の種類、 ColorIndex で罫線の色、 Weight で罫線の太さを指定している。


次回も、 セル 関連の説明を続けます


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



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

  「広告」