Vba-quick-guide

提供:Dev Guides
移動先:案内検索

VBA-概要

VBAは* V isual B asic for A * pplicationsの略で、MSExcel、MS-Word、MS-などのMicrosoft Officeアプリケーションで現在主に使用されているMicrosoftのイベント駆動型プログラミング言語アクセス。

技術者がカスタマイズされたアプリケーションとソリューションを構築して、それらのアプリケーションの機能を強化するのに役立ちます。 この機能の利点は、PCにVisual Basicをインストールする必要がないことですが、Officeをインストールすると、目的を達成するのに暗黙的に役立ちます。

VBAは、MS-Office 97からMS-Office 2013まで、また利用可能な最新バージョンのすべてで、すべてのオフィスバージョンで使用できます。 VBAの中で、Excel VBAが最も人気があります。 VBAを使用する利点は、線形プログラミングを使用してMS Excelで非常に強力なツールを構築できることです。

VBAの適用

MS-Excel自体が多くの組み込み関数を提供するため、なぜExcelでVBAを使用するのか疑問に思うかもしれません。 MS-Excelは、複雑な計算を実行するには不十分な基本的な組み込み関数のみを提供します。 このような状況では、VBAが最も明白なソリューションになります。

たとえば、Excelの組み込み式を使用してローンの毎月の返済を計算することは非常に困難です。 むしろ、そのような計算のためにVBAをプログラムするのは簡単です。

VBAエディターへのアクセス

Excelウィンドウで、「ALT+ F11」を押します。 次のスクリーンショットに示すように、VBAウィンドウが開きます。

VBScriptの意思決定ステートメント

VBA-Excelマクロ

この章では、ステップごとに簡単なマクロを作成する方法を学びます。

  • ステップ1 *-まず、Excel 20XXで[開発者]メニューを有効にします。 同じことを行うには、ファイル→オプションをクリックします。
  • ステップ2 *-[リボンのカスタマイズ]タブをクリックし、[開発者]をオンにします。 「OK」をクリックします。

VBScriptの開発者

  • ステップ3 *-メニューバーに「開発者」リボンが表示されます。

VBScriptの開発者

  • ステップ4 *-[Visual Basic]ボタンをクリックして、VBAエディターを開きます。

VBScriptの開発者

  • ステップ5 *-ボタンを追加してスクリプトを開始します。 [挿入]→[ボタンを選択]をクリックします。

VBScriptの開発者

  • ステップ6 *-右クリックして「プロパティ」を選択します。

VBScriptの開発者

  • ステップ7 *-次のスクリーンショットに示すように、名前とキャプションを編集します。

VBScriptの開発者

  • ステップ8 *-ボタンをダブルクリックすると、次のスクリーンショットに示すように、サブプロシージャのアウトラインが表示されます。

VBScriptの開発者

  • ステップ9 *-メッセージを追加するだけでコーディングを開始します。
Private Sub say_helloworld_Click()
   MsgBox "Hi"
End Sub
  • ステップ10 *-ボタンをクリックして、サブプロシージャを実行します。 サブプロシージャの出力は、次のスクリーンショットに示されています。 デザインモードがオンになっていることを確認してください。 オンになっていない場合は、クリックしてオンにします。

VBScriptの開発者

-以降の章では、手順1から10で説明したように、単純なボタンを使用してデモンストレーションします。 したがって、この章を完全に理解することが重要です。

VBA-Excel用語

この章では、よく使用されるExcel VBAの用語について説明します。 これらの用語は以降のモジュールで使用されるため、これらの各用語を理解することが重要です。

モジュール

モジュールは、コードが記述される領域です。 これは新しいワークブックなので、モジュールはありません。

VBScriptのモジュール

モジュールを挿入するには、挿入→モジュールに移動します。 モジュールが挿入されると、「module1」が作成されます。

モジュール内では、VBAコードを記述でき、コードはプロシージャ内に記述されます。 プロシージャ/サブプロシージャは、何をすべきかを指示する一連のVBAステートメントです。

VBScriptのモジュール

手順

プロシージャは、全体として実行されるステートメントのグループであり、特定のタスクの実行方法をExcelに指示します。 実行されるタスクは、非常に単純なタスクでも非常に複雑なタスクでもかまいません。 ただし、複雑な手順を小さな手順に分割することをお勧めします。

プロシージャの主な2つのタイプは、SubとFunctionです。

VBScriptのモジュール

関数

関数は、プログラム内のどこからでも呼び出すことができる再利用可能なコードのグループです。 これにより、同じコードを何度も書く必要がなくなります。 これは、プログラマーが大きなプログラムをいくつかの小さな管理可能な機能に分割するのに役立ちます。

組み込み関数とは別に、VBAではユーザー定義関数も記述でき、ステートメントは FunctionEnd Function の間に記述されます。

サブ手順

サブプロシージャは関数と同様に機能します。 サブプロシージャは値を返しませんが、関数は値を返す場合と返さない場合があります。 サブプロシージャは、callキーワードなしで呼び出すことができます。 サブプロシージャは常に Sub および End Sub ステートメントで囲まれます。

VBA-マクロコメント

コメントは、プログラムロジックと、他のプログラマが将来同じコードでシームレスに作業できるユーザー情報を文書化するために使用されます。

これには、開発者、変更者、組み込みロジックなどの情報が含まれます。 コメントは実行中にインタプリタによって無視されます。

VBAのコメントは2つの方法で示されます。

  • 単一引用符( ')で始まるステートメントはコメントとして扱われます。 以下はその一例です。
' This Script is invoked after successful login
' Written by : finddevguides
' Return Value : True/False
  • キーワード「REM」で始まるステートメント。 以下はその一例です。
REM This Script is written to Validate the Entered Input
REM Modified by  : Tutorials point/user2

VBA-メッセージボックス

  • MsgBox関数*は、メッセージボックスを表示し、ユーザーがボタンをクリックするのを待ちます。その後、ユーザーがクリックしたボタンに基づいてアクションが実行されます。

構文

MsgBox(prompt[,buttons][,title][,helpfile,context])

パラメータ説明

  • プロンプト-必須パラメーター。 ダイアログボックスにメッセージとして表示される文字列。 プロンプトの最大長は約1024文字です。 メッセージが1行を超える場合は、各行の間にキャリッジリターン文字(Chr(13))または改行文字(Chr(10))を使用して行を区切ることができます。
  • ボタン-オプションのパラメータ。 表示するボタンのタイプ、使用するアイコンスタイル、デフォルトボタンのID、およびメッセージボックスのモダリティを指定する数値式。 空白のままにすると、ボタンのデフォルト値は0です。
  • タイトル-オプションのパラメーター。 ダイアログボックスのタイトルバーに表示される文字列式。 タイトルを空白のままにすると、アプリケーション名がタイトルバーに配置されます。
  • Helpfile -オプションのパラメーター。 ダイアログボックスの状況依存ヘルプを提供するために使用するヘルプファイルを識別する文字列式。
  • コンテキスト-オプションのパラメータ。 ヘルプ作成者が適切なヘルプトピックに割り当てたヘルプコンテキスト番号を識別する数値式。 コンテキストが提供される場合、ヘルプファイルも提供する必要があります。
  • ボタン*パラメータは、次の値のいずれかを取ることができます-
  • 0 vbOKOnly-OKボタンのみを表示します。
  • 1 vbOKCancel-[OK]ボタンと[キャンセル]ボタンを表示します。
  • 2 vbAbortRetryIgnore-中止、再試行、および無視ボタンを表示します。
  • 3 vbYesNoCancel-[はい]、[いいえ]、および[キャンセル]ボタンを表示します。
  • 4 vbYesNo-[はい]および[いいえ]ボタンを表示します。
  • 5 vbRetryCancel-[再試行]および[キャンセル]ボタンを表示します。
  • 16 vbCritical-クリティカルメッセージアイコンを表示します。
  • 32 vbQuestion-警告クエリアイコンを表示します。
  • 48 vbExclamation-警告メッセージアイコンを表示します。
  • 64 vbInformation-情報メッセージアイコンを表示します。
  • 0 vbDefaultButton1-最初のボタンはデフォルトです。
  • 256 vbDefaultButton2-2番目のボタンはデフォルトです。
  • 512 vbDefaultButton3-3番目のボタンがデフォルトです。
  • 768 vbDefaultButton4-4番目のボタンがデフォルトです。
  • 0 vbApplicationModalアプリケーションモーダル-ユーザーがメッセージボックスに応答するまで、現在のアプリケーションは動作しません。
  • 4096 vbSystemModalシステムモーダル-ユーザーがメッセージボックスに応答するまで、すべてのアプリケーションは動作しません。

上記の値は、論理的に4つのグループに分けられます。最初のグループ(0〜5)は、メッセージボックスに表示されるボタンを示します。 * 2番目のグループ*(16、32、48、64)は表示されるアイコンのスタイルを記述し、* 3番目のグループ*(0、256、512、768)はどのボタンがデフォルトでなければならないかを示し、 4番目はgroup (0、4096)は、メッセージボックスのモダリティを決定します。

戻り値

MsgBox関数は、ユーザーがメッセージボックスでクリックしたボタンを識別するために使用できる次の値のいずれかを返すことができます。

  • 1-vbOK-[OK]がクリックされた
  • 2-vbCancel-キャンセルがクリックされた
  • 3-vbAbort-中止がクリックされた
  • 4-vbRetry-再試行がクリックされた
  • 5-vbIgnore-無視がクリックされた
  • 6-vbはい-はいがクリックされました
  • 7-vbNo-いいえがクリックされました

Function MessageBox_Demo()
   'Message Box with just prompt message
   MsgBox("Welcome")

   'Message Box with title, yes no and cancel Butttons
   int a = MsgBox("Do you like blue color?",3,"Choose options")
   ' Assume that you press No Button
   msgbox ("The Value of a is " & a)
End Function

出力

  • ステップ1 *-VBAウィンドウの[実行]ボタンをクリックするか、次のスクリーンショットに示すようにExcelワークシートから関数を呼び出すことにより、上記の関数を実行できます。

VBAのメッセージボックス

  • ステップ2 *-メッセージ「Welcome」および「OK」ボタンを含むシンプルなメッセージボックスが表示されます

VBAのメッセージボックス

  • ステップ3 *-[OK]をクリックすると、[yes、no、およびcancel]ボタンとともにメッセージが表示された別のダイアログボックスが表示されます。

VBAのメッセージボックス

  • ステップ4 *-「いいえ」ボタンをクリックすると、そのボタンの値(7)が整数として保存され、次のスクリーンショットに示すようにユーザーにメッセージボックスとして表示されます。 この値を使用すると、ユーザーがどのボタンをクリックしたかを把握できます。

VBAのメッセージボックス

VBA-入力ボックス

  • InputBox関数*は、ユーザーに値の入力を求めます。 値を入力した後、ユーザーが[OK]ボタンをクリックするか、キーボードのEnterキーを押すと、InputBox関数はテキストボックス内のテキストを返します。 ユーザーが[キャンセル]ボタンをクリックすると、関数は空の文字列( "")を返します。

構文

InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])

パラメータ説明

  • プロンプト-必須パラメーター。 ダイアログボックスにメッセージとして表示される文字列。 プロンプトの最大長は約1024文字です。 メッセージが1行を超える場合は、各行の間にキャリッジリターン文字(Chr(13))または改行文字(Chr(10))を使用して行を区切ることができます。
  • タイトル-オプションのパラメーター。 ダイアログボックスのタイトルバーに表示される文字列式。 タイトルを空白のままにすると、アプリケーション名がタイトルバーに配置されます。
  • デフォルト-オプションのパラメーター。 ユーザーが表示したいテキストボックス内のデフォルトのテキスト。
  • XPos -オプションのパラメーター。 X 軸の位置は、画面の左側から水平方向へのプロンプト距離を表します。 空白のままにすると、入力ボックスは水平方向の中央に配置されます。
  • YPos -オプションのパラメーター。 Y 軸の位置は、画面の左側からの垂直方向のプロンプト距離を表します。 空白のままにすると、入力ボックスは垂直方向の中央に配置されます。
  • Helpfile -オプションのパラメーター。 ダイアログボックスの状況依存ヘルプを提供するために使用されるヘルプファイルを識別する文字列式。
  • context -オプションのパラメーター。 ヘルプ作成者が適切なヘルプトピックに割り当てたヘルプコンテキスト番号を識別する数値式。 コンテキストが提供される場合、ヘルプファイルも提供する必要があります。

2つの入力ボックス(1つは長さ用、もう1つは幅用)を使用して実行時にユーザーから値を取得して、長方形の面積を計算します。

Function findArea()
   Dim Length As Double
   Dim Width As Double

   Length = InputBox("Enter Length ", "Enter a Number")
   Width = InputBox("Enter Width", "Enter a Number")
   findArea = Length * Width
End Function

出力

  • ステップ1 *-同じことを実行するには、次のスクリーンショットに示すように、関数名を使用して呼び出し、Enterを押します。

入力ボックスのデモ

  • ステップ2 *-実行すると、最初の入力ボックス(長さ)が表示されます。 入力ボックスに値を入力します。

入力ボックスのデモ

  • ステップ3 *-最初の値を入力すると、2番目の入力ボックス(幅)が表示されます。

入力ボックスのデモ

  • ステップ4 *-2番目の数字を入力したら、[OK]ボタンをクリックします。 次のスクリーンショットに示すように、領域が表示されます。

入力ボックスのデモ

VBA-変数

  • 変数*は、スクリプトの実行中に変更できる値を保持するために使用される名前付きメモリの場所です。 以下は、変数に名前を付けるための基本的な規則です。
  • 最初の文字として文字を使用する必要があります。
  • 名前にスペース、ピリオド(。)、感嘆符(!)、または文字@、&、$、#を使用することはできません。
  • 名前の長さは255文字を超えることはできません。
  • Visual Basicの予約キーワードを変数名として使用することはできません。

構文

VBAでは、変数を使用する前に宣言する必要があります。

Dim <<variable_name>> As <<variable_type>>

データ型

多くのVBAデータ型があり、これらは2つの主要なカテゴリ、つまり数値データ型と非数値データ型に分類できます。

数値データ型

次の表に、数値データ型と値の許容範囲を示します。

Type Range of Values
Byte 0 to 255
Integer -32,768 to 32,767
Long -2,147,483,648 to 2,147,483,648
Single

-3.402823E+38 to -1.401298E-45 for negative values

正の値の場合は1.401298E-45〜3.402823E + 38。

Double

-1.79769313486232e+308 to -4.94065645841247E-324 for negative values

4.94065645841247E-324から1.79769313486232e + 308までの正の値。

Currency -922,337,203,685,477.5808 to 922,337,203,685,477.5807
Decimal

PLUS/- 79,228,162,514,264,337,593,543,950,335 if no decimal is use

&plus;/-7.9228162514264337593543950335(小数点以下28桁)。

非数値データ型

次の表に、非数値データ型と値の許容範囲を示します。

Type Range of Values
String (fixed length) 1 to 65,400 characters
String (variable length) 0 to 2 billion characters
Date January 1, 100 to December 31, 9999
Boolean True or False
Object Any embedded object
Variant (numeric) Any value as large as double
Variant (text) Same as variable-length string

ボタンを作成し、「Variables_demo」という名前を付けて、変数の使用方法を示します。

vba_02.jpg

Private Sub say_helloworld_Click()
   Dim password As String
   password = "Admin#1"

   Dim num As Integer
   num = 1234

   Dim BirthDay As Date
   BirthDay = DateValue("30/10/2020")

   MsgBox "Passowrd is " & password & Chr(10) & "Value of num is " &
      num & Chr(10) & "Value of Birthday is " & BirthDay
End Sub

出力

スクリプトを実行すると、出力は次のスクリーンショットのようになります。

vba_03.jpg

VBA-定数

定数は、スクリプトの実行中に変更できない値を保持するために使用される名前付きメモリの場所です。 ユーザーが定数値を変更しようとすると、スクリプトの実行はエラーで終了します。 定数は、変数の宣言と同じ方法で宣言されます。

定数の命名規則は次のとおりです。

  • 最初の文字として文字を使用する必要があります。
  • 名前にスペース、ピリオド(。)、感嘆符(!)、または文字&commat;、&、&dollar;、#を使用することはできません。
  • 名前の長さは255文字を超えることはできません。
  • Visual Basicの予約キーワードを変数名として使用することはできません。

構文

VBAでは、宣言された定数に値を割り当てる必要があります。 定数の値を変更しようとすると、エラーがスローされます。

Const <<constant_name>> As <<constant_type>> = <<constant_value>>

定数を操作する方法を示すボタン「Constant_demo」を作成してみましょう。

Private Sub Constant_demo_Click()
   Const MyInteger As Integer = 42
   Const myDate As Date = #2/2/2020#
   Const myDay As String = "Sunday"

   MsgBox "Integer is " & MyInteger & Chr(10) & "myDate is "
      & myDate & Chr(10) & "myDay is " & myDay
End Sub

出力

スクリプトを実行すると、次のスクリーンショットに示すように出力が表示されます。

vba_05.jpg

VBA-オペレーター

演算子*は、単純な式-4&plus;を使用して定義できます。 5は9です。 ここで、4と5は*オペランド*と&plus;と呼ばれます。 *operator と呼ばれます。 VBAは次の種類の演算子をサポートしています-

  • 算術演算子
  • 比較演算子
  • 論理(またはリレーショナル)演算子
  • 連結演算子

算術演算子

次の算術演算子はVBAでサポートされています。

変数Aが5を保持し、変数Bが10を保持すると仮定します-

リンク:/vba/vba_arithmetic_operators [例を表示]

Operator Description Example
PLUS Adds the two operands A PLUS B will give 15
- Subtracts the second operand from the first A - B will give -5
AST Multiplies both the operands A AST B will give 50
/ Divides the numerator by the denominator B/A will give 2
% Modulus operator and the remainder after an integer division B % A will give 0
^ Exponentiation operator B ^ A will give 100000

比較演算子

VBAでサポートされている比較演算子は次のとおりです。

変数Aが10を保持し、変数Bが20を保持すると仮定します-

リンク:/vba/vba_comparison_operators [例を表示]

Operator Description Example
= Checks if the value of the two operands are equal or not. If yes, then the condition is true. (A = B) is False.
<> Checks if the value of the two operands are equal or not. If the values are not equal, then the condition is true. (A <> B) is True.
> Checks if the value of the left operand is greater than the value of the right operand. If yes, then the condition is true. (A > B) is False.
< Checks if the value of the left operand is less than the value of the right operand. If yes, then the condition is true. (A < B) is True.
>= Checks if the value of the left operand is greater than or equal to the value of the right operand. If yes, then the condition is true. (A >= B) is False.
Checks if the value of the left operand is less than or equal to the value of the right operand. If yes, then the condition is true. (A ⇐ B) is True.

論理演算子

次の論理演算子はVBAでサポートされています。

変数Aが10を保持し、変数Bが0を保持すると仮定します-

リンク:/vba/vba_logical_operators [例を表示]

Operator Description Example
AND Called Logical AND operator. If both the conditions are True, then the Expression is true. a<>0 AND b<>0 is False.
OR Called Logical OR Operator. If any of the two conditions are True, then the condition is true. a<>0 OR b<>0 is true.
NOT Called Logical NOT Operator. Used to reverse the logical state of its operand. If a condition is true, then Logical NOT operator will make false. NOT(a<>0 OR b<>0) is false.
XOR Called Logical Exclusion. It is the combination of NOT and OR Operator. If one, and only one, of the expressions evaluates to be True, the result is True. (a<>0 XOR b<>0) is true.

連結演算子

次の連結演算子はVBAでサポートされています。

変数Aが5を保持し、変数Bが10を保持すると仮定します-

link:/vba/vba_concatenation_operators [例を表示]

Operator Description Example
PLUS Adds two Values as Variable. Values are Numeric A PLUS B will give 15
& Concatenates two Values A & B will give 510

変数A = "Microsoft"と変数B = "VBScript"を仮定し、その後-

Operator Description Example
PLUS Concatenates two Values A PLUS B will give MicrosoftVBScript
& Concatenates two Values A & B will give MicrosoftVBScript

-連結演算子は、数値と文字列の両方に使用できます。 変数が数値または文字列値を保持する場合、出力はコンテキストに依存します。

VBA-決定

意思決定により、プログラマはスクリプトまたはそのセクションの実行フローを制御できます。 実行は、1つ以上の条件ステートメントによって管理されます。

以下は、ほとんどのプログラミング言語で見られる典型的な意思決定構造の一般的な形式です。

VBAでの意思決定ステートメント

VBAは、次の種類の意思決定ステートメントを提供します。 詳細を確認するには、次のリンクをクリックしてください。

Sr.No. Statement & Description
1

if statement

  • if* ステートメントは、ブール式とそれに続く1つ以上のステートメントで構成されます。
2

if..else statement

  • if else* ステートメントは、ブール式とそれに続く1つ以上のステートメントで構成されます。 条件がTrueの場合、 *If* ステートメントの下のステートメントが実行されます。 条件が偽の場合、スクリプトの *Else* 部分が実行されます。
3

if…​elseif..else statement

ブール式で構成される1つ以上の ElseIf ステートメントが続き、その後にオプションの* elseステートメント*が続く if ステートメント。すべての条件が偽になると実行されます。

4

nested if statements

別の if または elseif ステートメント内の if または elseif ステートメント。

5

switch statement

  • switch* ステートメントを使用すると、変数を値のリストと等しいかどうかをテストできます。

VBA-ループ

コードのブロックを数回実行する必要がある場合があります。 一般に、ステートメントは順番に実行されます。関数の最初のステートメントが最初に実行され、次に2番目のステートメントが実行されます。

プログラミング言語は、より複雑な実行パスを可能にするさまざまな制御構造を提供します。

ループステートメントを使用すると、ステートメントまたはステートメントのグループを複数回実行できます。 VBAのループステートメントの一般的な形式を次に示します。

ループアーキテクチャ

VBAは、ループ要件を処理するために次の種類のループを提供します。 詳細を確認するには、次のリンクをクリックしてください。

Sr.No. Loop Type & Description
1

for loop

一連のステートメントを複数回実行し、ループ変数を管理するコードを短縮します。

2

for ..each loop

これは、グループに少なくとも1つの要素がある場合に実行され、グループ内の各要素に対して繰り返されます。

3

while..wend loop

これは、ループ本体を実行する前に条件をテストします。

4

do..while loops

do..Whileステートメントは、条件がTrueである限り実行されます。つまり、条件がFalseになるまでループを繰り返す必要があります。

5

do..until loops

do..Untilステートメントは、条件がFalseである限り実行されます。つまり、条件がTrueになるまでループを繰り返す必要があります。

ループ制御ステートメント

ループ制御ステートメントは、通常のシーケンスから実行を変更します。 実行がスコープを離れると、ループ内の残りのステートメントはすべて実行されません。

VBAは次の制御ステートメントをサポートしています。 詳細を確認するには、次のリンクをクリックしてください。

S.No. Control Statement & Description
1

Exit For statement

  • For loop* ステートメントを終了し、ループの直後のステートメントに実行を転送します
2

Exit Do statement

  • Do While* ステートメントを終了し、ループの直後のステートメントに実行を転送します

VBA-文字列

文字列は文字のシーケンスであり、アルファベット、数字、特殊文字、またはそれらのすべてで構成できます。 変数は、二重引用符 ""で囲まれている場合、文字列と呼ばれます。

構文

variablename = "string"

str1 = "string"   ' Only Alphabets
str2 = "132.45"   ' Only Numbers
str3 = "!@#$;*"  ' Only Special Characters
Str4 = "Asc23@#"  ' Has all the above

文字列関数

開発者が文字列を非常に効果的に操作するのに役立つ、事前定義されたVBA文字列関数があります。 VBAでサポートされているStringメソッドは次のとおりです。 詳細を知るには、それぞれの方法をクリックしてください。

Sr.No. Function Name & Description
1

InStr

指定された部分文字列の最初の出現を返します。 検索は左から右に行われます。

2

InstrRev

指定された部分文字列の最初の出現を返します。 検索は右から左に行われます。

3

Lcase

指定された文字列の小文字を返します。

4

Ucase

指定された文字列の大文字を返します。

5

Left

文字列の左側から特定の文字数を返します。

6

Right

文字列の右側から特定の文字数を返します。

7

Mid

指定されたパラメーターに基づいて、文字列から特定の文字数を返します。

8

Ltrim

指定された文字列の左側のスペースを削除した後、文字列を返します。

9

Rtrim

指定した文字列の右側のスペースを削除した後、文字列を返します。

10

Trim

先頭と末尾の両方の空白スペースを削除した後、文字列値を返します。

11

Len

指定された文字列の長さを返します。

12

Replace

文字列を別の文字列に置き換えた後、文字列を返します。

13

Space

指定された数のスペースで文字列を埋めます。

14

StrComp

指定された2つの文字列を比較した後、整数値を返します。

15

String

指定された回数、指定された文字の文字列を返します。

16

StrReverse

指定された文字列の文字のシーケンスを逆にした後、文字列を返します。

VBA-日時関数

VBScriptの日付と時刻の関数は、開発者が日付と時刻をある形式から別の形式に変換したり、特定の条件に合った形式で日付または時刻の値を表現したりするのに役立ちます。

日付関数

Sr.No. Function & Description
1

Date

現在のシステム日付を返す関数。

2

CDate

指定された入力を日付に変換する関数。

3

DateAdd

指定された時間間隔が追加された日付を返す関数。

4

DateDiff

2つの期間の差を返す関数。

5

DatePart

指定された入力日付値の指定された部分を返す関数。

6

DateSerial

指定された年、月、および日付の有効な日付を返す関数。

7

FormatDateTime

指定されたパラメーターに基づいて日付をフォーマットする関数。

8

IsDate

提供されたパラメーターが日付であるかどうかにかかわらずブール値を返す関数。

9

Day

指定された日付の日を表す1〜31の整数を返す関数。

10

Month

指定された日付の月を表す1〜12の整数を返す関数。

11

Year

指定された日付の年を表す整数を返す関数。

12

MonthName

指定された日付の特定の月の名前を返す関数。

13

WeekDay

指定された日の曜日を表す整数(1〜7)を返す関数。

14

WeekDayName

指定された日の曜日名を返す関数。

時間関数

Sr.No. Function & Description
1

Now

現在のシステムの日付と時刻を返す関数。

2

Hour

指定された時間の時間部分を表す0〜23の整数を返す関数。

3

Minute

指定された時間の分の部分を表す0〜59の整数を返す関数。

4

Second

指定された時間の秒部分を表す0〜59の整数を返す関数。

5

Time

現在のシステム時刻を返す関数。

6

Timer

午前12:00以降の秒数とミリ秒数を返す関数。

7

TimeSerial

時間、分、秒の特定の入力の時間を返す関数。

8

TimeValue

入力文字列を時刻形式に変換する関数。

VBA-配列

変数は値を格納するコンテナであることをよく知っています。 開発者は、一度に1つの変数に複数の値を保持できる場合があります。 一連の値が単一の変数に格納される場合、それは*配列変数*と呼ばれます。

配列宣言

配列は、変数の宣言と同じ方法で宣言されますが、配列変数の宣言では括弧が使用されます。 次の例では、配列のサイズが括弧内に記載されています。

'Method 1 : Using Dim
Dim arr1()  'Without Size

'Method 2 : Mentioning the Size
Dim arr2(5)  'Declared with size of 5

'Method 3 : using 'Array' Parameter
Dim arr3
arr3 = Array("apple","Orange","Grapes")
  • 配列サイズは5と示されていますが、配列インデックスがゼロから始まるため、6つの値を保持できます。
  • 配列インデックスを負にすることはできません。
  • VBScript配列は、任意のタイプの変数を配列に格納できます。 したがって、配列は、整数、文字列、または文字を単一の配列変数に格納できます。

配列への値の割り当て

割り当てられる値のそれぞれに対して配列インデックス値を指定することにより、値が配列に割り当てられます。 文字列にすることができます。

ボタンを追加し、次の関数を追加します。

Private Sub Constant_demo_Click()
   Dim arr(5)
   arr(0) = "1"           'Number as String
   arr(1) = "VBScript"    'String
   arr(2) = 100              'Number
   arr(3) = 2.45             'Decimal Number
   arr(4) = #10/07/2013#  'Date
   arr(5) = #12.45 PM#    'Time

   msgbox("Value stored in Array index 0 : " & arr(0))
   msgbox("Value stored in Array index 1 : " & arr(1))
   msgbox("Value stored in Array index 2 : " & arr(2))
   msgbox("Value stored in Array index 3 : " & arr(3))
   msgbox("Value stored in Array index 4 : " & arr(4))
   msgbox("Value stored in Array index 5 : " & arr(5))
End Sub

上記の関数を実行すると、次の出力が生成されます。

Value stored in Array index 0 : 1
Value stored in Array index 1 : VBScript
Value stored in Array index 2 : 100
Value stored in Array index 3 : 2.45
Value stored in Array index 4 : 7/10/2013
Value stored in Array index 5 : 12:45:00 PM

多次元配列

配列は1つの次元に限定されているわけではありませんが、最大60の次元を持つことができます。 2次元配列は、最も一般的に使用されるものです。

次の例では、多次元配列が3行4列で宣言されています。

Private Sub Constant_demo_Click()
   Dim arr(2,3) as Variant  ' Which has 3 rows and 4 columns
   arr(0,0) = "Apple"
   arr(0,1) = "Orange"
   arr(0,2) = "Grapes"
   arr(0,3) = "pineapple"
   arr(1,0) = "cucumber"
   arr(1,1) = "beans"
   arr(1,2) = "carrot"
   arr(1,3) = "tomato"
   arr(2,0) = "potato"
   arr(2,1) = "sandwitch"
   arr(2,2) = "coffee"
   arr(2,3) = "nuts"

   msgbox("Value in Array index 0,1 : " &  arr(0,1))
   msgbox("Value in Array index 2,2 : " &  arr(2,2))
End Sub

上記の関数を実行すると、次の出力が生成されます。

Value stored in Array index : 0 , 1 : Orange
Value stored in Array index : 2 , 2 : coffee

ReDimステートメント

ReDimステートメントは、動的配列変数を宣言し、ストレージスペースを割り当てまたは再割り当てするために使用されます。

構文

ReDim [Preserve] varname(subscripts) [, varname(subscripts)]

パラメータ説明

  • Preserve -最後の次元のサイズを変更するときに既存の配列のデータを保持するために使用されるオプションのパラメーター。
  • Varname -変数の名前を示す必須パラメータ。標準の変数命名規則に従う必要があります。
  • 下付き文字-配列のサイズを示す必須パラメータ。

次の例では、配列が再定義され、配列の既存のサイズが変更されたときに値が保持されます。

-元よりも小さい配列のサイズを変更すると、削除された要素のデータは失われます。

Private Sub Constant_demo_Click()
   Dim a() as variant
   i = 0
   redim a(5)
   a(0) = "XYZ"
   a(1) = 41.25
   a(2) = 22

   REDIM PRESERVE a(7)
   For i = 3 to 7
   a(i) = i
   Next

   'to Fetch the output
   For i = 0 to ubound(a)
      Msgbox a(i)
   Next
End Sub

上記の関数を実行すると、次の出力が生成されます。

XYZ
41.25
22
3
4
5
6
7

配列メソッド

VBScriptには、開発者が配列を効果的に処理するのに役立つさまざまな組み込み関数があります。 配列と組み合わせて使用​​されるすべてのメソッドを以下にリストします。 メソッド名をクリックして詳細を確認してください。

Sr.No. Function & Description
1

LBound

指定された配列の最小の添え字に対応する整数を返す関数。

2

UBound

指定された配列の最大の添え字に対応する整数を返す関数。

3

Split

指定された数の値を含む配列を返す関数。 区切り文字に基づいて分割します。

4

Join

配列内の指定された数の部分文字列を含む文字列を返す関数。 これは、Split Methodの正反対の機能です。

5

Filter

特定のフィルター条件に基づいた文字列配列のサブセットを含むゼロベースの配列を返す関数。

6

IsArray

入力変数が配列かどうかを示すブール値を返す関数。

7

Erase

配列変数に割り当てられたメモリを回復する関数。

VBA-ユーザー定義関数

  • 関数*は、プログラム内のどこからでも呼び出すことができる再利用可能なコードのグループです。 これにより、同じコードを何度も書く必要がなくなります。 これにより、プログラマは大きなプログラムをいくつかの小さくて管理可能な機能に分割できます。

組み込み関数とは別に、VBAではユーザー定義関数も作成できます。 この章では、VBAで独自の関数を作成する方法を学習します。

関数定義

VBA関数には、オプションのreturnステートメントを含めることができます。 これは、関数から値を返す場合に必要です。

たとえば、関数に2つの数値を渡すと、関数から呼び出し元プログラムで乗算を返すことが期待できます。

-関数は、関数名自体に割り当てられた配列として、コンマで区切られた複数の値を返すことができます。

関数を使用する前に、その特定の関数を定義する必要があります。 VBAで関数を定義する最も一般的な方法は、 Function キーワードの後に​​一意の関数名を使用することです。これには、パラメーターのリストと End Function キーワードを含むステートメントが含まれる場合と含まれない場合があります。関数の。 基本的な構文は次のとおりです。

構文

ボタンを追加し、次の関数を追加します。

Function Functionname(parameter-list)
   statement 1
   statement 2
   statement 3
   .......
   statement n
End Function

エリアを返す次の関数を追加します。 関数名自体で値を返すことができることに注意してください。

Function findArea(Length As Double, Optional Width As Variant)
   If IsMissing(Width) Then
      findArea = Length *Length
   Else
      findArea = Length* Width
   End If
End Function

関数を呼び出す

関数を呼び出すには、次のスクリーンショットに示すように、関数名を使用して関数を呼び出します。

VBAでの意思決定ステートメント

以下に示すエリアの出力がユーザーに表示されます。

VBAでの意思決定ステートメント

VBA-サブ手順

  • サブプロシージャ*は関数に似ていますが、いくつかの違いがあります。
  • サブプロシージャは値を返しませんが、関数は値を返す場合と返さない場合があります。
  • サブプロシージャは、callキーワードなしで呼び出すことができます。 *Subプロシージャは、常にSubおよびEnd Subステートメントで囲まれます。

Sub Area(x As Double, y As Double)
   MsgBox x* y
End Sub

呼び出し手順

スクリプトのどこかでプロシージャを呼び出すには、関数から呼び出しを行うことができます。 サブプロシージャは値を返さないため、関数と同じ方法を使用することはできません。

Function findArea(Length As Double, Width As Variant)
   area Length, Width    ' To Calculate Area 'area' sub proc is called
End Function

これで、次のスクリーンショットに示すように、サブプロシージャではなく関数のみを呼び出すことができます。

VBAのサブプロシージャ

面積が計算され、[メッセージ]ボックスにのみ表示されます。

VBAのサブ領域2を計算

関数から面積値が返されないため、結果セルにはZEROが表示されます。 つまり、Excelワークシートからサブプロシージャを直接呼び出すことはできません。

VBAのサブ領域3を計算

VBA-イベント

セルまたはセル値の範囲を手動で変更すると、イベント駆動型プログラミングであるVBAをトリガーできます。 変更イベントは物事を簡単にするかもしれませんが、書式設定でいっぱいのページを非常に迅速に終了できます。 イベントには2種類あります。

  • ワークシートイベント
  • ワークブックイベント

ワークシートイベント

ワークシートイベントは、ワークシートに変更があるとトリガーされます。 シートタブを右クリックして[コードの表示]を選択し、後でコードを貼り付けることで作成されます。

ユーザーはそれらのワークシートをそれぞれ選択し、ドロップダウンから「WorkSheet」を選択して、サポートされているすべてのワークシートイベントのリストを取得できます。

入力ボックスのデモ

以下は、ユーザーが追加できる、サポートされているワークシートイベントです。

Private Sub Worksheet_Activate()
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Private Sub Worksheet_Calculate()
Private Sub Worksheet_Change(ByVal Target As Range)
Private Sub Worksheet_Deactivate()
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

ダブルクリックする前にメッセージを表示するだけです。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   MsgBox "Before Double Click"
End Sub

出力

セルをダブルクリックすると、次のスクリーンショットに示すように、ユーザーにメッセージボックスが表示されます。

入力ボックスのデモ

ワークブックイベント

ワークブックイベントは、ワークブック全体に変更があるとトリガーされます。 次のスクリーンショットに示すように、「ThisWorkbook」を選択し、ドロップダウンから「workbook」を選択することで、ワークブックイベントのコードを追加できます。 次のスクリーンショットに示すように、Workbook_openサブプロシージャがすぐにユーザーに表示されます。

入力ボックスのデモ

以下は、ユーザーが追加できる、サポートされているWorkbookイベントです。

Private Sub Workbook_AddinUninstall()
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Private Sub Workbook_Deactivate()
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Private Sub Workbook_Open()
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Private Sub Workbook_WindowResize(ByVal Wn As Window)

新しいシートが作成されるたびに、新しいシートが正常に作成されるというメッセージをユーザーに表示するだけでよいとしましょう。

Private Sub Workbook_NewSheet(ByVal Sh As Object)
   MsgBox "New Sheet Created Successfully"
End Sub

出力

新しいExcelシートを作成すると、次のスクリーンショットに示すようなメッセージがユーザーに表示されます。

入力ボックスのデモ

VBA-エラー処理

プログラミングには、(a)構文エラー、(b)ランタイムエラー、(c)論理エラーの3種類のエラーがあります。

構文エラー

構文エラーは解析エラーとも呼ばれ、VBScriptの解釈時に発生します。 たとえば、次の行では閉じ括弧が欠落しているため、構文エラーが発生します。

Function ErrorHanlding_Demo()
   dim x,y
   x = "finddevguides"
   y = Ucase(x
End Function

ランタイムエラー

ランタイムエラーは、例外とも呼ばれ、実行中に解釈後に発生します。

たとえば、次の行は実行時エラーを引き起こします。ここでは構文は正しいのですが、実行時にfnmultiplyを呼び出そうとしていますが、これは存在しない関数です。

Function ErrorHanlding_Demo1()
   Dim x,y
   x = 10
   y = 20
   z = fnadd(x,y)
   a = fnmultiply(x,y)
End Function

Function fnadd(x,y)
   fnadd = x + y
End Function

論理エラー

論理エラーは、追跡が最も難しいタイプのエラーです。 これらのエラーは、構文エラーまたは実行時エラーの結果ではありません。 代わりに、スクリプトを駆動するロジックを間違えたときに発生し、期待した結果が得られません。

これらのエラーをキャッチすることはできません。これは、ビジネス要件によってプログラムにどのタイプのロジックを配置するかによって異なるためです。

たとえば、数値をゼロで除算したり、無限ループに入るスクリプトを記述したりします。

エラーオブジェクト

実行時エラーがある場合、エラーメッセージを表示して実行を停止します。 開発者として、エラーをキャプチャする場合は、 Error オブジェクトが使用されます。

次の例では、 Err.Number はエラー番号を示し、 Err.Description はエラーの説明を示します。

Err.Raise 6   ' Raise an overflow error.
MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear   ' Clear the error.

エラー処理

VBAはエラー処理ルーチンを有効にし、エラー処理ルーチンを無効にするためにも使用できます。 On Errorステートメントがないと、発生するランタイムエラーは致命的です。エラーメッセージが表示され、実行が突然停止します。

On Error { GoTo [ line | 0 | -1 ] | Resume Next }
Sr.No. Keyword & Description
1

GoTo line

必要な行引数で指定された行から始まるエラー処理ルーチンを有効にします。 指定された行は、On Errorステートメントと同じ手順である必要があります。そうでない場合、コンパイル時エラーが発生します。

2

GoTo 0

現在のプロシージャで有効なエラーハンドラを無効にし、Nothingにリセットします。

3

GoTo -1

現在のプロシージャで有効な例外を無効にし、それをNothingにリセットします。

4

Resume Next

実行時エラーが発生すると、エラーが発生したステートメントの直後のステートメントに制御が移り、そのポイントから実行が継続することを指定します。

Public Sub OnErrorDemo()
   On Error GoTo ErrorHandler   ' Enable error-handling routine.
   Dim x, y, z As Integer
   x = 50
   y = 0
   z = x/y   ' Divide by ZERO Error Raises

   ErrorHandler:    ' Error-handling routine.
   Select Case Err.Number   ' Evaluate error number.
      Case 10   ' Divide by zero error
         MsgBox ("You attempted to divide by zero!")
      Case Else
         MsgBox "UNKNOWN ERROR  - Error# " & Err.Number & " : " & Err.Description
   End Select
   Resume Next
End Sub

VBA-Excelオブジェクト

VBAを使用してプログラミングする場合、ユーザーが扱う重要なオブジェクトはほとんどありません。

  • アプリケーションオブジェクト
  • ワークブックオブジェクト
  • ワークシートオブジェクト
  • 範囲オブジェクト

アプリケーションオブジェクト

アプリケーションオブジェクトは次で構成されています-

  • アプリケーション全体の設定とオプション。
  • ActiveCell、ActiveSheetなどのトップレベルオブジェクトを返すメソッド。

'Example 1 :
Set xlapp = CreateObject("Excel.Sheet")
xlapp.Application.Workbooks.Open "C:\test.xls"

'Example 2 :
Application.Windows("test.xls").Activate

'Example 3:
Application.ActiveCell.Font.Bold = True

ワークブックオブジェクト

WorkbookオブジェクトはWorkbooksコレクションのメンバーであり、Microsoft Excelで現在開いているすべてのWorkbookオブジェクトが含まれています。

'Ex 1 : To close Workbooks
Workbooks.Close

'Ex 2 : To Add an Empty Work Book
Workbooks.Add

'Ex 3: To Open a Workbook
Workbooks.Open FileName:="Test.xls", ReadOnly:=True

'Ex : 4 - To Activate WorkBooks
Workbooks("Test.xls").Worksheets("Sheet1").Activate

ワークシートオブジェクト

WorksheetオブジェクトはWorksheetsコレクションのメンバーであり、ワークブック内のすべてのWorksheetオブジェクトを含みます。

'Ex 1 : To make it Invisible
Worksheets(1).Visible = False

'Ex 2 : To protect an WorkSheet
Worksheets("Sheet1").Protect password:=strPassword, scenarios:=True

範囲オブジェクト

範囲オブジェクトは、セル、行、列、またはセルの1つ以上の連続ブロックを含むセルの選択を表します。

'Ex 1 : To Put a value in the cell A5
Worksheets("Sheet1").Range("A5").Value = "5235"

'Ex 2 : To put a value in range of Cells
Worksheets("Sheet1").Range("A1:A4").Value = 5

VBA-テキストファイル

VBAを使用して、Excelファイルを読み取り、セルの内容をテキストファイルに書き込むこともできます。 VBAは、ユーザーが2つの方法を使用してテキストファイルで作業することができます-

  • ファイルシステムオブジェクト *書き込みコマンドを使用する

ファイルシステムオブジェクト(FSO)

名前が示すように、FSOは、開発者がドライブ、フォルダー、およびファイルを操作するのに役立ちます。 このセクションでは、FSOの使用方法について説明します。

Sr.No. Object Type & Description
1
  • Drive*

ドライブはオブジェクトです。 システムに接続されているドライブに関する情報を収集できるメソッドとプロパティが含まれています。

2

Drives

ドライブはコレクションです。 物理的または論理的に、システムに接続されているドライブのリストを提供します。

3

File

ファイルはオブジェクトです。 開発者がファイルを作成、削除、または移動できるようにするメソッドとプロパティが含まれています。

4

Files

ファイルはコレクションです。 フォルダー内に含まれるすべてのファイルのリストを提供します。

5

Folder

フォルダーはオブジェクトです。 開発者がフォルダを作成、削除、または移動できるようにするメソッドとプロパティを提供します。

6

Folders

フォルダはコレクションです。 フォルダー内のすべてのフォルダーのリストを提供します。

7

TextStream

TextStreamはオブジェクトです。 開発者がテキストファイルを読み書きできるようにします。

ドライブ

ドライブ*は、特定のディスクドライブまたはネットワーク共有のプロパティへのアクセスを提供するオブジェクトです。 次のプロパティは *Drive オブジェクトでサポートされています-

  • 空きスペース
  • ドライブレター
  • ドライブタイプ
  • ファイルシステム
  • フリースペース
  • IsReady
  • Path
  • ルートフォルダ
  • シリアルナンバー
  • ShareName
  • 全体の大きさ
  • VolumeName

  • ステップ1 *-FSOを使用したスクリプト作成に進む前に、Microsoft Scripting Runtimeを有効にする必要があります。 同じことを行うには、次のスクリーンショットに示すように、ツール→参照に移動します。

VBScriptのExcel FSO

  • ステップ2 *-「Microsoft Scripting RunTime」を追加し、[OK]をクリックします。

VBScriptのExcel FSO

  • ステップ3 *-テキストファイルに書き込むデータを追加し、コマンドボタンを追加します。

VBScriptのExcel FSO

  • ステップ4 *-スクリプトの時間です。
Private Sub fn_write_to_text_Click()
   Dim FilePath As String
   Dim CellData As String
   Dim LastCol As Long
   Dim LastRow As Long

   Dim fso As FileSystemObject
   Set fso = New FileSystemObject
   Dim stream As TextStream

   LastCol = ActiveSheet.UsedRange.Columns.Count
   LastRow = ActiveSheet.UsedRange.Rows.Count

   ' Create a TextStream.
   Set stream = fso.OpenTextFile("D:\Try\Support.log", ForWriting, True)

   CellData = ""

   For i = 1 To LastRow
      For j = 1 To LastCol
         CellData = Trim(ActiveCell(i, j).Value)
         stream.WriteLine "The Value at location (" & i & "," & j & ")" & CellData
      Next j
   Next i

   stream.Close
   MsgBox ("Job Done")
End Sub

出力

スクリプトを実行するときは、ワークシートの最初のセルにカーソルを置いてください。 Support.logファイルは、「D:\ Try」の下の次のスクリーンショットに示すように作成されます。

VBScriptのExcel FSO

ファイルの内容は、次のスクリーンショットに示されています。

VBScriptのExcel FSO

書き込みコマンド

FSOとは異なり、参照を追加する必要はありませんが、ドライブ、ファイル、フォルダーを操作することはできません。 ストリームをテキストファイルに追加するだけです。

Private Sub fn_write_to_text_Click()
   Dim FilePath As String
   Dim CellData As String
   Dim LastCol As Long
   Dim LastRow As Long

   LastCol = ActiveSheet.UsedRange.Columns.Count
   LastRow = ActiveSheet.UsedRange.Rows.Count

   FilePath = "D:\Try\write.txt"
   Open FilePath For Output As #2

   CellData = ""
   For i = 1 To LastRow
      For j = 1 To LastCol
         CellData = "The Value at location (" & i & "," & j & ")" & Trim(ActiveCell(i, j).Value)
         Write #2, CellData
      Next j
   Next i

   Close #2
   MsgBox ("Job Done")
End Sub

出力

スクリプトを実行すると、次のスクリーンショットに示すように、場所「D:\ Try」に「write.txt」ファイルが作成されます。

VBScriptのExcel FSO

ファイルの内容は、次のスクリーンショットに示されています。

VBScriptのExcel FSO

VBA-プログラミングチャート

VBAを使用すると、特定の基準に基づいてグラフを生成できます。 例を使用して見てみましょう。

  • ステップ1 *-グラフを生成するデータを入力します。

VBAのグラフ

  • ステップ2 *-3つのボタンを作成します。1つは棒グラフを生成し、もう1つは円グラフを生成し、もう1つは縦棒グラフを生成します。

VBAのグラフ

  • ステップ3 *-これらのタイプのチャートのそれぞれを生成するマクロを開発します。
' Procedure to Generate Pie Chart
Private Sub fn_generate_pie_graph_Click()
   Dim cht As ChartObject
   For Each cht In Worksheets(1).ChartObjects
      cht.Chart.Type = xlPie
   Next cht
End Sub

' Procedure to Generate Bar Graph
Private Sub fn_Generate_Bar_Graph_Click()
   Dim cht As ChartObject
   For Each cht In Worksheets(1).ChartObjects
      cht.Chart.Type = xlBar
   Next cht
End Sub

' Procedure to Generate Column Graph
Private Sub fn_generate_column_graph_Click()
   Dim cht As ChartObject
   For Each cht In Worksheets(1).ChartObjects
      cht.Chart.Type = xlColumn
   Next cht
End Sub
  • ステップ4 *-対応するボタンをクリックすると、チャートが作成されます。 次の出力で、[円グラフの生成]ボタンをクリックします。

VBAのグラフ

VBA-ユーザーフォーム

  • ユーザーフォーム*は、ユーザーデータ入力をより制御しやすく、ユーザーにとって使いやすいカスタムビルトダイアログボックスです。 この章では、単純なフォームを設計し、Excelにデータを追加する方法を学びます。
  • ステップ1 *-Altキーを押しながらF11キーを押してVBAウィンドウに移動し、[挿入]メニューに移動して[ユーザーフォーム]を選択します。 選択すると、次のスクリーンショットに示すようにユーザーフォームが表示されます。

VBScriptの意思決定ステートメント

  • ステップ2 *-指定されたコントロールを使用してフォームを設計します。

VBScriptの意思決定ステートメント

  • ステップ3 *-各コントロールを追加した後、コントロールに名前を付ける必要があります。 キャプションはフォームに表示されるものに対応し、名前はその要素のVBAコードを記述するときに表示される論理名に対応します。

VBScriptの意思決定ステートメント

  • ステップ4 *-以下は、追加されたコントロールのそれぞれに対する名前です。
Control Logical Name Caption
From frmempform Employee Form
Employee ID Label Box empid Employee ID
firstname Label Box firstname First Name
lastname Label Box lastname Last Name
dob Label Box dob Date of Birth
mailid Label Box mailid Email ID
Passportholder Label Box Passportholder Passport Holder
Emp ID Text Box txtempid NOT Applicable
First Name Text Box txtfirstname NOT Applicable
Last Name Text Box txtlastname NOT Applicable
Email ID Text Box txtemailid NOT Applicable
Date Combo Box cmbdate NOT Applicable
Month Combo Box cmbmonth NOT Applicable
Year Combo Box cmbyear NOT Applicable
Yes Radio Button radioyes Yes
No Radio Button radiono No
Submit Button btnsubmit Submit
Cancel Button btncancel Cancel
  • ステップ5 *-フォームを右クリックして[コードの表示]を選択し、フォームロードイベントのコードを追加します。

VBScriptの意思決定ステートメント

  • ステップ6 *-次のスクリーンショットに示すように、オブジェクトのドロップダウンから「ユーザーフォーム」を選択し、「初期化」メソッドを選択します。

VBScriptの意思決定ステートメント

  • ステップ7 *-フォームのロード時に、テキストボックスがクリアされ、ドロップダウンボックスが塗りつぶされ、ラジオボタンがリセットされることを確認します。
Private Sub UserForm_Initialize()
   'Empty Emp ID Text box and Set the Cursor
   txtempid.Value = ""
   txtempid.SetFocus

   'Empty all other text box fields
   txtfirstname.Value = ""
   txtlastname.Value = ""
   txtemailid.Value = ""

   'Clear All Date of Birth Related Fields
   cmbdate.Clear
   cmbmonth.Clear
   cmbyear.Clear

   'Fill Date Drop Down box - Takes 1 to 31
   With cmbdate
      .AddItem "1"
      .AddItem "2"
      .AddItem "3"
      .AddItem "4"
      .AddItem "5"
      .AddItem "6"
      .AddItem "7"
      .AddItem "8"
      .AddItem "9"
      .AddItem "10"
      .AddItem "11"
      .AddItem "12"
      .AddItem "13"
      .AddItem "14"
      .AddItem "15"
      .AddItem "16"
      .AddItem "17"
      .AddItem "18"
      .AddItem "19"
      .AddItem "20"
      .AddItem "21"
      .AddItem "22"
      .AddItem "23"
      .AddItem "24"
      .AddItem "25"
      .AddItem "26"
      .AddItem "27"
      .AddItem "28"
      .AddItem "29"
      .AddItem "30"
      .AddItem "31"
   End With

   'Fill Month Drop Down box - Takes Jan to Dec
   With cmbmonth
      .AddItem "JAN"
      .AddItem "FEB"
      .AddItem "MAR"
      .AddItem "APR"
      .AddItem "MAY"
      .AddItem "JUN"
      .AddItem "JUL"
      .AddItem "AUG"
      .AddItem "SEP"
      .AddItem "OCT"
      .AddItem "NOV"
      .AddItem "DEC"
   End With

   'Fill Year Drop Down box - Takes 1980 to 2014
   With cmbyear
      .AddItem "1980"
      .AddItem "1981"
      .AddItem "1982"
      .AddItem "1983"
      .AddItem "1984"
      .AddItem "1985"
      .AddItem "1986"
      .AddItem "1987"
      .AddItem "1988"
      .AddItem "1989"
      .AddItem "1990"
      .AddItem "1991"
      .AddItem "1992"
      .AddItem "1993"
      .AddItem "1994"
      .AddItem "1995"
      .AddItem "1996"
      .AddItem "1997"
      .AddItem "1998"
      .AddItem "1999"
      .AddItem "2000"
      .AddItem "2001"
      .AddItem "2002"
      .AddItem "2003"
      .AddItem "2004"
      .AddItem "2005"
      .AddItem "2006"
      .AddItem "2007"
      .AddItem "2008"
      .AddItem "2009"
      .AddItem "2010"
      .AddItem "2011"
      .AddItem "2012"
      .AddItem "2013"
      .AddItem "2014"
   End With

   'Reset Radio Button. Set it to False when form loads.
   radioyes.Value = False
   radiono.Value = False

End Sub
  • ステップ8 *-コードを[送信]ボタンに追加します。 送信ボタンをクリックすると、ユーザーはワークシートに値を追加できるはずです。
Private Sub btnsubmit_Click()
   Dim emptyRow As Long

   'Make Sheet1 active
   Sheet1.Activate

   'Determine emptyRow
   emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1

   'Transfer information
   Cells(emptyRow, 1).Value = txtempid.Value
   Cells(emptyRow, 2).Value = txtfirstname.Value
   Cells(emptyRow, 3).Value = txtlastname.Value
   Cells(emptyRow, 4).Value = cmbdate.Value & "/" & cmbmonth.Value & "/" & cmbyear.Value
   Cells(emptyRow, 5).Value = txtemailid.Value

   If radioyes.Value = True Then
      Cells(emptyRow, 6).Value = "Yes"
   Else
      Cells(emptyRow, 6).Value = "No"
   End If
End Sub
  • ステップ9 *-ユーザーが[キャンセル]ボタンをクリックしたときにフォームを閉じるメソッドを追加します。
Private Sub btncancel_Click()
   Unload Me
End Sub
  • ステップ10 *-[実行]ボタンをクリックしてフォームを実行します。 フォームに値を入力し、「送信」ボタンをクリックします。 次のスクリーンショットに示すように、値は自動的にワークシートに流れます。

VBScriptの意思決定ステートメント