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

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

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

1680閲覧

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

SugiuraY

総合スコア317

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/03/04 12:25

編集2019/03/04 12:26

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

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

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

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

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

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

イメージ説明

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

投稿2019/03/04 13:02

otn

総合スコア84421

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SugiuraY

2019/03/04 13:31

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

2019/03/05 00:37

やっぱり2013以降はヘルプがウェブ化されてますね。 ローカルで見たい場合(chmファイルが欲しい場合)は、「office 2016 chm」とかで検索するとダウンロード出来る情報が見つかります。
SugiuraY

2019/03/05 01:46

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

0

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

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

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

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

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

投稿2019/03/05 00:24

ExcelVBAer

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SugiuraY

2019/03/05 01:56

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

2019/03/05 04:58

言葉足らずで、逆に混乱させてしまったかもですね。 FileSystem は オブジェクトではなく、モジュールのようです。 (VBA.FileSystem.Dir の FileSystem にカーソルをあてて、Ctrl+I で情報が表示されます) なので、VBA.Dir でも呼び出せます。 これは、自作するモジュールでも同様で、 Public な関数を作成すると、 [モジュール名].[関数名]で呼び出せます。 しかし、オブジェクトでもないですし、 モジュールを分けたところで、同じ関数名は作れないしで、 モジュールに紐付けて呼び出す方法は、 あまり得策ではないかもしれません。 オブジェクトのTopからオブジェクトに紐付いた状態で記載したいという事でしたら、 VBA.Dir という記載になるかもですが、 VBA界隈では既知の共通関数という事で、 [VBA.]の記載を見たことはありません。。。 しかし、インテリセンスが見れるので、 組み込まれている関数に何があるのかを 知るにはよいかもしれません。 ではでは。
SugiuraY

2019/03/05 05:44

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

0

ベストアンサー

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

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

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

投稿2019/03/04 12:34

Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SugiuraY

2019/03/04 12:43

コメントありがとうございます。 Outlook オブジェクトモデルにMailitemオブジェクトを見つけることができたのですが、これはエクセルを使用しながらも、Outlook Object Modelを利用していると言うことなのでしょうか、、、 また、それと関連させた場合、 "VBA にはオブジェクトに関連付けられたメソッドと、オブジェクトと関係ない関数の両方があります。" と言う点がどうしても理解できなかったのですが、これはどう当てはめて考えれば良いのでしょうか? 的外れなご確認であれば、申し訳ございません。
Zuishin

2019/03/04 12:58

リンク先をよく読んでください。 タイトルは「Outlookでメールを作成・送信する方法」で、文中には「さて、前回記事でOutlookアプリケーションオブジェクトは取得できているので」とあります。 コピペだけするのではなく、ちゃんと読んで理解しなければ応用はききません。 二番目の質問ですが、理解するには基礎的な知識が多く必要なので、それら前提知識の無い人に限られたスペースで説明することはできません。「関数とメソッド」で検索してそれらを複数読んでください。一つだけでは誤っている可能性が高いです。
SugiuraY

2019/03/04 14:30 編集

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

2019/03/04 14:06

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

2019/03/04 14:35

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問