Excelユーザーで、VBA(Visual Basic for Applications)に触れ始めた方から時々いただく疑問・質問があります。
「VBAの関数とワークシート上で使える関数はなぜ違うのですか?」
というご質問です。
例えば、
今日の日付を取得するのは、
VBA関数の場合は「Date」ですが、
ワークシート関数では「TODAY」です。
日付の間隔を取得するのは、
VBA関数の場合は「DateDiff」ですが、
ワークシート関数では「DATEDIF」です。
(よく似ていますが、最後の「F」の数が違います。)
厄介なことに同じスペルで似たような動作をするのに実は違うものもあります。
VBA関数の「Round」は丸めを行いますが、
ワークシート関数の「ROUND」は四捨五入を行います。
同じExcelというソフトウェア上で動いている関数なのに、なぜ違うのか、というのがご質問の主旨です。
結論から言えば、ワークシート関数とVBA関数とは、まったく別ものだからです。同じExcel上で動作していても。
同じ動作をする関数は、たまたま、同じであったにすぎません。
むしろ、同じ名称で同じ動作をする関数の方が、特殊と考えるほうがいいでしょう。
このことは、今現在のExcelだけを見ていると、納得しがたいかもしれませんが、ExcelとVBAそれぞれの過去や歴史を知ると、理解できるんじゃないかと思います。
Excelとは無関係に、Quick Basicという言語を元に、VB(Microsoft Visual Basic)というプログラム言語が1991年に発表されています。VBAはVBを元にして、1994年のExcel 5.0ではじめて採用されました。
Excelのほうは元々マッキントッシュ用の表計算ソフトで、それがWindowsに移植されたものです。
Excelのマクロは5.0からはVBAで記述するようになっていますが、それ以前のExcelは違いました。昔のExcelのマクロは、マクロシート上にワークシート関数のように記述するようになっていたのです。
これが今でも裏技的に利用されることもある、「Excel 4.0 マクロ」というものです。(このサイトではExcel 4.0 マクロについて次のようなネタをご紹介しています。「Excel 4.0 マクロとは」「Excel 4.0 マクロのサンプル」)
また、Excel以外のWordやAccessでは、それぞれ独自のマクロ言語が採用されていました。WordにはWordBasic、AccessにはAccessBasicという別のマクロ言語が。
つまり同じOfficeアプリケーションでありながら、マクロ機能についてはバラバラだったのです。昔のOfficeは。
このマクロ言語を統一しようということで、プログラム言語VBを元に考えられたのが、VBA(Visual Basic for Applications)なのです。
つまり、今でこそ同じExcel上で動く、VBAの関数とワークシート関数とは、そのルーツがまったく別物なのです。
だから、同じような関数なのに別の名称がついていることや、同じ名称の関数なのに結果が異なることの方が普通のことなのです。元来まったく別物なのですから。
VBA(Visal Basic for Applications)で業務アプリケーションを作成する際、ユーザーに何らかの入力をしてもらう場面というのは少なくありません。簡単な入力ならばInputBox関数などを利用することも可能ですが、複雑な入力を必要とするならばユーザーフォームを作成することになります。
VBE(Visual Basic Editor )で、メニュー[挿入]-[ユーザーフォーム]をクリックすると、フォームが表示されプロジェクトエクスプローラにもツリー表示されるようになります。
そして、ユーザーフォームのコーディングを行う場面では、フォームの画面を表示させたり、コードウィンドウを表示させたりという操作が頻発します。
フォームの画面を表示するにはプロジェクトエクスプローラでダブルクリックすればいいのですが、コードウィンドウを表示するにはプロジェクトエクスプローラの該当フォーム上で右クリックして、ショートカットメニューから[コードの表示]をクリックするか、メニュー[表示]-[コードウィンドウ]をクリックする必要があります。
そのため、
「もっと簡単にコードを表示できないんでしょうか?」
というご質問をいただくことがあります。
コードウィンドウを表示するにはショートカットキーを利用するのが一番簡単だと思います。
▼操作方法:コードウィンドウを表示する
[F7]キーを押す
フォームが表示されている状態で[F7]キーを押せば、そのフォームのコードが表示されます。
コードウィンドウが表示されている状態から、フォーム表示に切り替えるには、プロジェクトエクスプローラでダブルクリックする方が多いとは思いますが、こちらもショートカットキーが用意されています。
▼操作方法:ユーザーフォームを表示する
[Shift]キー+[F7]キーを押す
▼操作方法:プロシージャごとの表示をデフォルトに設定する
メニュー[ツール]-[オプション]をクリック
↓
[オプション]ダイアログ-[編集]タブをクリック
↓
[モジュール全体を連続表示]チェックボックスをOffに
↓
[オプション]ダイアログ-[OK]ボタンをクリック
上記の設定変更を行う方がいいのか、[プロシージャの表示][モジュール全体を連続表示]ボタンで一時的に表示を変更するだけでいいのか、人それぞれだと思いますので、生産性の上がるスタイルをみつけてみてください。
>文書作成代行/データ入力代行サービス
>ワード・エクセル・マクロVBA・パワーポイント・アクセス企業パソコン研修
>出張パソコン教室ITスクール
>パソコンの家庭教師BEST
プロパティ ウィンドウで設定できます。
以下に、以前に作成したUserForm2を利用して説明します。
Accelerator プロパティ
コントロールのアクセス キー(1つ文字)を設定します。値の取得も可能です。
OptionButton1.Accelerator = “a” とすると、[Alt]+[a]キーを押すとOptionButton1が選択され、チェックが入ります。
Alignment プロパティ
キャプションの位置を設定します
構文:object.Alignment [= fmAlignment]
定数 値 内容
fmAlignmentLeft 0 コントロールの左端にキャプションを配置します
fmAlignmentRight 1 (既定値)コントロールの右端にキャプションを配置します
例
For i = 1 To 4
Me.Controls(“OptionButton” & i).Alignment = fmAlignmentLeft
Next i
オプションボタンの左にキャプションが配置されます。
AutoSize プロパティ
オブジェクトのサイズを表示内容の大きさに合わせて、自動的に調整するか否かを設定します。
構文:object.AutoSize [= Boolean]
Trueにすると、コントロールのサイズを表示内容の大きさに合わせて、自動的に調整します。
Falseが既定値です。
例
For i = 1 To 4
Me.Controls(“OptionButton” & i).AutoSize = True
Next i
サイズがキャプションの幅に自動調整されます。
BackColor プロパティ
オブジェクトの背景色を設定します。
オブジェクトの背景色は、BackStyleプロパティが定数 fmBackStyleOpaque(背景を不透明)に設定されている場合に限り表示されます。
例
For i = 1 To 4
Me.Controls(“OptionButton” & i).BackColor = RGB(153, 255, 153)
Next i
BackStyle プロパティ
オブジェクトの背景のスタイルを設定します。値の取得も可能です。
構文:object.BackStyle [= fmBackStyle]
定数 値 内容
fmBackStyleTransparent 0 背景を透明にします
fmBackStyleOpaque 1 (既定値)背景を不透明にします
Enabled プロパティ
Falseにすると、淡色で表示され、マウス操作やキー操作 (アクセス キー、ホットキーを含む) でコントロールを操作することができなくなります。
元に戻すには、Trueにします。
例:OptionButton1.Enabled = False
Visible プロパティ
オブジェクトの表示/非表示を設定します。
Falseにすると非表示になります。
例:OptionButton1.Visible = False
同じグループの中では1つのオプションボタンが選択できます。
A.GroupNameプロパティでグループを分ける。
B.フレームやページなどで分ける。

