0.前置き
最近ちょっとExcel VBAの勉強を始めました。意外に楽しかったので、けっこうもくもくとやっている。
(なんでいまさら…って言われそうですけど)
最初にはまったことをもろもろ書いておきます。あと、へ~と思ったこともメモります。
1. どこに開発環境があるか分からない。
初期設定のままであれば、変更する必要があります。
Excel起動→ファイル→オプション→リボンのユーザー設定まできて、下記のチェックボックスをオンにします。
これでリボンメニューに「開発」というタブが現れます。
「開発」タブのVisualBasicを起動すれば、VBA用の開発環境を開くことができます。
2. VBA用の開発環境のおすすめ初期設定。
ググルとこの開発環境は、VBE(Visual Basic Editor)というらしいです。本当かな?
VBEを使い始める時にしておくと良い初期設定を書きます。
VBEを起動後、設定画面を開きます。ツール→オプションです。
オプションの以下を変更。
- 変数の宣言を強制するにチェック→モジュールファイル追加時に「Option Explicit」という宣言を自動でいれる設定です。
- キーワードの色を変える→初期設定は見にくい色なので、色を変更。
- (気分で)フォントを変える。→ただ、Consolasの日本語版がないのがものすごく悲しい…。
3. いざ編集を始めるとなぜか1文字打つごとに「確定」してしまう。
これははまってしまったポイント。
他のExcelのCOMアドインとの相性問題で、タイトルの不具合が起こります。
たとえば、以下のような現象が当てはまります。
- スペースをいれても、自動でバックスペースされてしまう。
- 全角日本語を入力しようとすると、1文字入力するたびに「確定(Enterキーを押したような動作)」してしまう。
回避策があったので、リンクをはっておきます。
VSTO の COM アドインが原因で、VBE で、一文字ずつ確定されてしまう。
4. VBAには種類がある。
VBAは作成するアプリケーションの種類で2種類に分類できます。
- アプリケーションレベルのカスタマイズ – ようはアドインのことです。Excelのアプリケーション自体の機能拡張。
- ドキュメントレベルのカスタマイズ – 特定のBookやWorksheetに紐づく機能開発です。私が最近やっているのもこれ。
説明はここが詳しいです。
10 行でズバリ!! [VB] Office – アプリケーション レベルの拡張機能開発 (アドイン開発)
5. Visual Studioを使って作りたい。
ここはまだ勉強不足ですが、分かっていることを書きます。
VBEをそのままVisual Studioに置き換えて開発するのは無理ですが、相当するより強力な開発方法があります。
よくOffice開発って言われているもので、
Visual StudioのプロジェクトテンプレートだとVisual C#(or VB)→Office→2010→Excel2010ブックになります。
WinFormやWebFormのアプリケーションを作成するようにExcelのWorksheetにドラッグアンドドロップしながら開発ができます。
ただ作成されるアプリケーションはクリックワンスによる配布になるので…。
配布の面ではVBAの気軽さがちょっと損なわれるかなっていうのが難点です。
このあたりのハードルが現場の運用でカバーできるのであれば、私は絶対こっちが良い。開発ツールの充実度が違います。
6. 最初に勉強する場所はどこが良い?
書籍やサイトは、本当に山のように情報があります。
おすすめを2点。
- Excel VBA 入門講座 – 本のようにまとまっていて網羅的
- VBEのヘルプ
7. 最後に
もう枯れている技術であるVBAを今年度に入ってはじめて触っています。
会社で達人な人が多くてびっくりしました。
必要に駆られて勉強し始めましたけど、最初のハードルを越えれば、なかなかいけるかも!
今年の第一四半期に習得した言語は、「VBA」ですって言えるようもう少し頑張ります。
コメント
No4の説明間違ってます。
アドインは確かにアプリケーションレベルのように思えますが、Excelそのものの機能拡張をするわけではありません。
特にリンクの10行でズバリはVBAの話ではありません。これはVSTOでの話です。
VSTOでは、アプリケーションレベルとドキュメントレベルでのカスタマイズに分かれますが、VBAではそのような区別はありません。アドインにするかしないか程度です。
またNo5も違います。この書き方だとVisual StudioでVBAを扱えるような書き方です。
VSで開発できるのはVSTOであって、VBAとは異なるものです。
全体を通してみると、VBAのことを言いたいのかVSTOのことを言いたいのか、ごちゃ混ぜです。
「Excel VBAの最初の難関」と銘打っている以上、VBAに絞ればよいと思いますが。
ご指摘ありがとうございます!