Excel VBAコース(9):Excel VBA How-To
今回の記事では、Excel VBA How-Toについて見ていきます。 Excel VBAコーディングの際に参考にしてください。
前の記事で続く内容だ。
Excel VBAコース(8):Excel VBA言語基本 - データ型(Data type)、データ構造(Data structure)
4. Excel VBA How-To
4.1。 UI(User Interface)の設定方法
Excel VBAでユーザーに値を入力したり、進行状況を表示するなどのUIを構成する方法は3つあります。
4.1.1. Excelシートを使用したUI
最も一般的な方法です。ボタン、テキストボックス、チェックボックスなどのコントロールをExcelシートに追加し、イベントを処理します。データを見ながらボタンクリックを実行することができ、最も簡単に実装でき、使用にも便利だ。
この方法には1つの欠点があります。画面の解像度が変わってからボタンをクリックすると、そのボタンのサイズが大きくなり続けたり、文字のサイズが小さくなる現象が発生する。主に外部モニターを変更したり、ビームプロジェクトに接続するときに画面解像度が変更され、そのときコントロールを含むエクセルシートが開いていた場合、ほとんどこの現象が発生します。この現象はActiveXコントロールを使用した場合に発生し、フォームコントロールを使用すると発生しません。
4.1.2.ユーザーフォームを使用したUI
別々のUser Formオブジェクトを作成し、その上にコントロールを追加してイベントを処理する方式だ。
入力値のリストなどのデータを入力/修正しながら作業するには画面を隠すことができ、適切ではないかもしれません。下図のようにProgressBarなどの情報を表現する用途には適している。
4.1.2。 Ribbon Barを使用したUI
最も手が多く行く複雑な方法です。 Excel 2007から変更されたRibbon Barインターフェースにカスタムタブとボタンを追加し、イベントを処理します。数年前の後輩スタッフが作って私に送ったカスタムRibbon Barの例は次のとおりです。
データ標準チェックツール(*注: データ標準チェックツール説明記事目次、ダウンロード)はUIをExcel Sheetに提供しましたが、Ribbon bar UIに変更した場合は上記と似ています。
Ribbon barの内容はこの自体でもかなり膨大で、後で別々の文章で別にまとめる。以下を参照してください。
- https://docs.microsoft.com/en-us/archive/msdn-magazine/2007/february/extend-office-2007-with-your-own-ribbon-tabs-and-controls
- https://docs.microsoft.com/en-us/office/vba/library-reference/concepts/overview-of-the-office-fluent-ribbon
4.2。 VBAコードを実行する方法
VBAコードを実行する方法は3つあります。
4.2.1.ボタンクリックイベントで実行
上図のようにボタンを作成し、そのボタンのクリックイベントにVBAコードを実行する構文を作成する方法だ。 UIで実行する方法を提供するのに適しています。
4.2.2。実行するソースコードにカーソルを置き、ショートカットで実行
VBE(Visual Basic Editor)のSubまたはFunctionプロシージャコードにカーソルを置き、ショートカット F5で実行する。ツールバーの実行ボタン(▶️)をクリックしてもよい。この方法は、パラメータのないSub、Functionプロシージャでのみ動作します。
実行方法を外部に提供する必要がない場合、単にテストする場合に適した方法である。
4.2.3。直接実行ウィンドウで実行
Sub、Functionプロシージャ名とパラメータを直接実行ウィンドウで入力し、Enterキーを押して実行する方法です。パラメータを持つSub、Functionプロシージャを簡単にテストするのに適した方法です。
4.3。ダイレクトランウィンドウツールの活用方法
直接実行ウィンドウは、上で見たマクロ実行用途のほか、実行時に変数値を出力してみるデバッグ用途、メッセージ出力などの様々な用途に活用できる。
- マクロの実行
- Module内のSub、Functionプロシージャ名を入力して実行
- パラメータ付きプロシージャも実行可能
- 実行時の変数値の確認
- ブレークポイントに停止した状態で使用
- Print または ?後に変数名を入力してエンターキーで値を確認する
- 出力メッセージの確認
- Debug.Printに出力される内容の確認
4.4。オブジェクトブラウズツールの活用方法
前の記事 Excel VBAコース(3):Excel Object Model でオブジェクトブラウズツールを少し見ていた。
VBEの「表示」メニューから「オブジェクトの参照」を実行します。ショートカット F2 である。
オブジェクト参照ツールは次のように構成されています。
- Filter & Search
- Excelでデフォルトで提供されているライブラリと参照追加したライブラリの完全なリストを確認し、特定のライブラリを選択できます。
- ライブラリ全体のリストを対象にクラス名またはメンバー名で検索できます。
- クラス一覧
- 選択したライブラリサブのすべてのクラス、モジュール、Enumのリストを表示します。
- メンバーリスト
- クラスリストで選択したクラス、モジュールのメンバーであるプロシージャ、関数、属性などのリストを表示します。
- メンバー情報
- メンバーリストで選択したプロシージャ、関数、属性などの詳細を表示します。
オブジェクトブラウズツールに表示されるアイコンの種類とその意味は次のとおりです。
オブジェクト参照ツールの詳細については、以下のURLを参照してください。
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/object-browser
4.5。 VBAのパフォーマンスを向上させる方法
VBAのパフォーマンスを向上させる方法は別の記事で書いておいた。
上記をまとめると、処理するコードに入る前のグローバル変数を性能向上値に設定し、処理コード終了後に元の値に変更する。次のコードを参考にしてください。
'코드 진입 부분 Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Application.EnableEvents = False Application.DisplayAlerts = False '실행할 코드가 들어 갈 부분 ... '코드 종료 부분 Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic Application.EnableEvents = True Application.DisplayAlerts = True
4.6。マクロライターの活用方法
Excelのマクロライターは非常に便利です。たとえば、ピボットテーブルを新しく作成したり、チャートを新しく作成したり、繰り返し操作をVBAコードで作成したりする方法がわからない場合など、マクロライタが大幅に役立ちます。
マクロライターを起動し、キーボードやマウスなどを使ってジョブを処理した後、マクロライターを停止すると、その間に処理したジョブ履歴がVBAコードで作成されていることが確認できる。最初からVBAコードを書くよりも、こうして作られたコードを修正して使うと、はるかに高速で正確にコーディングが可能です。
マクロ記録は、次のように開発ツールタブまたは下部のステータスバーの「マクロ記録」ボタンをクリックして開始します。
「マクロ記録」ボタンをクリックすると、次のようにマクロ名、ショートカットキー、保存場所、説明を入力するウィンドウが表示されます。
マクロ情報を入力した後、「OK」ボタンをクリックすると、次のように記録中の状態に変更されます。
シートに貼り付けたデータの枠線指定、Header設定(背景色、フォント、中央揃え)、目盛線隠し、枠固定機能をマクロライターで記録してみよう。マクロ記録を開始してキーボード、マウスなどを用いて機能を実行すると、下図の右側のような結果になる。
マクロの記録を停止し、生成されたVBAコードを確認してみると、次のようになります。
Sub 매크로1() ' ' 매크로1 매크로 ' Columns("A:B").Select Columns("A:B").EntireColumn.AutoFit Range("A1:B11").Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlThin End With Range("A1:B1").Select Selection.Font.Bold = True With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0 End With Range("A2").Select ActiveWindow.FreezePanes = True ActiveWindow.DisplayGridlines = False End Sub
このコードを分析してみると次のようになります。
Excel Object Modelを知らなくても、VBA文法を知らなくても、このように作成されたVBAコードをうまく活用すれば、いくらでも便利なマクロを作ることができる。マクロライターをうまく活用すると、VBAコーディングも簡単になります。
参考までに、Ms-Office製品群の中でExcelが唯一のマクロライターが提供される。
4.7。コーディング時に守ればいい基本原則
Excel VBAを使用してコーディングするときは、次の基本原則を守ることをお勧めします。
- 変更される値は内部に置かず、外部(UI)から入力されるようにする。
- 最初からModule/Classで構造化せず、最初は実装の目的にのみ集中する。
- 構造化には追加の時間がかかりますが、この時間のため、本来の業務スケジュールに影響を与えてはいけません。
- VBAはスーダン(ツール)であり目的ではありません。主客転倒しないように注意。
- 3回以上使用される場合、または今後継続して使用されることが明らかな場合には、再利用性を考慮してModule/Classにリファクタリングおよび構造化する。 (Make –> Copy –> Refactoring)
今回の記事では、Excel VBAコーディングの際に知っておくと良いHow-Toについて調べてみた。次に、Excel VBAで開発して使用しているツールの事例を見てみましょう。エクセルVBA講座最後の文になる予定だ。
<<関連記事一覧>>
- Excel VBAコースを開始します。 (講座予告、feat.Excel VBAを推奨する理由)
- Excel VBAコース(1):Excel VBAの概要
- Excel VBAコース(2):Excel VBAの基礎
- Excel VBAコース(3):Excel Object Model
- Excel VBAコース(4):Excel Object Modelを扱う
- Excel VBAコース(5):Excelファイル拡張子、VBE、フォント設定
- Excel VBAコース(6):Excel VBA言語基本 - 変数
- Excel VBAコース(7):Excel VBA言語基本 - 文法(Syntax)
- Excel VBAコース(8):Excel VBA言語基本 - データ型(Data type)、データ構造(Data structure)
- Excel VBAコース(9):Excel VBA How-To
- Excel VBAコース(10):Excel VBAで開発され使用されているツール
- Excel VBAコース全体目次