Excel VBAコース(6):Excel VBA言語基本 - 変数

この記事では、Excel VBA言語の基本的な変数の内容について説明します。

前の記事で続く内容だ。

Excel VBAコース(5):Excelファイル拡張子、VBE、フォント設定

3. Excel VBA言語の基本

3.1。変数

変数宣言とbinding方式を見てみましょう。

3.1.1.変数宣言

次の構文で変数を宣言します。

'변수 선언 문법
Dim <변수명> [As Type]

Visual Basicは変数を宣言せずにすぐに使用でき、宣言してもTypeを指定しない可能性があります。

Dim t, x

上記のようにt変数とx変数を宣言し、Typeを指定しなくても問題はありません。

しかし、エラーやバグの発生の可能性を減らし、コードを読みやすくするために、次のことを守ることをお勧めします。

  • 変数は必ず宣言して使用する。 (Option Explicit 推奨)
  • Typeも必ず指定する。
  • 変数名には、typeを簡単に理解できるように、typeの略語をprefixとして使用するハンガリアン表記法を適用する。

'문자열 Title
Dim sTitle As String
  • 変数名、プロシージャ名、関数名などの名称にハングルを使っても全く問題がないので、変数名を定めにくくしたり、読みやすさを高める必要があればハングル名称を積極的に使う。

主に使用するtype、prefixは次のとおりです。

Prefixタイプ長さメモ
sString10+文字列長約20億個の文字表現可能
iInteger2 Byte限界値:-32,768〜32,767
l長い4 Byte限界値:-2,147,483,648〜2,147,483,647
bBoolean2 Byte真(True)、偽(False)
oObject Workbook、Worksheet、Range、Collectionなどのオブジェクト
Visual Basic の主要変数 type, prefix

上記のPrefixを使用して変数を宣言する例は次のとおりです。

Dim s단어 As String
Dim b단어발견 As Boolean
Dim oTargetBook As Workbook
Dim oTargetSht As Worksheet

3.1.2。変数 Early binding, Late binding

変数typeが宣言されたときに決まる方法をEarly bindingと呼び、実行するときに決まる方法をLate bindingという。 2つの方法の概念、例、推奨事項、利点、欠点を次の表にまとめた。

区分Early bindingLate binding
コンセプト変数宣言時にTypeを指定する方法
組み込みタイプでない場合は、そのタイプを参照を追加してタイプを指定する
実行時にTypeを指定する方法
Dim s 単語 As String
Dim oRecordSet As ADO.RecordSet
Dim s単語
Dim oRecordSet As Object
推奨事項ほとんどの場合推奨必ず必要な場合のみ使用
(Object typeのみ限定)
利点コード作成時のオートコンプリート、動的ヘルプサポート(便利)
コンパイル時にTypeが決定されるため、パフォーマンスに有利です。
実行しているコンピュータに参照ライブラリがない場合、Late bindingコード部分のみが実行されない
欠点実行しているコンピュータに参照ライブラリがないと、全体が実行されないコード作成時にオートコンプリートがサポートされない(不便)
実行時にTypeが決定され、動的にビンディングされるため、パフォーマンスが比較的悪い
変数 Early binding, Late binding 比較

*参照: https://docs.microsoft.com/en-us/previous-versions/office/troubleshoot/office-developer/binding-type-available-to-automation-clients

各方法のサンプルコードを見てみましょう。 Outlookでメールの受信者、件名、内容を作成し、画面に表示する簡単なコードです。

Early binding vs. Late binding サンプルコード

Early binding方式の例示コードは次の通りである。

Sub SendOLMail_EarlyBound()
    ​​​​​' declare variables for the Application and Mailitem objects
    ​​​​Dim oAPP                       As Outlook.Application
    ​​​​Dim oItem                      As Outlook.MailItem
     
    ​​​​​' instantiate the Application
    ​​​​Set oAPP = New Outlook.Application
     
    ​​​​​' create a new email
    ​​​​Set oItem = oAPP.CreateItem(olMailItem)
     
    ​​​​​' set basic properties and display the email
    ​​​​With oItem
        ​​​​​​​​​.To = "foo@bar.com"
        ​​​​​​​​​.Subject = "this is a test"
        ​​​​​​​​​.Body = "nothing to see here"
        ​​​​​​​​​.Display
    ​​​​​End With
End Sub

oApp、oItem変数はそれぞれOutlook.Application type、Outlook.MailItem typeとして宣言時に指定された。この場合は、次のようにOutlookライブラリを参照して追加する必要があります。

필요한 type library 참조 추가
必要なタイプライブラリ参照を追加する

「VBE>ツール>参照」メニューを開き、「利用可能な参照」の「Microsoft Outlook 16.0 Object Library」にチェックマークを付けて、OKボタンをクリックします。

もう一度参照メニューを開いたときは、次のようになります。

type library 참조 추가 확인
type libraryリファレンスの追加確認

このVBAコードが格納されているマクロファイル(.xlsm、または.xlsb)をOutlook 16がインストールされていないPCにコピーして実行すると、typeが見つからないというエラーが発生します。

Late binding方式の例示コードは次の通りである。

Sub SendOLMail_LateBound()
    ​​​​​Dim oAPP                       As Object
    ​​​​​Dim oItem                      As Object
    ​​​​​' need to declare this constant as it has no meaning without
    ​​​​' the reference set to the Outlook library
    ​​​​Const olMailItem               As Long = 0

    ​​​​​' instantiate the Application - cannot use New without a reference
    ​​​​' so we must use CreateObject
    ​​​​Set oAPP = CreateObject("Outlook.Application")

    ​​​​'이후 코드는 동일
    ​​​​​' create a new email
    ​​​​Set oItem = oAPP.CreateItem(olMailItem)

    ​​​​​' set basic properties and display the email
    ​​​​With oItem
        ​​​​​​​​​.To = "foo@bar.com"
        ​​​​​​​​​.Subject = "this is a test"
        ​​​​​​​​​.Body = "nothing to see here"
        ​​​​​​​​​.Display
    ​​​​​End With
End Sub

oApp、oItem変数は宣言時にObject typeとして指定されており、オブジェクトの生成方法が異なります。

10行目の次のコードでオブジェクトを作成します。

Set oAPP = CreateObject(“Outlook.Application”)

CreateObject関数の詳細な説明は、次のURLを参照してください。

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

上記のURLから一部を抜粋して残しておく。


Syntax

CreateObject(class, [ servername ])

The CreateObject function syntax has these parts:

PartDescription
クラスRequired; Variant (String)。 The application name and class of the object to create.
servernameOptional; Variant (String)。 The name of the network server where the object will be created. If servername is an empty string (“”), the local machine is used.

The class argument uses the syntax appname.objecttype and has these parts:

PartDescription
appnameRequired; Variant (String)。 The name of the application providing the object.
objecttypeRequired; Variant (String)。 The type or クラス of object to create.

このVBAコードが格納されているマクロファイル(.xlsm、または.xlsb)をOutlook 16がインストールされていないPCにコピーして実行すると、Early bindingと同様にtypeが見つからないというエラーが発生します。違いは、Early binding方式は参照ライブラリがないと最初からすべてのコードが実行されず、Late bindingは他のコードは動作し、CreateObjectを含むコード(プロシージャ、関数)だけ実行されないという点だ。


ここまで変数宣言とbinding方式について見てきました。次に、VBA言語の文法(Syntax)について説明します。


<<関連記事一覧>>

コメントを残す

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

ja日本語