20
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

VBA入門【プログラマー向け最小限スタイル】

Last updated at Posted at 2020-09-09

始まり

誰かがこう言っていました。

「この世界には2種類の人間がいる。
他の言語を学んでから Excel VBA に出会う人間と、
そうでない人間だ。」

こんな人に向けて書きました

この記事は前者のために書かれた内容です。
後者は他の言語をマスターしてから来ていただくことをお勧めします。

高水準言語を既に学んだ人が1日で基本を理解するための記事です。

特にDotNet系やPython、Java系、C#系などの

高水準言語を既に学んだ人はVBAの文法を学ぶコストは低いです。

他の言語を学んでからVBAに来た場合に、
「これさえ理解すれば後は公式リファレンスを
読みながらコーディングするだけ!」
みたいなレベルになれるようにしました。

文法とか型の種類とか、他言語との違いは、読むのも書くのも面倒なので、
「困ったらぐぐる」スタイルでいきましょう。
これぞ新世代エリートのスタイルです。(書くのをサボりたいだけ)

こんな人が書きました

どうも、ShortArrow です。最近、VBA にコンストラクタが無いことに、改めてイラっとしました。

いにしえのIDEとの出会い

「ExcelはVBAというものでプログラミングができるらしい。」
という情報を得たあなたは、「どこでコードを書くの?」と思うはずです。

その場所を開くにはAlt+F11というショートカットキーが、
鍵となります。

Excelを開いたら、ショートカットキーAlt+F11を使ってください。
この時に現れる、いにしえのIDEをVBEと呼びます。

プロジェクトツリー

上記でご紹介したVBEの中で、Ctrl+rを使うと、プロジェクトツリーが開きます。
image.png

hogeとかfoobarだと味気ないので「なんかてきとう」にしました。

HelloWorld

モジュールの作成

このツリー上で、「標準モジュール」を挿入してみたりします。
image.png
そんなこんなで、/VBAProject/標準モジュール/Module1が作成できたでしょうか?
image.png

標準モジュールの実体は拡張子が.bas、クラスは.cls、フォームは.frmです。

初めてのSubプロシージャの作成

このModule1をダブルクリックすると、コード入力画面にカーソルが移動します。
そこで下記のコードを入力します。

Module1.bas
Sub EnterTheVbaWorld()
    Debug.Print("Hello Leagacy World!!")
End Sub

実行

入力出来たら、ショートカットキーCtrl+gを使ってイミディエイトウィンドウを開きましょう。
そして、先ほど書いたコードにカーソルを合わせて、ショートカットキーF5を押してください。
F5キーはカーソル位置のSubプロシージャを実行します。

Subプロシージャとは「戻り値のない関数」と思っておけば、2~3日はOK!

結果

イミディエイトウィンドウに下記が表示されたら成功です。

イミディエイトウィンドウ
Hello Legacy World!!

セルの操作

Subプロシージャの追記

先ほどのModule1に下記を追記します。

Module1.bas
Sub MoveCellValue()
    ThisWorkBook.Sheets("Sheet1").Cells(1,2)=ThisWorkBook.Sheets("Sheet1").Cells(1,1)
End Sub

セル操作の実行

先ほどと同様に、F5キーで実行します。
この時、Sub MoveCellValue()から最後のEnd Subの間にカーソルがある状態で実行してください。

セル操作の結果

シート名「Sheet1」のセル「$A$1」の内容が、シート名「Sheet1」のセル「$B$1」にコピーされます。

人に使ってもらう

さて上記を実験した後、まだ機能は2個しかありません。
それでも、せっかく作ったVBAコードです。
「ぜひ周りの一般ピーポーの方たちに使っていただきたい。」
「それに、フィードバックを得たほうが成長できる!」

一般ピーポーはVBEを見たがらない

そんな思いを形にする方法は大きく3つあります。
いずれもVBEを開かずにマクロを実行するための手法です。

  • 図形のクリックをトリガーにする方法
  • 組み込みイベントをトリガーにする方法
  • ワークシート関数として利用する方法

図形のクリックをトリガーにする方法

なんでもいいので図形を挿入します。
image.png
その図形を右クリックして、
image.png
「マクロの登録」をしようとすると
image.png
どのマクロを登録するのか選ぶことが出来ます。
一覧から選択してOKボタンを押すだけです。

ここに表示されて登録処理が可能なのは、Publicで引数のないSubプロシージャのみです。
SubはデフォルトでPublicですが、Privateを付けてカプセル化することもできます。
また、Functionプロシージャは表示されず、登録できません。

組み込みイベントをトリガーにする方法

上記のプロジェクトツリーでThisWorkBookとかSheet1とかをダブルクリックすると、
コード入力エリアの上の部分が下記画像のようになると思います。
image.png
これを、いろいろ切り替えて遊んでみると、コードが自動生成されます。
自動生成されたコードは、不要ならDeleteBackspaceで消して大丈夫です。
その生成されるコードの中には、

ThisWorkBook.cls
Private Sub Workbook_Open()

End Sub

というものがあったりします。
この中にコードを記述すると、Excelファイルが開いたときに実行されるようになります。

ThisWorkBook.cls
Private Sub Workbook_Open()
    MsgBox "Event Trigger!!"
End Sub

こうすると、Excelファイルを開いたときに
「Event Trigger!!」というメッセージボックスが表示されます。

他にも、キー入力や、セル選択などをトリガーにしたコードを自動生成できます。
いろいろ試してみてください。

ワークシート関数として利用する方法

Publicで戻り値のあるFunctionプロシージャは、セル内で数式として利用することが出来ます。

例えば、Module1に、下記のように記述するとします。

Module1.bas
Function One() As Variant
    One=1
    Exit Function
End Function

これで、OneというFunctionプロシージャはワークシート関数として利用することが出来ます。

例えば、「$F$2」セル内に=One()と入力すると、1が表示されます。

保存方法

VBAが記載されたExcelファイルは、いつもの「.xlsx」という拡張子では保存できません。
.xlsm」という拡張子で保存してください。
Excelを再起動した後に、もう一度VBEを開くと保存したコードを見ることが出来ます。

締め

ここまで出来れば、Arduinoで言うと「Lチカ」ができたようなものです。
折り紙で言うと「山折り」ができたくらいで、
裁縫で言うと「玉止め」ができるくらいでしょうか。

今後

基本的にVBAを学ぶことはお勧めしません。YO OFFICEなど、よりモダンな方法を検討してみることをオススメします。基本的にExcelファイルは、SQLなどへ入れるための情報の前処理やちょっとした計算ツールとしての利用を行ない、Excelファイルへの入出力はPythonやPowerShellで行うことを推奨します。Pythonがいい理由については、こちらをご覧ください。また、PowerShellについては、ImportExcelをご確認ください。

そのうえで、どうしてもExcel内部で完結したい場合に限ってVBAを利用しましょう。

学習

この先を学ぶには、Office TANAKAがオススメです。
Google検索で「TANAKA VBA ファイルを開く」などのキーワードで検索するとヒットします。
こちらのサイトの記事は、いずれも物事の本質をとらえた濃いものです。
セミナーなども開催されているようですが、私の場合は無料記事だけで完全マスターできました。

より高度になってくると、Excel VBA リファレンスをみるのが確実だし速いです。
言い換えると、出来る限り早くExcel VBA リファレンスを読めるようになるべきです。

また、早い段階でテスト駆動開発という手法を取り入れることをオススメします。
コードの品質がが上がり、開発速度が非常に上がるので損しません。
下記のIDEの強化でも触れていますが、RubberDuckを利用すると手軽にテストできます。

IDEの強化

「VBEって過去の遺産感が強すぎて」「普段はvscodeを使ってるから、差を感じてツライ」という場合には、
RubberDuckをお勧めします。また、VSCode拡張機能もあるので是非お試しください。

それでは皆さん、VBAで最高のExcelライフをお楽しみください。

20
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?