• ベストアンサー

自作関数とユーザー定義関数は同じ意味?

エクセルやVBAの用語として出てくる 「自作関数」「ユーザー定義関数」は同じ意味ですか?

  • 1hdthd
  • お礼率97% (239/244)

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.8

ご質問者さんのために、「関数」として登場する語を分かりやすく書かせていただきます。 これらの用語には、それぞれには通用する度合い(%)というものが存在しています。 パーセントは、私の感覚的なもので、あまり、厳密な根拠はありません。 ------------------------------------------- ユーザー定義関数 90%  VBAで使用される語。概ね、MS-Office VBA に限定される。しかし、下記のFunction プロシージャとは、コードとしては、区別がつきにくい Function プロシージャ 90% AccessではVBAで使用されるが、Excelではあまり多くはないので、ユーザー定義関数と混同されることが多い。Sub プロシージャに対する用語。 マクロ関数(Ver4マクロ関数) 80% 特定の用語ではあっても、現行では、一部のVBAしか登場しない。また、近い将来なくなるといわれているもの。 組み込み関数   70%  Access に出てくる用語、Excelでは類推でワークシート関数に該当するものに推測が利く。 VBA関数      80%  VBAの正規の用語ではないけれども、ExcelではWorksheetFunction と対比した用語として通用する。 ワークシート関数   70% VBAの場合のみであって、ワークシート側から、あえて、このように呼ぶ必要はない。 アドイン関数   60%  アドインで作られた関数をさすように思われることが多い。 自作関数     50%  あくまでも一般用語。VBAでは直接、この用語は使用されないが、MS-Office でも、作成される関数は、VBAで作るものだけではない。VB6, VB.Net やC++などから作られるものもある。ユーザー定義関数よりも意味は広い。後者には、オートメーション・アドイン関数と呼ぶことがある。

1hdthd
質問者

お礼

とてもわかりやすい表記です! ありがとうございます。

その他の回答 (7)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

訂正: ×参考:Google検索; office vba "redefined function" 参考:Google検索; ooffice vba "事前定義関" http://www.google.co.jp/search?hl=ja&safe=off&rlz=1R2GGIE_ja&q=office+vba+%22%E4%BA%8B%E5%89%8D%E5%AE%9A%E7%BE%A9%E9%96%A2%E6%95%B0%22&lr=

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

>ちなみにNo.3の方の回答は、一般の方なので仕方ありませんが、対比すべき「事前定義関数」についての説明がなく、大変申し訳ございませんが、専門家としては「不可」な回答です。 人にダメだしするというのは、恐れ入ったものです。一般の方だから仕方がないという上から目線の発言は、もう少し虚心に掲示板に臨んでほしいものです。#5さんは、何か、ご自分の立場を勘違いしていませんでしょうか。VBAの基本的な用語を知らないに等しいようですが。どうも、他の分野の人たちは、Office VBAを下にして見る人が多いようです。よそで経験してきたから、似たような分野で使えるとして勘違いする人も多いものです。 『Microsoft Office Visual Basicプログラマーズガイド』の後ろの索引辺りで調べてみたらいかがですか?その本がお手元にないようでしたら、少なくともOfficeで、VBAの「専門家」と勘違いするような発言は辞めていただきたいものです。そこに、「事前定義関数」というのが出ていますか?いえ、Microsoft でOffice VBAの範疇で使っていますか?Microsoft サイト内を検索しても良いです。 それに、私は、「ユーザー定義関数」に対して「組み込み関数(built-in functions)」と書いてあるのではありませんか。それ以外としては、ワークシート関数(worksheet functions)と書いています。こういうのは、約束事だから、通称名は、立場によっては使えないのです。Microsoft Office VBAの範囲では、正式には「ユーザー定義関数」といっているということは、押さえておかなくてはなりません。 「一般」というステータスは、ここで臨む意識の問題であって、社会的なステータスではないのです。そんなことで、自分の発言にアドバンテージを付けようとは思いません。 何年もここで書いていると、Office のデベロッパークラスの開発者であろうが、ここの常連としては、人から教わることもも多く、「一般」と書いて、自分と他人の壁を低くしたほうがよいのです。それが暗黙の選択になっているように感じています。他の常連の方も同様のようです。上から目線で言うような人はいませんよ。コードを見れば、その人の力が分かってしまいます。 だから、「専門家」というステータスや「自信あり」というものは、本来必要ないのです。それを目安にして信ずるのは、まったくの初心者だけだからです。私を含めて、ここの常連の回答者さんたちは、必ずしも教える立場で書いているのではないのです。また、私は、必ずしも、入門の方や何も知らない人を対象にして書いているわけではありません。 最近、ここで、自称「専門家」という人の疑問の多い発言が目立ってきています。VBAのコードでも、せいぜい、1年も満たない程度のコードを書いている人もいます。「専門家」と書かなければ良いのに、と思うのです。ただ、このような初歩的な用語のレベルで、他人にダメだしするようなマナーの悪い人はめったにいませんね。そんなことは、テキストで調べればすぐ分かることですから。 SQLでも「ユーザー定義関数」というのは、私も知っています。私の紹介したWikipediaの"User-defined function"にも出ています。ただ、調べた範囲では、用語として、MSのオリジナリティを持っているように思えますし、インターネット検索によって判断したわけで、こちらが無責任に発言しているわけではありません。一般用語として流用できたとしても、限定されていると考えてよいのです。これは、経験のみでもって発言するべき種類のものではありません。また、#4は、多少の修正を入れさせていただいております。 あくまでも、Microsoft Office の範囲としての用語です。そこを押さえないと意味がボケてしまいます。 本来、英語からの翻訳で、どのように訳語が当てられるのかは、ある程度の経験者なら知っていても珍しくはないはずです。それらの言葉を、Microsoft の外部の人間が、どう表現するのかという選択肢は場合によってはないことがあります。Microsoft 側がどう使っているか、それを守らないと、いけないことも多いのです。それが、モノを書く立場の難しい部分です。 どうも古庄潤氏は、Microsoft Office VBAの専門のライターとはいえないようです。私個人、氏の書籍は持っていますが、VBAに関しては、あまり良い良い内容ではありません。ユーザー本位に、言葉を直してよい部分とそうでない部分があるのです。 Microsoft のアプリケーションを教えようとする人のルールだと思います。それを、「自作関数(self-made function)」と書いたら、ご質問者さんのように、どちらがどうか、と疑問が付いてしまいます。便宜的とかはしてはいけないのです。Office VBAでは「ユーザー定義関数」と統一したほうがよいのです。「事前定義関数」というのは、IBMのコーナーで見つけましたが、Microsoft 側では見られません。そういうところを自分の範囲内だけの記憶で、「なあなあ」ではまずいのです。 ある程度、自信を持っていたとしても、念のためにも、Microsoft のOffice カテゴリの範疇の中で、どういっているか、確認してから発言してほしいものです。私は、Microsoft Office VBAの範囲内で申しているのです。ここは、Office のカテゴリですから、Microsoft Office の範囲での回答です。 ここは、Office の話であり、別のITの仕事をされているといっても、それは、Office の範疇では通用しませんし、「事前定義関数("predefined function")」として、Office VBAやOffice でも、Microsoft でも使っていません。そのぐらいは調べてから発言しても遅くはなかったと思います。 参考:Google検索; office vba "redefined function" http://www.google.co.jp/search?hl=ja&safe=off&rlz=1R2GGIE_ja&q=office+vba+%22redefined+function%22&lr=

1hdthd
質問者

お礼

Wendy02様はすばらしい方で、いつも参考にしています。

  • zeeq-h
  • ベストアンサー率54% (6/11)
回答No.5

No.2のzeeq-hです。 業界でIT職に就いている者として補足します。 まず「ユーザー定義関数」という言葉自体は、VBAやBASICあるいはマイクロソフト言語だけで用いられている言葉ではないです。他の言語でも普通に使う一般的な専門用語です(例えばOracleの言語であるPL/SQLでも「ユーザー定義関数」は使います)。 意味合いとしてはNo.2でも述べたように、その言語が標準的に装備している関数(四捨五入関数等、いわゆる事前定義関数)以外で、その言語を 使用する側が独自に定義したもの(例えば100を渡したら消費税額5が帰ってくるような関数)をユーザー定義関数と普通に呼んでいます。 「自作関数」は著者の方が上記のことを重々承知の上で、読者にわかりやすい言葉に置き換えただけという理解が妥当なのではないでしょうか。そういう意味ではNo.1の回答も誤りではありません。 ちなみにNo.3の方の回答は、一般の方なので仕方ありませんが、対比すべき「事前定義関数」についての説明がなく、大変申し訳ございませんが、専門家としては「不可」な回答です。

1hdthd
質問者

お礼

ありがとうございます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

補足: ×「ユーザー定義関数」は、"custom function"の訳です。 は正しくは、 VBAでの「ユーザー定義関数」は、"custom function"の訳です。 ×この訳の「ユーザー定義関数」の言葉がどこから来たかは知りません。 「ユーザー定義関数」の英語訳は、"User Defined Function(UDF)" です。Wikipedia http://en.wikipedia.org/wiki/User-defined_function によれば、BASIC からだと書かれていました。

1hdthd
質問者

お礼

ありがとうございます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 言葉の定義というのは、Yes/Noを言えるほど、そんなに簡単なものではありません。 もともと、こういう単語は、英語からで、「ユーザー定義関数」は、"custom function"の訳です。 この手の話は、業界内部に深くかかわっている人でないと、分からないような気がします。業界内で、言ったもの勝ちということではないようです。おそらく、協議して決まったものだと思います。昨今のMSの安直な訳付けとは違うようです。 この訳の「ユーザー定義関数」の言葉がどこから来たかは知りません。MSは、業界で「共有」する単語については、同じような単語を、あえて別の読み方にするようなことはしません。VBAは、MSのオリジナルだと思いますが、これは、VBA独特の用語のようです。(kotobank より) あまり個人の話を書いてもしょうがないですが、VBAに「自作関数」という言葉は、他の方は、「自信あり」ですが、私は、この7~8年VBAが主で、書籍で読んだり、掲示板などを読んだりしていますが、聞いたことも使ったこともありません。ライターの古庄潤さんあたりは使っているようですが、私は、掲示板に書いているせいもあって、「自作関数」は許容範囲外です。うるさがたの人に指摘されかねません。以前、Excelの「ユーザー定義書式」を、うっかり「ユーザー書式」と書いただけで、全人格を否定されかねない中傷を受けたことがあります。 英語なら、「自作関数」は、"self-made function" で、VBAであろうが、何であろうが、一般用語として使えるとは思いますが、VBA特定の用語ではありませんし、MSのサポートの範疇では正規に使えないはずです。ちにみに、Microsoft サポートオンラインで、「VBA 自作関数」で検索しても、ヒットしません。アマチュアならともかく、同じステージで使える言葉ではないと思います。 なお、VBAでは、「ユーザー定義関数」に対するものは、「組み込み関数(主にAccess)」で、Excelでは、ワークシート関数とか言っていると思います。私は、Excelでも、「組み込み関数」と言っています。 あくまでも「一般」の立場からです。私は、自分の発言にアドバンテージはつけませんから、信じるも信じないもご自由に。

1hdthd
質問者

お礼

う~ん。 難しいです。 何度も読み直してみます。ありがとうございます。

  • zeeq-h
  • ベストアンサー率54% (6/11)
回答No.2

ほとんど同じ意味ですがニュアンスが多少違います。 マイクロソフトが用意してくれた関数(事前定義関数)と区別する意味でユーザー定義関数といいます。 「自作関数」の場合は「自分で」というニュアンスが強くなりますが、ユーザー定義関数といっている分には、別に他の人が作ったものを流用してもユーザー定義関数には違いありませんが、それは「自作」ではありませんよね。ニュアンスの違いとはそういうことです。 わかりましたか?^^;

1hdthd
質問者

お礼

うーん。 なかなか区別が難しいですね^^; ありがとうございます。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

同じです。

1hdthd
質問者

お礼

ありがとうございます。

関連するQ&A

  • ユーザー定義関数 アドイン

    ユーザー定義関数をアドインにどうやって保存するのでしょか? また、ユーザー定義関数以外のVBAをアドインに保存できますか?

  • 複素数関数のユーザー定義方法等をお教えください

    カテゴリーにVBAがありませんでしたので VBに投稿させていただきます。 EXCEL2000VBAで複素数関数や三角関数等を用いて 加速度波形処理の勉強をしています。 過去のQ&Aで VBAアドインの複素数関数を用いた場合の 計算時間の長さを短縮する方法としまして (1)ユーザー定義で複素数関数計算を作成する。 (2)モジュールに直接書込む。 との記述がありました。(質問番号:81639) 上記(1)(2)につきまして詳しくお教えください。 自作のVBAにどのようにして上記(1)(2)を 作成又は書込みすれば良いのかがわかりません。 複素数関数計算のFUNCTION?等も お教えいただけましたら幸いです。 宜しくお願いします。

  • VBAの中でユーザー定義関数を使うときに

    VBAの中でユーザー定義関数を引数に変数を持たせて使いたいのですが、変数をうまく認識してくれません。 VBAの中でユーザー定義関数を使うにはどうしたらいいのでしょうか? よろしくお願いします。

  • エクセルのユーザー定義関数で(VBA)

    エクセルのVBAで、セルに「=SheetName」と書き込めば、その関数を書き込んだセルが属するシート名をセルに代入さるようなユーザー定義関数を作りたいと考えています。 で、標準モジュールに Public Function SheetName(test) SheetName = ????? End Function と、書き込んでふと止まりました。 ユーザー定義関数を書き込んだシートの名前ってどうやって取得すればいいのでしょうか?VBでいうSenderみたいなのってあるんでしょうか? どなたか?詳しい方教えて頂けないでしょうか? 宜しくお願いいたします。

  • ユーザー定義関数について質問します。

    他社からもらったエクセルファイルにユーザー定義関数が埋め込まれていました。 これが非常に使いやすく便利なのです。しかし、一部を修正したいところがあるのですが「ユーザー定義関数」について知識がありません。 勉強しようと思ってますが、とりあえずこの関数の定義内容を見てみたいのですが、どうすれば中身が確認できますか? アドイン関数ではないので関数の定義は当ファイル内にあるはずです。 よろしくお願いします。

  • 他のBookのユーザー定義関数を使う

    例えばExcelでA.xlsというファイルのVBAでユーザー定義関数を作って、他のB.xlsというBook内でも使いたいという場合はどうしたらよいのでしょう。また、それはLAN上の別のコンピュータでも出来るでしょうか。

  • ユーザー定義関数の意味

    下記のユーザー定義関数の意味を自分なりに解釈しました。 下記の意味で合っていますか? // $dbと$user_idを受け取ったget_user関数は、$dbと$sqlを受け取ったユーザーの情報を取り出す function get_user($db, $user_id){ // データベースに接続してusersテーブルからuser_idが$user_idに一致するuser_id、name、password、typeを1行だけ表示する $sql = " SELECT user_id, name, password, type FROM users WHERE user_id = {$user_id} LIMIT 1 "; return fetch_query($db, $sql); } // $dbを受け取ったget_login_user関数は、変数dbと変数login_user_idを受け取ったget_user関数を返す function get_login_user($db){ // 変数login_user_idをセッションのユーザーIDと定義する $login_user_id = get_session('user_id'); return get_user($db, $login_user_id); }

    • ベストアンサー
    • PHP
  • ユーザー定義関数の作成

    1) 基準年の値をP0,t年後の値をPtとした場合の年あたりの伸び率rは、               1/t      r = (Pt/P0)  - 1  で計算されます。 これを計算するユーザー定義関数のVBAを教えてください。 2) 1からnまでの逆数の和  1+1/2+1/3+・・・+1/n=Σ1/i を計算するユーザー定義関数のVBAを教えてください。

  • VSUMのユーザー定義関数にてMAXとMINを追加するには?

    VSUMのユーザー定義関数にてMAXとMINを追加するには? http://okwave.jp/qa/q1578916.html 上記の質問ページに記載されているユーザー定義関数にMAXとMINの 集計を追加をしたいのですが、どのように記述すれば良いのでしょうか? エクセルのVBAを勉強し始めたのですが、利用したいのが今月末の提出物なので、 記述が出来ずに非常に困ってます。 よろしくお願いします。

  • ユーザー定義関数をEXCELに常駐させたい

    VBAの標準モジュールで作成したユーザー定義関数を、*.bas形式でエクスポートしています。 エクセルを立ち上げるたびに、インポートしなければならず、非常に手間です。 また、*.basファイルを職場の仲間にも広めたいと思っているのですが、毎度インポートすることになると、面倒になります。 そこで、誰のEXCEL本体にも常駐させ、SUM関数のようにいつでも使用できる状態にするにはどうすればいいでしょうか?

専門家に質問してみよう