ExcelマクロVBA技術解説
ユーザー定義関数の作り方

ExcelマクロVBAの問題点と解決策、エクセルVBAの技術的解説
最終更新日:2013-06-11

ユーザー定義関数の作り方


マクロを作成して、ボタンで一括処理・・・それほどではないが、関数だけではちょっと大変、


そんな時は、ユーザー定義関数を使ってみましょう。

作り方は簡単です。

Function UserFunc(a As Variant, b As Variant) As Variant

  UserFunc = a + b
End Function


上記は、引数を足し算して返すユーザー定義関数です。


Function UserFunc

Function

これは決まり文句です。

UserFunc
これが関数の名前になります、好きな名前を付けられます。

日本語もOK。

ただし、エクセルの組み込み関数と同じ名前はダメですよ。

この関数が返す値の型を

as Variant


で定義します。

最初はとりあえず、Variantで良いです。

(a As Variant, b As Variant)

引数になります。


必要な個数だけ定義します。

型指定は内容に応じてと言う事になりますが、ほとんどの場合、セル参照になると思いますので、

型は省略(Variant)して良いでしょう。

UserFunc = a + b

関数の名前に、値を入れる事で、この関数の戻り値となります。

この部分に、必要な処理を記述します。

もちろん、全てのVBAのコードが使用可能です。


この関数の使い方

他の組み込み関数と同じです。

セルに、

=UserFunc(セル参照, セル参照)

これで使えます。

また、関数の挿入(Shift + F3)では、

「関数の分類」「ユーザー定義」に追加されます。

ここから選択することも可能です。

そして、当然、数式パレット(引数入力用のダイアログ画面)も表示されます。

IF文のネストが多くなり、もう何が何だか分からなくなってしまった等の時は、

このユーザー定義関数を作ると、ずっとすっきりしたエクセルになります。

まだ、使ったことのない人は、ぜひ一度お試しください。



同じテーマ「マクロVBA技術解説」の記事

Offset、Resizeを使いこなそう

OffsetとResizeは、エクセルVBAで非常に便利であり、ぜひ使いこなしてもらいたい機能です。Offsetはセル範囲の位置をずらし、Resizeはセル範囲のサイズを変更します。どちらも、RangeとCellsだけで記述することは可能ですが、OffsetとResizeを使う事で、簡潔にVBAを記述することができるようになります。
値渡し、参照渡しについて(ByVal,ByRef)
ByValが値渡し、ByRefが参照渡しです。ここまでは、どこにでも書いてありますし、なんとなく理解していても、実際の活用がなかなか出来ない事が多いようです。使用例を通じて、理解して下さい。上記のsample1を実行すると、2,3の順にメッセージ表示されます。
最終行・最終列の取得方法(End,CurrentRegion,SpecialCells,UsedRange)
エクセルの表をVBAで扱う時は、データ部分の先頭から最終行までの、開始列から最終列まで処理する事が多いでしょう。開始行や開始列は、ほとんどの場合、見出し行や見出し列の次からになります。単純な話として、1行目に見出しがあれば、2行目から 1列目に見出しがあれば、2列目から では、ここで、最終行や最終列は、
ユーザー定義関数の作り方
セルの値について(Value,Value2,Text)
マクロVBAにおいて、セルの値を操作する事は基本の基本ですが、意外に理解できていない場合が多いようです。Value 指定されたセル範囲の値を表すバリアント型(Variant)の値を設定します。値の取得および設定が可能です。
Excelのバージョンを判断して「名前を付けて保存」
Excel2007以降とExcel2003以前ではExcelのファイルフォーマットが違います、Excel2007以降で2003以前の形式で保存したい場合に問題が発生します。Excel2007以降で普通に97-2003形式で保存するVBAコードを書くと、Excel2003以前ではエラーとなってしまいます。
空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)
空白セルの判定は、VBAにおいては頻繁に発生しますが、正しく空白セルを判定する事は以外と難しいものです。そもそも「空白」とはどのような状態なのか… これが、はっきりしない為に何が正しいのかが判然としないことが問題を複雑にしています。以下、A1セルが空白かどうか判定する方法をいくつか紹介します。
空白セルを正しく判定する方法2
空白セルの判定について、いろいろな方から意見を頂きました、やはり、空白判定は奥が深く結構難しいものとなっています。ここでは、各プロパティや関数が、セルの状態によって返す値を再確認してみます。元記事は、空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula) 上記の記事では、
Rangeオブジェクト.Valueの省略について
エクセルVBAを教えていて、これほど多く聞かれる質問はないでしょう、RangeやCellsの.Valueは省略したほうが良いか、書いた方が良いか、当然、省略出来ない場合もあれば、オブジェクトとして扱うために.Valueは書けない場合もあります。ですので、結論から言えば、書きたければ書けば良いし、書きたくなければ書かなくて良い。
ユーザー操作を制限する(Locked,Protect,ScrollArea)
ユーザーにあちこち触られたくない時や、操作していて迷子にならないように、操作できるセルを徹底的に限定してしまおうというものです、無用なセルはクリックもできない、スクロールすることもできなくします。以下の手順になります。セルのロック→シートの保護→ScrollAreaの設定 順に説明します。
シートに数式を設定する時のセル参照の指定方法
シートに計算結果ではなく、計算式を設定する場合の、セル参照の記述方法について解説します、マクロVBAでは多くの場合、計算結果をセルに入れる事が多いのですが、時に計算式を設定する必要があります、その時の、セル参照の記述が以外に面倒なものです。下の表で説明していきます。


新着記事NEW ・・・新着記事一覧を見る

VBAにおける変数のメモリアドレスについて|VBA技術解説(11月8日)
空文字列の扱い方と処理速度について(""とvbNullString)|VBA技術解説(1月7日)
Errオブジェクトとユーザー定義エラー|VBA入門(11月5日)
シングルクォートの削除とコピー(PrefixCharacter)|VBA技術解説(11月4日)
ユーザー定義型の制限とクラスとの使い分け|VBA技術解説(11月3日)
クリップボードに2次元配列を作成してシートに貼り付ける|VBA技術解説(11月1日)
VBAクラスを使ったイベント作成(Event,RaiseEvent,WithEvents)|VBA技術解説(10月31日)
VBAクラスのAttributeについて(既定メンバーとFor Each)|VBA技術解説(10月19日)
VBAの用語について:ステートメントとは|VBA技術解説(10月16日)
VBAのマルチステートメント(複数のステートメントを同じ行に)|VBA技術解説(10月14日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数宣言のDimとデータ型|ExcelマクロVBA入門
6.繰り返し処理(For Next)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.ひらがな⇔カタカナの変換|エクセル基本操作
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.セルに文字を入れるとは(Range,Value)|VBA入門



  • >
  • >
  • >
  • ユーザー定義関数の作り方

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。




    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
    本文下部へ