ウィンドウ | Excel作業をVBAで効率化 https://vbabeginner.net いつものExcel作業はVBAを使えば数秒で終わるかもしれませんよ Sat, 09 Nov 2024 13:48:17 +0000 ja hourly 1 https://wordpress.org/?v=6.6.2 https://vbabeginner.net/wp-content/uploads/2019/02/favicon-150x150.png ウィンドウ | Excel作業をVBAで効率化 https://vbabeginner.net 32 32 VBAで数式バーの表示と非表示を切り替える https://vbabeginner.net/show-or-hide-the-formula-bar/ Wed, 07 Jul 2021 15:35:40 +0000 https://vbabeginner.net/?p=6213 数式バーの設定

数式バーの設定はバージョンによって異なりますが、Office365ではリボンの表示タブ→表示セクション→数式バー のチェックで切り替えられます。

以前のバージョンではExcelのオプション→詳細設定→表示→数式バーを表示する のチェックで切り替えられます。この設定はOffice365でも残っています。

余談ですが、数式バーの設定は通常は変わらないのですが、他人から受け取ったブックの場合にその人が数式バーを非表示にしてると、その設定が自分のExcelの設定にまで影響して数式バーが表示されない、なんてことがOffice2003までのバージョンでは発生していましたが、いつのころからか少なくともOffice365では見かけなくなりました。見かけなくはなりましたが、たまたまかもしれません。

リボンの表示タブから操作できるため需要は少ないとは思いますが、数式バーの表示と非表示を切り替えるマクロを紹介します。

数式バーの表示と非表示を切り替えるマクロ

以下の関数は、現時点の数式バーの表示状態を取得し、表示していれば非表示に、非表示であれば表示に、切り替えます。

Sub ChangeDisplayFormulaBar()
    Dim bStatus     As Boolean  '// 数式バーの状態
    
    bStatus = Application.DisplayFormulaBar
    
    '// 数式バーが表示されている場合
    If bStatus = True Then
        '// 非表示にする
        Application.DisplayFormulaBar = False
    '// 数式バーが非表示の場合
    Else
        '// 表示する
        Application.DisplayFormulaBar = True
    End If
End Sub

設定切り替えマクロ

数式バーの他にも、状況に応じて切り替えを行いたい設定があります。以下もご参照ください。

]]>
セル以外を選択中に直前の選択セル範囲を取得する https://vbabeginner.net/get-selected-cell-range/ Thu, 04 Apr 2019 17:34:06 +0000 https://vbabeginner.net/?p=4203 RangeSelectionプロパティ

現在の選択セル範囲を参照する場合にSelectionプロパティを利用することが多々あります。

ただ、Selectionプロパティはセル範囲だけでなくオートシェイプやグラフなどのセル以外も「選択している対象」として利用することができるため、Selection=選択セル範囲という前提のコードを書くと、セル以外を選択しているときにエラーが発生することになります。

Excelではセルと図を同時に選択することは出来ないように、1度に選択できる対象は1種類に限定されますが、現時点で図やグラフを選択していても、その直前まで選択していたセル範囲の情報が欲しい場合があります。

例えば、先にA1からB3セルまでを選択しているとします。

その後、オートシェイプを選択します。その場合セルの選択状態は外れます。

この状態のときに、直前に選択していたA1からB3セルの選択状態が欲しい場合に、RangeSelectionプロパティを利用します。

なお、セルを選択している状態であっても、RangeSelectionプロパティを使えばもちろんセル範囲の情報を取得できます。

構文

Window.RangeSelection As Range

親オブジェクト 親オブジェクトとしてWindowオブジェクトを指定します。

Selectionプロパティの場合は親オブジェクト不要ですがRangeSelectionプロパティの場合は必須です。

戻り値 直近の選択セル範囲を示すRangeオブジェクトを返します。

RangeSelectionプロパティの用途

多くの場合はSelectionプロパティで事足りますが、グラフや図がある場合にはそれらを選択している場合のエラー回避を考慮する必要があります。

そのような場合やどうしてもセルのRangeオブジェクトが必要な場合や、上記エラー処理自体が面倒な場合にはRangeSelectionプロパティを利用します。

多くの場合はSelectionプロパティよりもRangeSelectionプロパティを使った方が利点が多いと思われます。

ただ、欠点として必ずWindowオブジェクトを指定しなければならない点があります。

WindowオブジェクトであればActiveWindowオブジェクトを使うことが一番多いと思いますので、大抵の場合は「ActiveWindow.RangeSelection」と書いて選択セル範囲を参照すればいいのですが、他ウィンドウの処理を行う場合などはWindowsコレクションを利用する必要が場合によっては出てきたりします。

場合によってはセルが選択されていない場合はエラーとして、セルが選択されていないことを通知するための処理しなければならないこともありますので、そのような場合はむしろRangeSelectionプロパティは邪魔になります。

と、ここまで書いてますが私自身はSelectionプロパティを使うことの方が圧倒的に多いです。

サンプルコード

選択セル範囲をSelectionプロパティではなくRangeSelectionプロパティを使って取得するサンプルです。

6行目が「Set rSelection = Selection」になればSelectionプロパティでの書き方になります。

Sub RangeSelectionTest()
    Dim rSelection  As Range    '// 選択セル範囲
    Dim r           As Range    '// ループ中の1セル
    
    '// 直近の選択セル範囲を取得
    Set rSelection = ActiveWindow.RangeSelection
    
    '// 選択セル範囲の位置を出力
    Debug.Print rSelection.Address(False, False)
    
    '// 1セルずつループ
    For Each r In rSelection
        '// 対象セルの位置を出力
        Debug.Print r.Address(False, False)
    Next
End Sub

実行結果
A1:B3
A1
B1
A2
B2
A3
B3

]]>
VBAでセルの数値0の表示と非表示を切り替える https://vbabeginner.net/showhide-cell-number-zero/ Sun, 31 Mar 2019 09:53:17 +0000 https://vbabeginner.net/?p=4183 DisplayZerosプロパティ

セルに入力されている数式の結果や数値が0の場合、通常であれば右寄せで0が表示されます。

この0の表示をDisplayZerosプロパティで表示と非表示を設定することが出来ます。

構文

参照時
Window.DisplayZeros

設定時
Window.DisplayZeros As Boolean

親オブジェクト Windowオブジェクトを指定します。

通常はアクティブウィンドウを指すActiveWindowを指定することが多いと思います。

設定値 Boolean型のTrueを指定した場合は数値0のセルには0と表示され、Falseの場合は非表示(空欄)になります。

シートが分割されている場合、分割された両方のシートの数値・数式0の表示状態が切り替わります。

注意点1:前回保存時の状態が引き継がれる

数値0の表示と非表示の設定はブックの保存時にシートの情報として保存されます。

そのため、ブックを閉じて次に開いたときに、前回開いたときのDisplayZerosの設定状態で開かれます。

通常はわざわざ数値0のセルを非表示にすることは少ないと思いますので、しばらく年月が経ったあとに開いたブックで数値0を非表示にしていることを忘れていて、「空欄のセルがあるのはなぜ?」と思ってしまう恐れがあります。

注意点2:文字列”0″のセル

文字列として”0″が設定されているセルの場合は、DisplayZeros = False としても非表示にはなりません。

非表示になるのは数値として0で表示されている場合に限ります。

サンプルコード

セルの数値・数式0の表示と非表示を切り替えるコードです。

Sub DisplayZerosChange()
    ActiveWindow.DisplayZeros = Not ActiveWindow.DisplayZeros
End Sub

数式は以下のようになっているとします。

Trueを設定すると0のセルも表示されます。

Falseを設定すると非表示(空欄)になります。
 

]]>
VBAでシートの見出し(タブ)の表示と非表示を行う https://vbabeginner.net/showhide-sheet-tabs/ Sun, 31 Mar 2019 08:11:44 +0000 https://vbabeginner.net/?p=4178 DisplayWorkbookTabsプロパティ

Excelのオプションの詳細設定から「シート見出しを表示する」のチェックを付けると見出しが表示され、チェックを外すと見出しが非表示になります。

見出し表示時

見出し非表示時

 

同様のことをVBAで行う場合はDisplayWorkbookTabsプロパティを利用します。

なお、シート見出しが非表示の場合でも、シートの選択を行うショートカット「Ctrl + Shift + PageUp/PageDown」を実行するとシートが切り替わります。

構文

参照時
Window.DisplayWorkbookTabs

設定時
Window.DisplayWorkbookTabs As Boolean

親オブジェクト Windowオブジェクトを指定します。

通常はアクティブウィンドウを指すActiveWindowを指定することが多いと思います。

設定値 Boolean型のTrueを指定した場合はシートの見出しが表示され、Falseの場合は非表示になります。

シートが分割されている場合、分割された両方のシートの見出しの表示状態が切り替わります。

ブック保存時に設定内容も保存される

DisplayWorkbookTabsプロパティの設定内容はブック保存時に保存されます。

そのため、前回保存時にシート見出しを非表示にしていると、次回ブックを開いたときもシート見出しは非表示になっています。

シート見出しを非表示にすることはあまりしないと思いますので、しばらく開かなかったブックを久しぶりに開いたときにシート見出しがなくて、そもそもDisplayWorkbookTabsプロパティやExcelのオプションの詳細設定の存在自体を忘れていると、「なんでシートの見出しがないの?」となりかねません。

誰が見るか分からないような仕事で使う共有の資料などの場合はシートの見出しを非表示にしても大丈夫かどうかを判断してからブックの保存を行うようにしたほうがいいかもしれません。

サンプルコード

シートの見出しの表示と非表示を切り替えるコードです。

Sub DisplayWorkbookTabsChange()
    ActiveWindow.DisplayWorkbookTabs = Not ActiveWindow.DisplayWorkbookTabs
End Sub

]]>
VBAでページレイアウトの余白の表示と非表示を行う https://vbabeginner.net/showhide-page-layout-margins/ Sun, 31 Mar 2019 07:02:01 +0000 https://vbabeginner.net/?p=4173 DisplayWhitespaceプロパティ

シートをページレイアウト状態で表示した際に、ページ間にあるグレー部分(絵の赤丸部分)をクリックすると、余白の表示を非表示を切り替えることが出来ます。

表示から非表示への切り替え

 

非表示から表示への切り替え

 

VBAで同様の操作を行う場合はDisplayWhitespaceプロパティを利用します。

「標準」や「改ページプレビュー」の場合にDisplayWhitespaceプロパティを設定した場合、見た目では変化がありませんが、「ページレイアウト」にするとDisplayWhitespaceプロパティの設定内容で表示されます。

構文

参照時
Window.DisplayWhitespace

設定時
Window.DisplayWhitespace As Boolean

親オブジェクト Windowオブジェクトを指定します。

通常はアクティブウィンドウを指すActiveWindowを指定することが多いと思います。

設定値 Boolean型のTrueを指定した場合はセルにページレイアウト時に余白が表示され、Falseの場合は余白が非表示になります。

シートが分割されている場合、分割された両方のシートの余白の表示状態が切り替わります。

サンプルコード

ページレイアウトで余白を非表示にするコードです。

Sub DisplayWhitespaceTest()
    ActiveWindow.DisplayWhitespace = False
End Sub

 

ページレイアウトで余白の表示と非表示を切り替えるコードです。Not演算子により元の値を反転させて設定しています。

Sub DisplayWhitespaceChange()
    ActiveWindow.DisplayWhitespace = Not ActiveWindow.DisplayWhitespace
End Sub

]]>
VBAでページレイアウトのルーラの表示と非表示を行う https://vbabeginner.net/showhide-page-layout-rulers/ Fri, 29 Mar 2019 17:16:02 +0000 https://vbabeginner.net/?p=4154 DisplayRulerプロパティ

Excelではシートの表示方法に「標準」「ページレイアウト」「改ページプレビュー」の3つがあります。

このうちの「ページレイアウト」ではルーラーを表示するかどうかを切り替えることが出来ます

VBAではルーラーの表示と非表示の状態の参照や設定をDisplayRulerプロパティで行います。

なお、ルーラーは「ページレイアウト」のときにしか利用できませんので、「標準」や「改ページプレビュー」のときにはDisplayRulerプロパティは無効になります。

構文

参照時
Window.DisplayRuler

設定時
Window.DisplayRuler As 設定値(Boolean)

親オブジェクト Windowオブジェクトを指定します。

通常はアクティブウィンドウを指すActiveWindowを指定することが多いと思います。

設定値 Boolean型のTrueを指定した場合はルーラーを表示し、Falseの場合はルーラーの非表示にします。

シートが分割されている場合、分割された両方のルーラーの表示や非表示が同時に設定されます。

ページレイアウト表示ではない場合

シートの表示が「標準」や「改ページプレビュー」の場合、DisplayRulerプロパティの設定を行っても画面上では変わったようには見えません。

しかし状態はちゃんと保存されており、「ページレイアウト」に変更すると直前に設定したDisplayRulerプロパティの内容が反映されます。

サンプルコード

ルーラの表示と非表示を切り替えるコードです。

Sub DisplayRulerChange()
    ActiveWindow.DisplayRuler = Not ActiveWindow.DisplayRuler
End Sub

ルーラーが表示されている状態

 

ルーラーが非表示の状態

]]>
VBAで列見出しの並び順を変える https://vbabeginner.net/change-order-column-headings/ Thu, 28 Mar 2019 17:30:55 +0000 https://vbabeginner.net/?p=4151 DisplayRightToLeftプロパティ

シートの列の並び順を左からにするか右からにするかを指定する場合にDisplayRightToLeftプロパティを利用します。

通常はシートの列は左からA、B、C、、と並んでいますが、右からも並べることが出来ます。

右から順に並ぶようにすると挙動も変わります。

例えば画像をセルに貼り付ける場合、通常は指定セルから右下に向かって画像が貼り付けられますが、逆順にした場合は指定セルから左下に向かって貼り付けられます。

このように挙動も変わるため、逆順にするとほとんどの方は使いづらくなるだけだと思います。

ブックを開いたときは前回保存したときの列の並び順で表示されるため、右から順に表示した状態で保存していると、次に開いたときも右から順に並んだ状態で表示されます。

構文

参照時
Window.DisplayRightToLeft

設定時
Window.DisplayRightToLeft = 設定値(Boolean)

親オブジェクト Windowオブジェクトを指定します。

通常はアクティブウィンドウを指すActiveWindowを指定することが多いと思います。

設定値 Boolean型のTrueを指定した場合は右から順に列を表示し、Falseの場合は通常表示の左から順に列が表示されます。

シートが分割されている場合、分割された両方の列の並び順が同時に設定されます。

サンプルコード

右から順に列を並べるサンプルコードです。

Sub DisplayRightToLeftTest()
    ActiveWindow.DisplayRightToLeft = True
End Sub

]]>
VBAでアウトライン(グループ化)の表示と非表示を切り替える https://vbabeginner.net/showhide-outlines/ Thu, 28 Mar 2019 15:46:19 +0000 https://vbabeginner.net/?p=4145 DisplayOutlineプロパティ

DisplayOutlineプロパティを使うと、シートの上や左に表示されるアウトライン(グループ化)の表示状態の参照や、表示・非表示の設定を行うことが出来ます。

前回の状態にかかわらず、Excel起動時はアウトラインが表示状態のため以下のような表示になります。

 

非表示にするとアウトラインが表示されません。

構文

参照時
Window.DisplayOutline

設定時
Window.DisplayOutline = 設定値(Boolean)

親オブジェクト Windowオブジェクトを指定します。

通常はアクティブウィンドウを指すActiveWindowを指定することが多いと思います。

設定値 BooleanのTrueかFalseを設定します。

Trueの場合はアウトラインが表示され、Falseの場合は非表示になります。

ブックを閉じるときに非表示にしても次回Excel起動時に表示状態になる

ブックを閉じるときにDisplayOutlineプロパティにFalseを設定してアウトラインを非表示の状態にしてブックを閉じても、次回Excel起動時には再度アウトラインが表示された状態になります。

言い換えれば、アウトラインを非表示にしたい場合はExcel起動後に必ずDisplayOutlineにFalseを設定するコードを実行する必要があることになります。

Excel起動時に表示状態になる仕様にしているのは、Excel起動時の見た目でユーザーが混乱することを避けるためと思われます。

シートの行と列を分割している場合

シートの行や列を分割して表示している場合にDisplayOutlineプロパティの設定を行うと、分割した両方のアウトラインの表示状態が設定されます。

分割した片方だけのアウトラインを非表示にする、ということは出来ません。

サンプルコード

アウトラインの表示と非表示を切り替えるサンプルコードです。

Not演算子で現在の表示状態を判定させた値を設定値としています。

Sub DisplayOutlineChange()
    ActiveWindow.DisplayOutline = Not ActiveWindow.DisplayOutline
End Sub

]]>
VBAでスクロールバーの表示と非表示を設定する https://vbabeginner.net/showhide-scrollbar/ Wed, 27 Mar 2019 16:26:44 +0000 https://vbabeginner.net/?p=4140 DisplayHorizontalScrollBar、DisplayVerticalScrollBarプロパティ

ウィンドウのスクロールバーの表示と非表示を設定する場合にDisplayHorizontalScrollBarプロパティとDisplayVerticalScrollBarプロパティを利用します。

DisplayHorizontalScrollBarプロパティは名前の通り水平スクロールバー、DisplayVerticalScrollBarプロパティは垂直スクロールバーの操作を行います。

シートの表示は縦や横に分割することが出来ますが、分割している場合にスクロールバーの表示と非表示を行うと、分割した両方のスクロールバーが両方とも表示や非表示になります。

こちらはウィンドウ分割時のスクロールバー表示時の状態です。

 

こちらは非表示の状態です。分割した右側だけや上側だけスクロールバーを非表示にする、ということは出来ません。

構文

DisplayHorizontalScrollBar構文

参照時
Window.DisplayHorizontalScrollBar

設定時
Window.DisplayHorizontalScrollBar As Boolean

DisplayHorizontalScrollBar構文

参照時
Window.DisplayVerticalScrollBar

設定時
Window.DisplayVerticalScrollBar As Boolean

DisplayHorizontalScrollBarプロパティとDisplayVerticalScrollBarプロパティはどちらも参照方法と設定方法が同じです。

親オブジェクト Windowオブジェクトを指定します。通常はアクティブウィンドウを指すActiveWindowを指定することが多いと思います。
設定値 Boolean型のTrueを指定した場合はスクロールバーを表示し、Falseの場合は非表示になります。

シートが分割されている場合、分割された両方のスクロールバーがともに表示と非表示が同時に設定されます。

サンプルコード

実行する度に水平スクロールバーの表示と非表示を切り替えるコードです。

Not演算子を使って、元の状態の逆を設定するようにしています。

Sub DisplayHorizontalScrollBarChange()
    ActiveWindow.DisplayHorizontalScrollBar = Not ActiveWindow.DisplayHorizontalScrollBar
End Sub

 

実行する度に垂直スクロールバーの表示と非表示を切り替えるコードです。

Sub DisplayVerticalScrollBarChange()
    ActiveWindow.DisplayVerticalScrollBar = Not ActiveWindow.DisplayVerticalScrollBar
End Sub

]]>
VBAでウィンドウの表示倍率(Zoom)を変更する https://vbabeginner.net/zoom/ Tue, 26 Mar 2019 16:36:18 +0000 https://vbabeginner.net/?p=4137 Zoomプロパティ

ウィンドウの表示倍率を変更する場合はZoomプロパティを利用します。

倍率はパーセント値を10(%)から400(%)の範囲で設定します。

範囲外の値を設定した場合は「実行時エラー’1004′: WindowクラスのZoomプロパティを設定できません。」のエラーになります。

Zoomプロパティはアクティブシートだけが対象

Zoomプロパティはアクティブシートにのみ設定可能です。

そのため、例えば全シートのZoomを100%にしたい場合は、各シートを選択した上でZoomプロパティに100を設定する必要があります。

構文はWindowオブジェクトをZoomプロパティの親オブジェクトとして指定しますが、Zoomプロパティ自体はアクティブシートにしか有効でないため、シート選択→Zoom設定、という流れに従う必要があります。

構文

参照時
Window.Zoom As Variant

設定時
Window.Zoom = 設定値

親オブジェクト Windowオブジェクトを指定します。

通常はアクティブウィンドウを指すActiveWindowを指定することが多いと思います。

設定値 表示倍率をパーセント単位で10から400の範囲で設定します。

数値以外にもTrueとFalseが設定できます。

Trueを設定すると選択セル範囲を拡大表示し、Falseを設定すると100%の表示倍率になります。

 

サンプルコード

120%の表示倍率にするサンプルです。

Sub ZoomTest120()
    ActiveWindow.Zoom = 120
End Sub

 

A1セルからG7セルを拡大表示するサンプルです。ZoomプロパティにTrueを設定することで選択セル範囲を拡大表示します。

Sub ZoomRangeTest()
    Range("A1:G7").Select
    ActiveWindow.Zoom = True
End Sub

 

表示倍率を100%に戻すサンプルです。

Sub ZoomFalseTest()
    ActiveWindow.Zoom = False
End Sub

全ページのズームを100%にする

全シートのズームを100%にしたい場合は以下のようなコードになります。全シートのズームを100%に設定後、最初に開いていたシートを選択するようにしています。

Sub 全シートズーム100()
    Dim Sh                      As Worksheet
    Dim shNow                   As Worksheet
    
    Set shNow = ActiveSheet
    
    For Each Sh In Sheets
        If (Sh.Visible = xlSheetVisible) Then
            Sh.Select
            ActiveWindow.Zoom = 100
        End If
    Next
    
    shNow.Select
End Sub

]]>