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シートに追加し、イベントを処理します。データを見ながらボタンクリックを実行することができ、最も簡単に実装でき、使用にも便利だ。

엑셀 Sheet를 사용한 UI
Excelシートを使用したUI

この方法には1つの欠点があります。画面の解像度が変わってからボタンをクリックすると、そのボタンのサイズが大きくなり続けたり、文字のサイズが小さくなる現象が発生する。主に外部モニターを変更したり、ビームプロジェクトに接続するときに画面解像度が変更され、そのときコントロールを含むエクセルシートが開いていた場合、ほとんどこの現象が発生します。この現象はActiveXコントロールを使用した場合に発生し、フォームコントロールを使用すると発生しません。

양식 컨트롤과 ActiveX 컨트롤
フォームコントロールとActiveXコントロール

4.1.2.ユーザーフォームを使用したUI

別々のUser Formオブジェクトを作成し、その上にコントロールを追加してイベントを処理する方式だ。

User Form을 사용한 UI
ユーザーフォームを使用したUI

入力値のリストなどのデータを入力/修正しながら作業するには画面を隠すことができ、適切ではないかもしれません。下図のようにProgressBarなどの情報を表現する用途には適している。

Progress Bar UI
Progress Bar UI

4.1.2。 Ribbon Barを使用したUI

最も手が多く行く複雑な方法です。 Excel 2007から変更されたRibbon Barインターフェースにカスタムタブとボタンを追加し、イベントを処理します。数年前の後輩スタッフが作って私に送ったカスタムRibbon Barの例は次のとおりです。

Ribbon Bar를 사용한 UI
Ribbon Barを使用したUI

データ標準チェックツール(*注: データ標準チェックツール説明記事目次、ダウンロード)はUIをExcel Sheetに提供しましたが、Ribbon bar UIに変更した場合は上記と似ています。

Ribbon barの内容はこの自体でもかなり膨大で、後で別々の文章で別にまとめる。以下を参照してください。

4.2。 VBAコードを実行する方法

VBAコードを実行する方法は3つあります。

4.2.1.ボタンクリックイベントで実行

버튼 클릭 이벤트에서 VBA 코드 실행
ボタンクリックイベントでVBAコードを実行する

上図のようにボタンを作成し、そのボタンのクリックイベントにVBAコードを実行する構文を作成する方法だ。 UIで実行する方法を提供するのに適しています。

4.2.2。実行するソースコードにカーソルを置き、ショートカットで実行

커서 위치에서 VBA 코드 실행
カーソル位置でVBAコードを実行する

VBE(Visual Basic Editor)のSubまたはFunctionプロシージャコードにカーソルを置き、ショートカット F5で実行する。ツールバーの実行ボタン(▶️)をクリックしてもよい。この方法は、パラメータのないSub、Functionプロシージャでのみ動作します。

実行方法を外部に提供する必要がない場合、単にテストする場合に適した方法である。

4.2.3。直接実行ウィンドウで実行

직접 실행 창에서 VBA 코드 실행
直接実行ウィンドウでVBAコードを実行する

Sub、Functionプロシージャ名とパラメータを直接実行ウィンドウで入力し、Enterキーを押して実行する方法です。パラメータを持つSub、Functionプロシージャを簡単にテストするのに適した方法です。

4.3。ダイレクトランウィンドウツールの活用方法

直接実行ウィンドウは、上で見たマクロ実行用途のほか、実行時に変数値を出力してみるデバッグ用途、メッセージ出力などの様々な用途に活用できる。

직접 실행 창 도구 활용 방법
ダイレクトランウィンドウツールの活用方法
  1. マクロの実行
    • Module内のSub、Functionプロシージャ名を入力して実行
    • パラメータ付きプロシージャも実行可能
  2. 実行時の変数値の確認
    • ブレークポイントに停止した状態で使用
    • Print または ?後に変数名を入力してエンターキーで値を確認する
  3. 出力メッセージの確認
    • Debug.Printに出力される内容の確認

4.4。オブジェクトブラウズツールの活用方法

前の記事 Excel VBAコース(3):Excel Object Model でオブジェクトブラウズツールを少し見ていた。

VBEの「表示」メニューから「オブジェクトの参照」を実行します。ショートカット F2 である。

개체 찾아보기 메뉴
オブジェクト参照メニュー

オブジェクト参照ツールは次のように構成されています。

개체 찾아보기 도구 구성
オブジェクト参照ツールの構成
  1. Filter & Search
    • Excelでデフォルトで提供されているライブラリと参照追加したライブラリの完全なリストを確認し、特定のライブラリを選択できます。
    • ライブラリ全体のリストを対象にクラス名またはメンバー名で検索できます。
  2. クラス一覧
    • 選択したライブラリサブのすべてのクラス、モジュール、Enumのリストを表示します。
  3. メンバーリスト
    • クラスリストで選択したクラス、モジュールのメンバーであるプロシージャ、関数、属性などのリストを表示します。
  4. メンバー情報
    • メンバーリストで選択したプロシージャ、関数、属性などの詳細を表示します。

オブジェクトブラウズツールに表示されるアイコンの種類とその意味は次のとおりです。

개체 찾아보기 도구에서 표시되는 아이콘의 종류와 의미
オブジェクト参照ツールで表示されるアイコンの種類と意味

(出典: https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/icons-used-in-the-object-browser-and-code-windows)

オブジェクト参照ツールの詳細については、以下のURLを参照してください。

https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/object-browser

4.5。 VBAのパフォーマンスを向上させる方法

VBAのパフォーマンスを向上させる方法は別の記事で書いておいた。

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講座最後の文になる予定だ。


<<関連記事一覧>>

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ja日本語