ぺんぎんノート

momoiro_tjのノート (旧:システムオペレータの週末)

【VBA】1行でExcelのいろんなインターフェースを非表示にする。

ども。今回はExcel VBAです。いろいろさわってますが、結局仕事に簡単に直結するのはExcelVBAだと思います。

この記事では、Excelのリボン、数式バ-、スクロールバーなど、Excelのいろんなインターフェースを非表示にするVBAプログラムを紹介します。

前置き

ExcelVBAプログラムを作るとき、とっても気を使う

Excelってもともといろいろなインターフェースがあって、ユーザの自由度が高いですよね。 たとえば、リボンでフォントの設定とか簡単にできちゃうし、開発タブを有効にしていれば追加でVBAプログラム書けちゃうし。

セルやシートをロックして入力を制限するは有効な手段ですが、そもそも設定が手間。しかもロックするくらいしかできないので、自分の思うどおりに開発ができなかったりして、兼ね合いをとるのがとても面倒です。 特に、モーダルウィンドウを表示した操作を取り込む場合、とても気を使います。(僕だけかもしれませんが。)

個人的には、Excelはユーザが意図しないアクションを起こす可能性が非常に高く、開発者から見たときにとても気苦労が多いもの、だと思います。

Excel自体を非表示にしフォームだけ表示するVBAプログラム等もありますが、Excel自体の起動・終了が見えません。Excelインスタンスが残ってしまい、新たな予期しないトラブルが起こってしまう可能性もあります。

結果、Excelを表示したまま、インターフェースを非表示にしちゃえばいいのでは!?という結論にいたりました。 (笑

インターフェースを無効にするメリット

エラー時にユーザがExcelを正常に終了できる

前述のとおり、Excel自体を非表示にしてしまうとExcelプロセスが起動しているか停止しているかわかりません。プログラムが異常終了し、Excelプロセスが起動したままだとその後Excelが起動しなくなったり、意図しないトラブルに発展する可能性があります。

Excel自体は表示させておくことで、VBAプログラムが異常終了してもウィンドウの「×」ボタンからユーザが正常にExcelを終了させることができます。

Excelの機能を有効に利用できる

Excel自体を非表示にしてしまうと、ワークシートを使ったプログラムの作成が単純に難しくなります。だって非表示で見えないので。するとしてもシートに順番に値を書き出して、CSVに出力するくらいではないでしょうか。

Excel上でVBAプログラムを作っているのだから、Excelのプログラムを使用しない手はありません。条件付き書式、ピポットテーブル、グラフなどは、Excelでないと使えません。

経緯

先日本社に戻ったとき、お世話になった新人研修の講師の方と話す機会がありました。

そこで最近のこととかをつらつら話していると、「Excelで自分だけのライブラリ作っちゃえばいいじゃん」といわれました。

この一言からいろいろ考えた結果、やってみたのが今回の記事です。←?


インターフェースを非表示にする

ここからが本編です。基本的には1行のプログラムです。 簡単なので、ぜひやってみてください。検証はExcel2007で行っています。

リボンを非表示にする

一番厄介なリボンを非表示にします。プログラムもリボンの非表示が最もややこしいです。

Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)"

リボンを非表示にするにはExcel4.0形式のVBAプログラムを実行します。Application.ExecuteExcel4Macro(String)メソッドでExcel4.0形式でVBAプログラムを実行します。

引数には、Excel4.0形式で実行するプログラムを文字列で指定します。SHOW.TOOLBAR(""Ribbon"",False)でリボンが非表示になります。

シートタブを非表示にする

シートタブとは、Excel画面下部のワークシート一覧を表示するタブです。

ActiveWindow.DisplayWorkbookTabs = False

ActiveWindowは、現在開いているExcelワークブックのウィンドウを指します。オブジェクトはWindowsオブジェクトです。 Windows(ワークブック名)で、ウィンドウを指定することができます。

インターフェースはWindowsオブジェクトに多く付いていますので、Excelのインターフェースを触る場合は覚えておいてください。

見出しを非表示にする

見出しとは、A,B,C,D,....、1,2,3,4,....というように、画面上、画面左にある見出しになります。

ActiveWindow.DisplayHeadings = False

シートタブと同じです。ワークブックウィンドウ内のインターフェースは、だいたいWindowsオブジェクトで操作できます。

スクロールバーを非表示にする

スクロールバーは、縦のスクロールバーと横のスクロールバーで個別に設定ます。

' 横のスクロールバーを非表示にする
ActiveWindow.DisplayHorizontalScrollBar = False

' 縦のスクロールバーを非表示にする
ActiveWindow.DisplayVerticalScrollBar = False

こちらもWindowsオブジェクトの操作になります。

注意 スクロールバーを非表示にしても、スクロールは可能です。

スクロールも禁止するには、次の通りスクロール可能エリアを指定します。

' 例1)
ActiveSheet.scrollArea = "A1:F40"

' 例2)
ActiveSheet.scrollArea = ActiveWindow.VisibleRange.Address

WorkSheetオブジェクトのscrollAreaプロパティにスクロール可能エリアのアドレスを指定します。

例2では、ActiveWindow.VisibleRange.Addressを使用し、画面に表示されているセル範囲のアドレスを取得しています。

数式バーを非表示にする

数式バーは、文字や数式を入力するためのツールバーです。通常リボンの下にあります。これを非表示にします。

Application.DisplayFormulaBar = False

数式バーはApplicationオブジェクトで制御します。やり方は他のものとほとんど変わりません。

ステータスバーを非表示にする

ステータスバーは画面下部にあるツールバーです。シートの表示形式を変えたり、ズームしたりすることができるツールバーです。

Application.DisplayStatusBar = False

ステータスバーもApplicationオブジェクトで制御します。

ワークブックウィンドウを非表示にする

上記のすべてを非表示にすると、セルの選択と右クリックくらいしかできないようになります。

最後に、このセル自体も非表示にし、ウィンドウ枠だけになるようにしたいと思います。

Application.Windows(ワークブック名).visible = False

表示されているセルは、ワークブック内のウィンドウに表示されているので、Windowsオブジェクトを非表示にします。

ワークブックを非表示にすると、表示するときにWindowsオブジェクトの名前(≒ワークブック名)、もしくは順序番号が必要となるので注意して下さい。


以上、どうだったでしょうか。皆さんも試してみてください。