zirconsoft’s blog

Microsoft関係について取り上げます。

VBAをマスターするにはオブジェクト指向の理解が必要

久しぶりにVBAを触ってみたら、以前書いたときとコーディングの感覚が大きく違っていたので、そのことを書きます。
f:id:zirconsoft:20171107141142j:plain

VBAとは

VBAVisual Basic for Applicationsの略で、MicrosoftExcelやWordなどのOffice製品で動作するマクロ言語という種類のプログラミング言語です。

C言語を習いたてのとき挫折したVBA

VBAを書いた一番最近の記憶は、大学一年生でC言語のプログラミングを習いたてだったころだと思います。
他の大学に通っている高校の時の友達が、大学でVBAを習っているという話を聞いて、自分も少しやってみようかなと思って少しだけ触ってすぐ挫折したのを思えています。
VBAの基本的な文法が、C言語と大きく異なること、そしてオブジェクト指向の考え方がまだよく理解できてなかったからだと思います。
オブジェクト指向を学習した今は、VBAを比較的、楽にプログラミングできるようになりました。

VBAオブジェクト指向

オブジェクト指向とは

オブジェクトを中心に考えるプログラミングの手法です。
説明するとかなり長くなってしまうので、詳しくはWikipediaを見てください。
オブジェクト指向プログラミング - Wikipedia

VBAはかなりオブジェクト指向な言語です

VBAオブジェクト指向型言語であるかということについては、細かいところで議論があるようですが、個人的にはVBAはかなりオブジェクト指向的なコーディングスタイルだと思います。
VBがオブジェクト指向言語でない理由 -一般的にVBはオブジェクト指向で- Visual Basic(VBA) | 教えて!goo
なのでオブジェクト指向でのプログラミングを一度経験しておいた方が、より理解を深められ簡単にVBAでコーディングできるようになると思います。
実際に自分もC#Javaオブジェクト指向を勉強した今の方がVBAでのコーディング能力が高くなっていると思います。

なんとなくこんなプログラムを書いてみました

Sub Macro1()
'
' Macro1 Macro
'
For i = 1 To 10
   Cells(i, 1).Value = i
Next
'
    Application.Goto Reference:="Macro1"
End Sub

セルA1からA10まで1から10を表示するプログラムなのですが、はじめfor文を次のように書いてしまったため
『実行時エラー '1004' アプリケーション定義またはオブジェクト定義のエラーです。』と怒られてしまいました。

For i = 0 To 10
   Cells(i, 1).Value = i
Next

C言語の配列操作のためのfor文のように0から指定してしまっています。
そうです。ExcelにはA0というセルはありません。
ないはずのセルに代入をしろと言われ、Excelはエラーを吐いてました。
かなり初歩的なミスですが、新しくプログラミング言語を始めるときには、このようなちょっとした違いを覚えることが大事だと思います。
気づけて良かったです。

VBAを活用する

私が今、大学で書いているプログラムは、複雑で速度を求められるものが多く、VBAで書くという機会はほとんどないのですが、ビジネスと学問における統計の分野では、ExcelのマクロとしてVBA大活躍されているみたいです。
何かの機会があれば、VBA活用してより楽しくExcelやWordを使えたら良いなと思います。