質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.20%

VBAで何ができるかを知るための方法等の単純なご質問

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 615

SugiuraY

score 249

vbaの初心者なのですが、エクセルというアプリケーションの範囲で何ができるかについては少しずつ、書きながら理解をすることが(牛歩ですが)できるようになってきました。

もっと世界を広げたいという思いから、どんなオブジェクトがあり、または利用可能であるのかと調べていくうちに、
メーラーを起動してメールを送る正規表現まで使えることを知りました。

A) これらは例えば「vba オブジェクト 一覧」と言う検索をしても出てこないのですが、このようなオブジェクトは通常のオブジェクト(workbookオブジェクトやApplicationオブジェクト)と言った類のものとは異なるのでしょうか?また、これらのエクセルを飛び越えるようなオブジェクトを含めてどのようなものがあるのかを知りたい場合にはMS等が横断的にこれを公表しているドキュメントはあるのでしょうか?MSのDocs等を見ても上記のMailitemオブジェクトなどが出てこないため、どこへ行けば横断的な情報にアクセスできのかがわかりませんでした。

B)また、少し角度の異なる質問なのですが、Dir関数を普段当たり前のように使うのですが、最近オブジェクトについて少し立ち止まって考えるようになってから、少し疑問に感じております。通常のエクセルないの操作ですらApplicationオブジェクトのようにvba上特定のオブジェクトにアクセスしてどのプロパティやメソッドを利用していると思うのですが、Dir関数に関しては、そもそもエクセルの外に飛び出しシェル的動作(フォルダを作るや削除するなど)にも関わらず、エクセルアプリケーションを利用して実行できてしまいます。
特にXXX.dirのように何かシェルに触るような特別なオブジェクトを呼び出してはいないと思うのですが、Dir関数はどのオブジェクトにも属していないと言うことなのでしょうか?また、オブジェクトに属していないとすれば、どのようにエクセルはOSのそのような根本的な動作ができてしまうのでしょうか、、稚拙な質問の仕方で本当に申し訳ございません。

よろしくお願い申し上げます。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+2

VBAは、VBAの基本部分と、Officeの各アプリケーション(Word、Excel、Outlook、PowerPointなど)がVBA用に提供しているオブジェクト群とそのメソッド、プロパティが合わさったものです。

LenDirなどは基本部分の機能です。

VBEのヘルプで、下記のような画面が出ますが、最初の「Exel 2010 開発者リファレンス」が後者の機能、それ以外が前者の機能です。

イメージ説明

ただ、その後のバージョンのOfficeだとヘルプがウェブ化されて探しにくかった気がしますが、いずれにせよ、VBランゲージリファレンスと、Excelリファレンス、Outlookリファレンスなどが見つかるはずです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/04 22:31

    コメントをいただきありがとうございます。
    なるほど、同じOfficeアプリケーションでも、共通に横たわる基本部分としての、VBAがあり、エクセルに限らないものがあるのですね。現在、会社のパソコンの前にいないため、VBEヘルプがすぐに見れないのですが、明日、朝一会社に行って見てみます!

    キャンセル

  • 2019/03/05 09:37

    やっぱり2013以降はヘルプがウェブ化されてますね。

    ローカルで見たい場合(chmファイルが欲しい場合)は、「office 2016 chm」とかで検索するとダウンロード出来る情報が見つかります。

    キャンセル

  • 2019/03/05 10:46

    GitHubで公開されるものにたどり着くことができました!
    https://github.com/OfficeDev/VBA-content/
    落とし始めたら思いのほか、重いものでしたが、活用していきたいと思います。
    有難うございます。

    キャンセル

checkベストアンサー

+1

「Excel オブジェクトモデル」で Object model (Excel) にたどり着きます。

「Outlook オブジェクトモデル」で Outlook object model overview にたどり着きます。

VBA といっても Excel と Outlook では違います。VBA にはオブジェクトに関連付けられたメソッドと、オブジェクトと関係ない関数の両方があります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/04 23:02 編集

    前者については、失礼いたしました。文脈から前の記事を読み解くことで(参照設定またはCreateObject)でエクセルからoutlookアプリケーションを利用することができること、またotn様からご教示いただいた通り、そもそも各アプリケーション毎のオブジェクトが存在していることが理解できました。

    後者については、申し訳ございません。確かに下地不足で、純粋に読み取れておりません。
    ”両方というのが”以下の2つを指して表現していらっしゃるのか、
    A) VBA にはオブジェクトに関連付けられたメソッドと
    B) オブジェクトと関係ない関数
    または
    A) VBA にはオブジェクトに関連付けられたメソッドと関数
    B) VBA にはオブジェクトに関連付けらないメソッドと関数
    を指しておっしゃているのかがわかりませんでした。後者であれば、腹落ちするのですが、前者であればやはりご指摘の通り、基礎的な知識が全く足りていないのでご放念ください。
    また、”一つだけでは誤っている可能性が高いです。”
    について、どの分母に対しての一つであるのかが理解できませんでした。
    せっかく、コメントをいただいたにもかかわらず、ただ理解できませんでした、コメントだけはありがとうございますというのもその善意に背くため、あえて本当に文脈として、わからない部分だけ記載をさせていただきました。
    よろしくお願い申し上げます。

    キャンセル

  • 2019/03/04 23:06

    前者ですね。

    「一つだけでは誤っている可能性が高い」というのは、最近の技術情報はかなりいい加減なものが検索上位に上がるため、一番上のものを一つ読んだだけでは誤った知識を得てしまう可能性が高いという意味です。

    キャンセル

  • 2019/03/04 23:35

    コメントありがとうございます。
    前者でしたか、私の拙いメソッドと関数の違いに対する理解からはやはり紐解けないため、咀嚼できるまで、調べてみます。
    また、一つについても、仰って頂いた内容が良く分かりました。これから調べことの際の指針に致します。
    遅い時間にもかかわらず、改めてお力添えに深謝を申し上げます。

    キャンセル

+1

VBA界隈では珍しい質問があがっていて興味深いですね。

さて、オブジェクトブラウザはご存知でしょうか?
Dir 等にカーソルをあてた状態で、Shift+F2押下で表示され、
なんのオブジェクトに関するメンバーなのか分かります。
(Dir は、正確には VBA.FileSystem.Dir という事になります)

また、特定の単語で検索できますので、
Webで検索して情報が無い時などに、
オブジェクト・メソッド・プロパティを検索して
試行錯誤する事もできます。

VBA初心者には「ExcelVBAを実務で使い倒す技術 」という本をおすすめしています。
プログラマ目線で書かれている良書です。
(読んだ時に、あの頃これがあれば。。。と思いましたよ。。。)

あと、知りたい事をWebで検索しても不十分なコードが多いので、
自分でリファクタリングしていってくださいね~

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/05 10:56

    コメントありがとうございます。
    オブジェクトブラウザ。。。初めて知りました。これはとても便利です。
    こうなると、普段Dir関数を使用する場合、なぜほかのエクセルVBAとは異なり、オブジェクトを明示的に指定してVBA.FileSystem.Dir ()等でメソッドを呼び出さないのかや、CreateObjectをしないのかが少し不思議に思えてきたのですが、調べてみます!
    コメントいただき、有難うございました〆

    キャンセル

  • 2019/03/05 13:58

    言葉足らずで、逆に混乱させてしまったかもですね。

    FileSystem は オブジェクトではなく、モジュールのようです。
    (VBA.FileSystem.Dir の FileSystem にカーソルをあてて、Ctrl+I で情報が表示されます)

    なので、VBA.Dir でも呼び出せます。

    これは、自作するモジュールでも同様で、
    Public な関数を作成すると、
    [モジュール名].[関数名]で呼び出せます。

    しかし、オブジェクトでもないですし、
    モジュールを分けたところで、同じ関数名は作れないしで、
    モジュールに紐付けて呼び出す方法は、
    あまり得策ではないかもしれません。

    オブジェクトのTopからオブジェクトに紐付いた状態で記載したいという事でしたら、
    VBA.Dir という記載になるかもですが、
    VBA界隈では既知の共通関数という事で、
    [VBA.]の記載を見たことはありません。。。

    しかし、インテリセンスが見れるので、
    組み込まれている関数に何があるのかを
    知るにはよいかもしれません。

    ではでは。

    キャンセル

  • 2019/03/05 14:44

    コメントありがとうございます。
    "FileSystem は オブジェクトではなく、モジュールのようです。"
    という表現でよくわかりました。
    下記にZuishin様もメソッドと関数を明確に使い分けてコメントいただいていましたが、おそらくDirはオブジェクトに属するメソッドではなく、単純な関数(共通関数)ということであれば整合しており、腹落ちいたします。
    いずれにしてもご質問できてよかったです。より詳細は多くのヒントを得られたので自学してみます。
    宜しくお願い申し上げます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.20%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる