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のオブジェクトブラウザーで、右クリックして表示されるショートカットメニューから[完全に一致する単語だけを検索]オプションを選択した状態で、
「inputbox」を検索してみると、下図のような結果になります。
2つの「InputBox」がヒットしています。
ExcelのAppicationのInputBoxと、
VBAのInteractionのInputBoxです。
ExcelのApplicationのInpuBoxが、
ApplicationオブジェクトのInputBoxメソッドです。
VBAのInteractionのInputBoxが、
VBAのInputBox関数です。
まったく別の2つの「InputBox」が存在しているということが、オブジェクトブラウザーで検索してみればよく見えてきます。
Application.InputBoxメソッドとInputBox関数は含まれるファイルも違う
これらのApplication.InputBoxメソッドとInputBox関数はまったく別物で、それぞれ含まれているファイルも別物です。
ApplicatioオブジェクトのInputBoxメソッドは、Excelライブラリに含まれているわけですから、ファイルとしてはEXCEL.EXEに含まれています。
VBAのInputBox関数は、VBAライブラリに含まれているわけですからファイルとしては、VBE7.DLLに含まれています。
Application.InputBoxメソッドはWord・PowerPoint・Accessには存在しない
Word・PowerPoint・AccessでもVBAのInputBox関数は使えますが、Appication.InputBoxメソッドは使えません。Word・PowerPoint・Accessには、Application.InputBoxメソッドがそもそも存在しませんから。
Word VBEのオブジェクトブラウザーで「inputbox」を完全一致で検索してみると下図のように、VBAのInteractionのInputBoxだけがヒットします。
PowerPoint VBEのオブジェクトブラウザーで「inputbox」を完全一致で検索すると、Wordの場合と同じく下図のように、VBAのInteractionの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のグローバルメンバーでもあるので、
モジュール名の「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メソッドはまったくの別物です