★独学者が1年後にExcelVBAを爆発的に伸ばすための最低限の基礎知識メモ(ダイジェスト):Vol0048:すべての基本(ヘルプ読解含)。「自作関数」について01
バックナンバー目次ページは→こちらです。
まぐまぐのページは以下です。
https://www.mag2.com/m/0001691660.html
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■独学者が1年後にExcelVBAを爆発的に上達させるための最低限の基礎知識メモ(ダイジェスト)
Vol.0048
タイトル:★独学者が1年後にExcelVBAを爆発的に伸ばすための最低限の基礎知識メモ(ダイジェスト):Vol0048:すべての基本(ヘルプ読解含)。「自作関数」について01
バックナンバー目次とサンプル号
https://euc-access-excel-db.com/tips/ct07_se/ct075012_xls2k_vba_tips/mag2-01
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
※いきなり「注」
当メルマガでは、「ヘルプ」とは、
「バージョン2007や2010、あるいは2003以前のヘルプ」を想定しています。
今のヘルプは機械翻訳のためか、昔のヘルプの比じゃないくらいに、
「誤訳」や意味不明な文章が多いので・・・。
しかも、
「F1キー押下してもまともにヘルプページが出てこねーじゃねーかよ!」みたいな。
とても使う気になれません。
VBAレジェンドのチルドレンなどの市販書籍では、
無責任に「今のヘルプ」を推奨していますが、
あんな誤訳が多くてまともに目的のページが出てこないものを推奨するなんて、
「マジでバカなのか?無責任すぎる!」と思ってしまいます。
マイクロソフトがそんなものしか用意してないから
仕方がないのかもしれませんが・・・。
だとしても、VBAレジェンドやチルドレンたちは、
何の注意書きも方向示唆もしないわけで、
「まともに教える気なんかさらさら無い」というのが、
そういうところからも、「ありあり」とうかがえます。
「本当にしっかり教えたい・伝えたい気持ちがあるなら」、
「欲を言うと、基本部分はバージョン2007や2010、あるいは2003以前のヘルプのほうが
良いのですが・・・是非、中古のExcelでもいいので読んでみて!」
などと自著などには、注意書きや方向示唆を「必ず」書くはずです。
逆に何の注意書きも方向示唆も書かないので、
「どーせお前らは読んでもわからんだろ?」とでも思っているのかな・・・?、
という疑念も生じさせてしまいます。
=================
それでは、以下、本文です。
これから当分のあいだ、「ヘルプやオブジェクトブラウザを読むための基礎知識」、
をやっていきたいと思います。
ただ、「初心者」の僕が知ってるレベル・範囲、というか、つまり、
「たかが知れた最低限の知識」なので、正確でもないし、大変申し訳ございません。
先に謝っておきます。
「ヘルプやオブジェクトブラウザが絶対に読める」、とは確約できませんが、
でも逆に、
「ここ知ってないと絶対にヘルプやオブジェクトブラウザは読めません。」とか、
「他のプログラム言語と少し違うVBAの独自ルール」とか、
そういったことも、少し書いていきたいな・・・・、と思います。
ヘルプやオブジェクトブラウザが読めないと「しなくてもよい間違い・ミス」が増えるし、
「爆発的な上達」が「不可能になる」ので、
自分で言うのもなんですが、
「のっけから、けっこう大事なところ」、だと思います。
どうぞ、よろしくお願い致します。
というわけで、まずは、
ヘルプやオブジェクトブラウザを読むにも、VBAを覚えるにも、
まずは「用語」というものがあります。
今号以降では、「最低限のヘルプ用語」を理解することも目的の1つに位置付け、
「VBA」の用語について少しずつお話をしていきたいと思います。
で、いきなり、「核心」に近いところをお話しします。
VBAをやるにも、
ヘルプを読むにも、
オブジェクトブラウザを読むにも、
クラスモジュールを作るにも、
デバッグ(不具合潰し)をするにも、
必ず「必要」となる、
「核」となる、
知識です。
「これの仕組みとオブジェクトやオブジェクト式、オブジェクト変数の意味さえが理解できれば」、
「VBAの真の基礎のクラスモジュールの超簡単なものならすぐ作れる」し、
「Web検索やQ&Aサイトでの質問も、それまでよりは格段に怖くなくなる」し、
「ほぼ、怖いものが無くなる」、というくらい、
「重要」、
なこと、
「重要な箇所」、です。
もったいぶってすみません。
ではお話しします。
それは「関数」「自作関数」についてです。
「関数」、とりわけ「自作関数」こそが、
(恐らく他のプログラミング言語もそうだと思うんですが)、
VBAにおいても「核心」となります。
(※VBAに限っては、特に「Functionプロシージャ」が「自作関数の」「基本」として重要です。)
なぜ「関数」が重要かと言うと・・・、
まず「関数とは何か?」について、ですが・・・、
「関数」とは、簡単に言うと
「条件値を与えると、何らかの処理をしつつ、同時に、何らかの値を投げ返してくれる」とか、
「条件値を与えると、何らかの動きを取りつつ、同時に、何らかの答えを出してくれる」と、
・・・そういう「命令単語」のことです。
で、その「関数」なんですが、
もちろん、VBAのみならず、
C言語にも、(今はやり?の?)Pythonにも、
もちろんVisualBasicにも、C++にも、C#にも、
JAVA、JavaScript、Peal、PHP、などにも、
つまり、
『 (たぶん)すべてのプログラミング言語に 』、
その言語なりの「関数」が事前にあらかじめ組み込まれていますし、
もちろん、「自作」もできます。
(そのあらかじめ組み込まれた関数を、「組込関数」と呼んだりします。)、
もっと言うと、
実は・・・、
Windows自体…も、Macも、Linuxも、
ExcelやWord自体も、アクロバットリーダーもGoogle Chromeも
フォトショップもイラストレータもYoutube配信も、ショッピングカートも、
家電の中の各種部品を動かすためのプログラムなども、
市販ビジネスソフトも、
「全部が全部」、
「関数」で、
(恐らくですが、)「7、8割がた」が、
できています。
(※できています。=形成されています。=構築されています。)
もちろんそんなこと、ちゃんと調査したわけじゃありませんが、
でも恐らく、少なく見積もっても50%は下らないのではないか?と推測します。
つまり、逆に言うと、
「関数」をやらなければ(=勉強しなければ)、
「プログラミングの上達はありえない」ということにもなります。
だって、
『 どんなソフトやサービスや機械も、「7、8割がた」が、「関数でできている」・・・ 』、
(※5割程度かもしれませんが)・・・・
のですから。
(※注
「7、8割がた」の多くは「組み込み関数」と呼ばれる、
「あらかじめ用意されたモノ」であって、
自作するモノは10%以下になってしまうかもしれません。
でもそれでも、「自作関数」が超重要です。)
なので「関数」や「自作関数」は、「プログラミングの基本中の基本の一つ」とも言えます。
そして、そのように重要な位置づけの「関数」を、
「自作する、自分の手で作る」、というのは、本当に重要です。
(繰り返しますが、「関数」はどのプログラミング言語でも自作できます。Excelの場合、その「自作関数」が、「ワークシート関数」としても使えるようになります。)
くどくてウザくて何度も同じこと言ってすみませんが、
「自作関数」の、
「その仕組みを自分で知ることが・そして作れることこそが」、
「ある地点からの爆発的な上達」に、とてもつながりやすくなっていくので、極めて重要です。
逆に、
『「ソフトを形づくる要素(ある意味パーツ)の 7、8割を占める”関数”」のことを勉強しないでおいて、本当にプログラミングが上達できると思う?』
・・・ということでもあるのです。
言い換えると、
『 プログラミングの学習で「自作関数のことをやらない・詳しく説明しない・作成体験しない」、というのは 』、
ある意味、
『 犯罪(騙し、詐欺行為)に近い 』、
のです。
ということは、
それ(=関数+自作関数や、関数の理解を妨げるVBAの悪しき「省略」等々のこと)を、
初心者本でまったくと言っていいほど「教えない」、
『 プログラミングの学習で「自作関数のことをやらない・詳しく説明しない・作成体験しない」』、
そういった、
『 VBAレジェンドやそのチルドレン、出版社、ライター、Youtuber 講師、等々』は、
「どんな人たち?」、
という疑問も湧いてくるわけです。
ちなみに、というか、これも何回も何回も同じこと言ってすみませんが、
今の日本のVBA業界において、
「自作関数」のことを詳しく解説した本は、
「1冊も」、
「ありません」。
ソフトウェアの構成要素の「7、8割(あるいは5割~)」を占める、「関数・自作関数」の
「詳しい解説本が」、
「日本には」、
「1冊も」、
「無い」
んですよ?
Excelが出て、20年以上も経っているのに。
信じられます?
考えらえます?
そんなこと。
「あんたら、そもそも、教える気、あります?」
っていう話なんです。
いつもどおり、話が逸れました。
すみません。
話をもとに戻します。
「関数」、とりわけ「自作関数」こそが、(他の言語と同様、)VBAにおいても「核心」となります・・・・、というお話でした。
で、
今回その題材にするのは、
僕がこれまでに何回も何回も言ってきました、「5つのタイプの自作関数」のうちの1つ、
「何らかの動きをしつつ、同時に、一般データをも返すもの」です。
「~~~しつつ、オブジェクトをも返すもの」でもいいのですが、オブジェクトの説明やらなんやらが必要なので、なんだかんだでやっぱり「いきなりは理解が難しい」ため、今回はやめときます。
で、今回はそのために、
「Functionプロシージャ」を使います。
プロシージャには色々なタイプがありますが、例えばそのうちの1つの
「Subプロシージャ」だと、
「何らかの動きをしつつ」・・・・、まではできるのですが、
「一般データ(あるいはオブジェクト)をも返す(=答えをユーザー側に投げ返す)」、
ということまでは(基本的には)できない仕様になってしまっています。
ですので、今回の題材には向きません。
(※「基本的には」と書いたのは、実は、Subプロシージャであっても引数を参照型にして、それ経由で、「値を他の箇所に引き渡す」ということができるからです。が、それは値を「直接」「返す(=答えをユーザー側に投げ返す)」という原始的・原則的・かつ・直接的なイメージではなく、「横流しするイメージ」ですし、少し細工が必要です。細工が必要なことはいきなりは理解できないのでここではあえて取り上げません。ここでは、SubやFunctionの「原始的・原則的・かつ・直接的な動き」のみに焦点をあてます。)
それに、
「Functionプロシージャ」なら、「無理せずに簡単にSubの動きと全く同じことができます」し、一応、「5つのタイプの自作関数」のうちの、「5つすべて」が作れますから、
「実は題材にはもってこい」、
ということもあります。
(※上記の文においての「5つのタイプの自作関数」とは、→「こちら」で言っている(a)~(e)の「5つの動き」のことです。後述の「プロシージャの5つのタイプのSub、Function、3つのProperty」とは異なるものなのでご注意ください。)
いちおう、想定している方々としましては、
『 何らかの「ワークシート関数」が扱える 』、
『 多少でもプロシージャを作った経験がある 』
という習熟度の方々を想定していますが、
『 そうじゃない人 』にも、
なるべく理解できるように書いていこうと思います。
自作関数がすでに作れる人には知ってる話ばかりでつまらないかもしれませんが、
でも「自称上級者だけど、でもいいかげんに覚えてきた人」には、
多少、新鮮な内容もあるかもしれません。
(※特に、ヘルプやオブジェクトブラウザが読めない自称上級者のかた、とか。
講師さんでも初級講師の方だと、ヘルプやオブジェクトブラウザが読めない人も
いらっしゃるかもしれませんね。
『 ヘルプやオブジェクトブラウザが読めない人ごときを
上級者」と呼んでいいのか?』
という疑問は当然ありますが・・・。)
なので、ご自分の「基本の見直し」的な意味でも、読んでみてもいいかもしれません。
(※もちろん、無理には読まなくてもいいです。
VBA初心者の僕の書いてることなんて、
「初心者のたわごと」でもありますので・・・。
もしご興味があったらで結構です。)
では、まず以下のPDFをご覧ください。
https://euc-access-excel-db.com/00000WPPDF/xyz-function_basic01.pdf
A3用紙に印刷すると見やすくなるので、一度、コンビニかどこかで印刷してみてください。
非常に重要な知識なので、コンビニ等で80円くらい出しても損は無いと思います。
いちおう、A4に印刷しても読めることは読めますけど、字がかなりちっこいです。
ではまず、このコードを標準モジュールをひとつ新規に作って、同じように書いてください。
(※以下のコードをコピペすればOKです。)
Function z(x As Long, y As Long) As Long
Let z = x + y
End Function
そのあと、
シートのA列に、上から順番に1、2、3、と数値を入力し、
シートのB列に、上から順番に4、5、6、と数値を入力します。
上記の3行のコードは、1つの「Functionプロシージャ」を表しています。
ヘルプの定義では「Functionプロシージャ」は、以下のようになっています。
『 プログラム内で特定の作業を実行し、値を返すプロシージャ。
Function プロシージャは、Function ステートメントで始まり、
End Function ステートメントで終わります。』
「Functionプロシージャ」の「Function」1語だけでも、
直訳では「関数」という意味を持っていますが、
VBAの場合は「Functionプロシージャ」と呼びます。
「Functionプロシージャ」がまず一つ目に覚えるべき、
「値を返す自作関数」となります。
(他プログラミング言語では「Function」とだけ呼称して、「プロシージャ」なんて
言い方はしないかもしれないので、さまざま、異なる、と思いまます。)
ちなみにVBAの場合、「プロシージャ」には5つのタイプがあって、
「Subプロシージャ」
「Functionプロシージャ」
「Property Getプロシージャ」
「Property Letプロシージャ」
「Property Setプロシージャ」
の5つです。
(「ヘルプに書いてあるもの」として。)
これ以外のタイプの「プロシージャ」は、たしか、存在しないと思います。
(※前述した「5つのタイプ」・・・、つまり、「こちら」で言っている(a)~(e)の「5つの動き」とは異なるものなので混同しないようにご注意ください。ここでは「動き」のことではなく、単に「プロシージャの種類」のことを「タイプ」と表現しています。)
で、僕がするVBAの説明の場合、
もう面倒なので、この5つを全部ひっくるめて、「自作関数」と呼んでしまっています。
ほんとは違うので、他の場所で「自作関数に触れた文書」を読む場合は、
そちらの文書のルールに従ってください。
でも、中でも「Functionプロシージャ」は「自作関数中の自作関数」っていう感じです。
なんてったって「Function」(直訳自体が「関数」、「機能」と、いう意味)だし。
更にちなみにですが、「値を返す返さない・その他」のほうの「5つのタイプの自作関数」は、
「Functionプロシージャ」だけ知っていれば、とりあえずは(用途・目的は狭くなりますが)、
いちおう、実現(というか、実装)できます。
(実際には「Functionプロシージャ」だけだと色々作れないので、
その他のプロシージャも必要になってきます。
例えばExcelは「Subプロシージャ」のことを「マクロ」と認識しますが、
FunctionプロシージャやProperty系のプロシージャのことは、
「マクロ」と認識できません。
なので、Excel内でマクロとして機能するのは「Subプロシージャ」だけです。
(先頭に「Private」が付かないもの=「Publicと書いたとみなされるもの」だけ)
そのように、色々なシーンで、適材適所で、
「使えるプロシージャの種類」は変わってきます。
でも、どの種類のプロシージャも、
「値を返す返さない・その他・のほうの」、「5つのタイプ」の
どれかにあてはまります。)
なお、ヘルプには
「プロシージャとは?」ということについて、
「Subプロシージャ」
「Functionプロシージャ」
「Property プロシージャ」
「の3つです~」、
と書いてあります。
そして「Property プロシージャ」のヘルプページにて、
「Property Getプロシージャ」
「Property Letプロシージャ」
「Property Setプロシージャ」
の3つのプロシージャのことが書いてあります。
ヘルプ内では
「Functionプロシージャ」は「関数」とは明確には呼ばず、
「Functionプロシージャ」、と書いてあります。
ヘルプ内で言う「関数」は、「組込関数」のことです。
混乱させると思うので申し訳ないのですが、
なので結局は、VBAでは他言語とは違って、「Functionプロシージャ」を
『 あえて「Function」と1語で呼ぶ 』ということはしなくてもOKだと思います。
ただし、(更に混乱させると思うので申し訳ないのですが、)
本メルマガでは逆に、
僕の独断と偏見での説明の都合上、
便宜的に、「Functionプロシージャ」を、「関数」というくくりに、
とりわけ、「自作関数」というくくりに、
誠に勝手ですみませんが、入れてしまいます。
ごめんなさい!!!
話が逸れるの何回目でしょうか・・・。
ホントすみません。
で、
その5つの「プロシージャの」タイプのうち、
「値を返す」タイプのモノについては、
「Functionプロシージャ」のほかに、
「Property Get プロシージャ」もそうです。
「Property Get プロシージャ」はクラスモジュールというものを作るときによく出てきます。
(標準モジュールやシートモジュールなどでも使えますが。)
また話が逸れました。
ほんと、すみません。
次回はは、まずは、「Functionプロシージャ」が、
『 ワークシート上で「ワークシート関数として使える」』、
という体験だけをして頂きます。
今回は以上です。
==========================================================================
バックナンバー目次とサンプル号
https://euc-access-excel-db.com/tips/ct07_se/ct075012_xls2k_vba_tips/mag2-01
----------------------------------------------------------------------
■独学者が1年後にExcelVBAを爆発的に上達させるための最低限の基礎知識メモ(ダイジェスト)
発行システム:『まぐまぐ!』 http://www.mag2.com/
配信中止はこちら https://www.mag2.com/m/0001691660.html
----------------------------------------------------------------------
- 投稿タグ
- 「本物」に近づくために, ExcelVBA, Excel連携VBA, パソコンでの自動化, マクロ, 独学, 自動化