Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » InputBox関数とAppication.InputBoxメソッドはまったくの別物です

InputBox関数とAppication.InputBoxメソッドはまったくの別物です

対象:Excel2007, Excel2010, Excel2013

Microsoft MVP Windows Server for Small and Medium Businessの、Satoru Nasuさんが、「確かにVBAのImputBoxは奥が深い!」というツイートをしてらっしゃいました。

このツイートを見て、Excel VBAの「InputBox」について、誤解をしている方がいらっしゃることを思い出したので記事にしておきます。

誤解とは
「VBAのInputBoxはコードの書き方によって本来は同じものの形状が変化して表示されている」
といった間違った解釈です。
このような誤解をしている方が、どうもいらっしゃるようなのです。

Excel VBAで出てくる、Application.InputBoxメソッドとInpuBox関数とは、まったくの別物です。まったく別のものに、たまたま同じ「InputBox」という名前がつけられてしまっているだけです。

妙な誤解をしている方には、VBE(Visual Basic Editor)のオブジェクトブラウザーや、省略しないコードの書き方から、Application.InputBoxメソッドとInpuBox関数が別物だということを納得していただきたいと思っています。

[スポンサードリンク]

オブジェクトブラウザーで2つのInputBoxを確認する

まずはオブジェクトブラウザーで2つのInputBoxを確認してみましょう。

ExcelのVBEのオブジェクトブラウザーで、右クリックして表示されるショートカットメニューから[完全に一致する単語だけを検索]オプションを選択した状態で、

VBAのInputBox関数とExcelのApplication.InputBoxメソッドはまったくの別物ですよ

「inputbox」を検索してみると、下図のような結果になります。

VBAのInputBox関数とExcelのApplication.InputBoxメソッドはまったくの別物ですよ

2つの「InputBox」がヒットしています。

ExcelのAppicationのInputBoxと、
VBAのInteractionのInputBoxです。

ExcelのApplicationのInpuBoxが、

VBAのInputBox関数とExcelのApplication.InputBoxメソッドはまったくの別物ですよ

ApplicationオブジェクトのInputBoxメソッドです。

VBAのInteractionのInputBoxが、

VBAのInputBox関数とExcelのApplication.InputBoxメソッドはまったくの別物ですよ

VBAのInputBox関数です。

まったく別の2つの「InputBox」が存在しているということが、オブジェクトブラウザーで検索してみればよく見えてきます。

Application.InputBoxメソッドとInputBox関数は含まれるファイルも違う

これらのApplication.InputBoxメソッドとInputBox関数はまったく別物で、それぞれ含まれているファイルも別物です。

ApplicatioオブジェクトのInputBoxメソッドは、Excelライブラリに含まれているわけですから、ファイルとしてはEXCEL.EXEに含まれています。

VBAのInputBox関数とExcelのApplication.InputBoxメソッドはまったくの別物ですよ

VBAのInputBox関数は、VBAライブラリに含まれているわけですからファイルとしては、VBE7.DLLに含まれています。

VBAのInputBox関数とExcelのApplication.InputBoxメソッドはまったくの別物ですよ

Application.InputBoxメソッドはWord・PowerPoint・Accessには存在しない

Word・PowerPoint・AccessでもVBAのInputBox関数は使えますが、Appication.InputBoxメソッドは使えません。Word・PowerPoint・Accessには、Application.InputBoxメソッドがそもそも存在しませんから。

Word VBEのオブジェクトブラウザーで「inputbox」を完全一致で検索してみると下図のように、VBAのInteractionのInputBoxだけがヒットします。

VBAのInputBox関数とExcelのApplication.InputBoxメソッドはまったくの別物ですよ

PowerPoint VBEのオブジェクトブラウザーで「inputbox」を完全一致で検索すると、Wordの場合と同じく下図のように、VBAのInteractionのInputBoxだけがヒットします。

VBAのInputBox関数とExcelのApplication.InputBoxメソッドはまったくの別物ですよ

Access VBEのオブジェクトブラウザーで「inputbox」を完全一致で検索した場合もやっぱり同じです。

Word・PowerPoint・AccessでもVBAのInputBox関数は使えますが、Application.InputBoxメソッドが存在するのはExcelだけです。

コードを省略せずに書いてみる

普段VBAのコードを書くときにライブラリ名から書くことは、あまりありませんが、省略をしないでコードを書いてみることでも違いが見えてきます。

VBAのApplication.InputBoxメソッド・InputBox関数を使うときは、
 tmp_xls = Application.InputBox("InputBoxメソッド")
 tmp_vba = InputBox("InputBox関数")
といった書き方をすることが多いはずです。

しかし、この書き方は、実は省略されたものなのです。

ライブラリ名から省略しないで書くと、、
 tmp_xls = Excel.Application.InputBox("InputBoxメソッド")
 tmp_vba = VBA.Interaction.InputBox("InputBox関数")
のように、それぞれ書けるのです。

普段お目にかかる、
 tmp_xls = Application.InputBox("InputBoxメソッド")
というコードは、
 tmp_xls = Excel.Application.InputBox("InputBoxメソッド")
から、ライブラリ名の「Excel.」を省略した書き方なのです。

普段よく見かける、
 tmp_vba = InputBox("InputBox関数")
というコードは、
 tmp_vba = VBA.Interaction.InputBox("InputBox関数")
から、ライブラリ名の「VBA.」を省略して、
 tmp_vba = Interaction.InputBox("InputBox関数")
と実は書くことができます。更に、InputBox関数はVBAのグローバルメンバーでもあるので、

VBAのInputBox関数とExcelのApplication.InputBoxメソッドはまったくの別物ですよ

モジュール名の「Interaction.」も省略して、
 tmp_vba = InputBox("InputBox関数")
と書くことができるのです。

省略をしていない、
 Excel.Application.InputBox
 VBA.Interaction.InputBox
という2つのコードを見れば、まったく違うものだということが見えてきます。

しつこいですが、Excel.Application.InputBoxメソッドとVBA.Interaction.InputBox関数は、まったく別物です。書き方によって同じものの形状が変化しているわけではありません。

ExcelのApplication.InputBoxメソッドとVBAのInputBox関数は、まったく別物だということを納得してから、引数の細かい説明については田中亨さんの記事とか、それぞれのヘルプを読んでみてください。

最終更新日時:2022-10-03 17:46

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » InputBox関数とAppication.InputBoxメソッドはまったくの別物です

「VBA関数」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.