このチュートリアルでは、ExcelVBA関数について学習します{空} 1)ExcelのVisual Basicとは何ですか?

{空} 2)ExcelでVBAを使用するにはどうすればよいですか?

3)ユーザー定義関数を作成するにはどうすればよいですか?

{空} 4)マクロの書き方は?

VBAcodeの書き方Excelは、平均的なユーザーを満足させるのに十分な、既製の関数の大規模なコレクションをユーザーに提供します。利用可能なさまざまなアドインをインストールすることで、さらに多くを追加できます。ほとんどの計算は提供されているもので実行できますが、特定の仕事をする関数があったことを望み、リストに適切なものが見つからないことに気付くのはそう長くはありません。 UDFが必要です。 UDF(ユーザー定義関数)は、VBAを使用して自分で作成する関数です。 UDFは「カスタム関数」と呼ばれることがよくあります。 UDFは、ワークブックに添付されたコードモジュールに残しておくことができます。その場合、UDFは、そのワークブックが開いているときに常に使用できます。または、商用アドインと同じようにExcelにインストールできる1つ以上の関数を含む独自のアドインを作成することもできます。 UDFには、コードモジュールからもアクセスできます。多くの場合、UDFは、VBAプロシージャのコード内でのみ機能するように開発者によって作成され、ユーザーはその存在に気付くことはありません。他の関数と同様に、UDFは必要に応じて単純または複雑にすることができます。簡単なものから始めましょう…​

長方形の面積を計算する関数はい、あなたが頭の中でこれを行うことができることを私は知っています!コンセプトはとてもシンプルなので、テクニックに集中できます。長方形の面積を計算する関数が必要だとします。 Excelの関数のコレクションを調べますが、適切な関数はありません。これは実行される計算です:

AREA = LENGTH x WIDTH新しいワークブックを開き、Visual Basic Editorを開きます([ツール]> [マクロ]> [Visual BasicEditor]またはALT + F11)。

関数を書き込むためのモジュールが必要になるため、[挿入]> [モジュール]を選択します。空のモジュールタイプに_FunctionArea_を入力し、Enterキーを押します。VisualBasicEditorが行を完成させ、サブルーチンを作成しているかのようにEndFunction行を追加します。これまでのところ次のようになっています…​

Function Area()

End Function

「エリア」の後の括弧の間にカーソルを置きます。角かっこが何のためにあるのか疑問に思ったことがあるなら、あなたはそれを見つけようとしています!関数が取る「引数」を指定します(_argument_は計算を行うために必要な情報の一部です)。 _Length as double、Width as double_と入力し、下の空の行をクリックします。入力すると、入力内容に適したすべてのものが一覧表示されたスクロールボックスがポップアップ表示されることに注意してください。

img2

この機能は自動リストメンバーと呼ばれます。表示されない場合は、オフになっている([ツール]> [オプション]> [エディター]でオンにする)か、以前に入力ミスをした可能性があります。構文をチェックするのに非常に便利です。必要なアイテムを見つけてダブルクリックし、コードに挿入します。無視して、必要に応じて入力するだけです。コードは次のようになります…​

Function Area(Length As Double, Width As Double)

End Function

引数のデータ型を宣言することは必須ではありませんが、理にかなっています。 Length、Width_と入力してそのままにしておくこともできますが、Excelにどのデータ型を期待するかを警告すると、コードの実行が速くなり、入力エラーを検出できます。 _double_データ型は数値(非常に大きくなる可能性があります)を参照し、分数を許可します。次に、計算自体について説明します。空の行で、最初にTabキーを押してコードをインデントし(読みやすくします)、 Area = Length * Width._と入力します。完成したコードは次のとおりです…​

Function Area(Length As Double, Width As Double)

Area = Length * Width

End Function

入力中にVisualBasicEditorの別のヘルプ機能がポップアップすることに気付くでしょう。自動クイック情報…​

img31

ここでは関係ありません。その目的は、必要な引数を指定することにより、VBAで関数を作成できるようにすることです。機能をすぐにテストできます。 Excelウィンドウに切り替えて、長さと幅の数値を別々のセルに入力します。 3番目のセルに、組み込み関数の1つであるかのように関数を入力します。この例では、セルA1には長さ(17)が含まれ、セルB1には幅(6.5)が含まれています。 C1で_ = area(A1、B1)_と入力すると、新しい関数が面積(110.5)を計算しました…​

img3

関数の引数はオプションの場合があります。この例では、Width引数をオプションにすることができます。長方形がたまたま長さと幅が等しい正方形であると仮定します。ユーザーが2つの引数を入力する手間を省くために、長さだけを入力して、関数にその値を2回使用させることができます(つまり、長さx長さを乗算します)。したがって、関数はこれをいつ実行できるかを認識しているため、決定に役立つIFステートメントを含める必要があります。次のようにコードを変更します…​

Function Area(Length As Double, Optional Width As Variant)

If IsMissing(Width) Then

Area = Length * Length

Else

Area = Length * Width

End If

End Function

null値を許可するために、Widthのデータ型が_Variant_に変更されていることに注意してください。この関数では、ユーザーが1つの引数のみを入力できるようになりました。 _ = area(A1)_。関数のIFステートメントは、Width引数が指定されているかどうかを確認し、それに応じて計算します…​

img4

燃料消費量を計算する関数私は自分の車の燃料消費量をチェックしたいので、燃料を購入するときに、走行距離とタンクを満たすのに必要な燃料の量をメモします。

ここ英国では、燃料はリットルで販売されています。車の走行距離計(OK、つまり走行距離計)は距離をマイルで記録します。そして、私は年を取りすぎて変更できないので、MPG(マイル/ガロン)しか理解していません。さて、それが少し悲しいと思うなら、これはどうですか。家に帰ったら、Excelを開いて、MPGを計算し、車のパフォーマンスをグラフ化するワークシートにデータを入力します。計算は、最後の満タンから車が走行したマイル数を、使用した燃料のガロン数で割ったものです…​

MPG =(MILES THIS FILL-MILES LAST FILL)/ GALLONS OF FUELしかし、燃料はリットル単位であり、ガロンには4.546リットルあるためです。

MPG =(MILES THIS FILL-MILES LAST FILL)/ LITERS OF FUEL x4.546これが私が関数を書いた方法です…​

Function MPG(StartMiles As Integer, FinishMiles As Integer, Litres As Single)

MPG = (FinishMiles - StartMiles) / Litres * 4.546

End Function

ワークシートでの表示は次のとおりです…​

img5

すべての関数が数学計算を実行するわけではありません。これが情報を提供するものです…​

曜日の名前を指定する関数曜日をテキストとして指定する日付関数(月曜日など)があるかどうかをよく尋ねられます。答えはノーですが、作成するのは非常に簡単です。 (補遺:私はノーと言いましたか?私が忘れた機能を見るために以下のメモをチェックしてください!)。 ExcelにはWEEKDAY関数があり、曜日を1から7までの数値として返します。デフォルト(日曜日)が気に入らない場合は、どの曜日を1にするかを選択できます。以下の例では、関数は「5」を返しますが、これはたまたま「木曜日」を意味します。

img6

でも数字は見たくない、「木曜日」が見たい。数値のリストと対応する曜日名のリストを含むテーブルを参照するVLOOKUP関数を追加することで、計算を変更できます。または、ネストされた複数のIFステートメントですべてを自己完結させることもできます。複雑すぎる!答えはカスタム関数です…​

Function DayName(InputDate As Date)

Dim DayNumber As Integer

DayNumber = Weekday(InputDate, vbSunday)

Select Case DayNumber

Case 1

DayName = "Sunday"

Case 2

DayName = "Monday"

Case 3

DayName = "Tuesday"

Case 4

DayName = "Wednesday"

Case 5

DayName = "Thursday"

Case 6

DayName = "Friday"

Case 7

DayName = "Saturday"

End Select

End Function

関数を「DayName」と呼びましたが、引数は1つで、「InputDate」と呼びます。これは(もちろん)日付である必要があります。仕組みは次のとおりです…​

  • 関数の最初の行は、整数(つまり整数)になる「DayNumber」と呼ばれる変数を宣言しています。

  • 関数の次の行は、ExcelのWEEKDAY関数を使用してその変数に値を割り当てます。値は1から7までの数値になります。

デフォルトは1 =日曜日ですが、わかりやすくするためにとにかく含めました。

最後に、Case Statement *は変数の値を調べ、適切なテキストを返します。

ワークシートでの表示は次のとおりです…​

img7

=== === カスタム関数へのアクセスワークブックにカスタム関数を含むVBAコードモジュールがアタッチされている場合、上記の例に示すように、これらの関数は同じワークブック内で簡単にアドレス指定できます。関数名は、Excelの組み込み関数の1つであるかのように使用します。

関数ウィザード(関数の貼り付けツールと呼ばれることもあります)にリストされている関数もあります。ウィザードを使用して、通常の方法で関数を挿入します([挿入]> [関数])。

関数カテゴリのリストを下にスクロールしてユーザー定義を見つけ、それを選択して使用可能なUDFのリストを表示します…​

img8

img9

ユーザー定義関数には、役に立たない「ヘルプはありません」というメッセージ以外の説明がないことがわかりますが、簡単な説明を追加できます…​

関数が含まれているブックにいることを確認してください。 [ツール]> [マクロ]> [マクロ]に移動します。ここに関数は表示されませんが、Excelはそれらを認識しています。ダイアログの上部にある[マクロ名]ボックスに関数の名前を入力し、ダイアログの[オプション]ボタンをクリックします。ボタンがグレー表示されている場合は、関数名のスペルが間違っているか、ワークブックが間違っているか、存在しません。これにより、関数の簡単な説明を入力できる別のダイアログが開きます。 [OK]をクリックして説明を保存し、(ここに紛らわしいビットがあります)[キャンセル]をクリックして[マクロ]ダイアログボックスを閉じます。関数を含むブックを保存することを忘れないでください。次回関数ウィザードに移動すると、UDFに説明が表示されます…​

img10

マクロと同様に、ユーザー定義関数は、それらを含むブックが開いている限り、他のブックで使用できます。ただし、これを行うことはお勧めできません。別のブックに関数を入力するのは簡単ではありません。ホストワークブックの名前を関数名に追加する必要があります。関数ウィザードに依存している場合、これは難しくありませんが、手動で書き出すのは不器用です。関数ウィザードは、他のブックにあるUDFのフルネームを表示します…​

img11

関数を含むブックを閉じているときに関数を使用したブックを開くと、関数を使用したセルにエラーメッセージが表示されます。 Excelはそれを忘れています!関数のホストワークブックを開いて再計算すると、すべて正常に戻ります。幸いなことに、より良い方法があります。

複数のブックで使用するユーザー定義関数を作成する場合は、Excelアドインを作成するのが最善の方法です。これを行う方法については、チュートリアル「Excelアドインの構築」を参照してください。

補遺私は本当にもっとよく知っているべきです!決して、決して、決して言わないでください!その日の名前を付ける機能はないとおっしゃっていましたが、今ではできる機能を思い出しました。この例を見てください…​

img12

TEXT関数は、セルの値を特定の数値形式のテキストとして返します。したがって、この例では、= TEXT(A1、 “ddd”)を選択して “Thu”を返し、= TEXT(A1、 “mmmm”)を選択して “September”などを返すことができます。Excelのヘルプには、使用方法の例がいくつかあります。この関数。

_ _ブログが気に入った場合は、Facebookで友達と共有してください。また、TwitterやFacebookでフォローすることもできます。

私たちはあなたからの連絡をお待ちしております。私たちの仕事を改善、補完、または革新し、あなたのためにそれをより良くする方法を教えてください。 [email protected]____にご連絡ください