本文へスキップ
totonoe.tech

プログラミング言語を整える

初級

VBA を整える。

= Excel の手作業を自動化する VBA を、同じお題で読んで学ぶ

VBA が初めての方は、先に そもそも VBA とは・どんな場面で使うか をどうぞ。

VBAとは

Excel などの Office アプリの中で動き、表計算や帳票づくりの手作業を自動化するための言語です。

誕生 1993年(Excel 5.0 に搭載)
作った人・組織 Microsoft
型の付け方 型を宣言しなくても動きます(Variant 型になる)。Option Explicit を書くと変数の宣言を強制できます
動かし方 Excel・Access などの Office アプリの中で動きます(VBE で書いてその場で実行する)
ファイルの拡張子 .bas(標準モジュールを書き出したファイル)。マクロ付きのブックは .xlsm
手元で動かすには Alt+F11 で VBE を開き、標準モジュールに貼り付けて F5 で実行(結果は Ctrl+G のイミディエイトウィンドウ)

日本での使われ方

  • 事務・経理の部門で、Excel の集計・転記・並べ替えといった繰り返し作業の自動化に使われています。
  • 請求書や報告書などの帳票を、Excel のシートから作る用途で使われています。
  • Access と組み合わせて、部署内の小さな業務システム(台帳・在庫・顧客の管理など)を作る例があります。
  • Office が入っている PC ならそのまま書き始められるため、開発環境を別に用意しにくい職場でも使われています。

新人研修での位置づけ

事務職・営業事務の人向けの研修で、Excel の作業を自動化する手段として学ばれています。IT 部門のない会社では、現場の担当者が業務改善のために覚えることもあります。

関わる資格・試験

  • VBAエキスパート Excel VBA ベーシック
  • VBAエキスパート Excel VBA スタンダード
  • VBAエキスパート Access VBA ベーシック
  • VBAエキスパート Access VBA スタンダード

そもそも VBA とは

Excel などの中で動き、毎日の手作業を自動化できる言語。

VBA(Visual Basic for Applications)は、Excel・Access・Word など Microsoft Office の中で動く言語で、1993年の Excel 5.0 に搭載されました。Office が入っているパソコンなら、別のソフトを用意しなくても、Excel の中の VBE(エディター)にコードを書いてすぐ実行できます。

Excel の「マクロの記録」で操作を記録すると、その中身が VBA のコードとして残ります。記録したものを書き換えれば、繰り返しの作業を自分好みに自動化できます。Visual Basic 系の読みやすい書き方をする言語です。

どこで・どんな場面で使うか

  • Excel の集計・転記の自動化

    毎日・毎月くり返す、コピー・並べ替え・合計といった作業を、ボタン1つで行えるようにします。

  • 請求書や報告書の作成

    シートのデータから、決まった形式の帳票を作る用途で使われています。

  • Access の小さな業務システム

    部署内の台帳・在庫・顧客の管理などを、Access と組み合わせて作る例があります。

  • 既存の Excel ファイルの保守

    職場に残っているマクロ付きのブックを、直したり引き継いだりする場面があります。

  • 求人での位置づけ

    事務・経理・営業事務の募集で、Excel VBA が使えることを歓迎条件にしているものがあります。

向いている場面・向いていない場面

  • 向いている:Excel の繰り返し作業を減らしたいとき。手作業の時間を減らし、入力ミスも防げます。
  • 向いている:開発環境を別に用意しにくい職場。Office が入っていれば、すぐに書き始められます。
  • 向いていない:大勢が同時に使う本格的なシステム。Office の中で動く前提なので、そうした用途は別の言語で作るほうが安心です。

下のコード例を、手元の Excel の VBE(Alt+F11)に貼って動かしてみてください。

5つのお題をVBAで書く

C・C++・Java・C#・COBOL・VBA の6ページで、同じ5つのお題を同じ順に並べています。言語を切り替えると、書き方の違いがそのまま比べられます。

このページではコードを実行できません。VBA は Excel などの Office の中でしか動かないため、表示している出力は Excel で実行したものではなく、コードを1行ずつ手で追って確かめたものです。

コード(.bas)

Sub Main()
    Debug.Print "Hello, World!"
End Sub

実行すると

Hello, World!

VBA のプログラムは Sub ~ End Sub の「プロシージャ」単位で書きます。Debug.Print の結果は画面ではなく、VBE のイミディエイトウィンドウ(Ctrl+G)に出ます。

同じお題をほかの言語で: C言語・C++・Java・C#・COBOL

出力当てクイズ

コードを読んで、画面に出るものを選んでください。選ぶと正解と理由が出ます(答えはどこにも送られず、記録もしません)。

問1

Sub Main()
    Debug.Print CStr(7 \ 2) & "," & CStr(7 / 2)
End Sub

画面に出るのは?

問2

Sub Main()
    Debug.Print CStr(17 Mod 5)
End Sub

画面に出るのは?

問3

Sub Main()
    Dim s As String
    s = "10"
    Debug.Print (s & 5) & "/" & CStr(s + 5)
End Sub

画面に出るのは?

問4

Sub Main()
    Debug.Print CStr(Len("日本語"))
End Sub

画面に出るのは?

よくあるエラーと直し方

初めて書く人が出会いやすいエラーです。メッセージは英語のまま出ることが多いので、どの言葉を手がかりにすればよいかもあわせて載せています。

実行時 実行時エラー '9'(インデックスが有効範囲にありません)

エラーになるコード

Sub Main()
    Dim a(2) As Long
    a(3) = 10
End Sub

画面に出るメッセージ(抜粋)

実行時エラー '9': インデックスが有効範囲にありません。

何が起きているか:Dim a(2) は a(0)~a(2) の3つを作る宣言なので、a(3) は存在しません。存在しない名前のシートを Worksheets("…") で指定したときも同じエラーになります。

直し方:添字が LBound(a)~UBound(a) の範囲に入っているか確かめます。要素を増やすなら Dim a(3) のように宣言を広げます。

実行時 実行時エラー '13'(型が一致しません)

エラーになるコード

Sub Main()
    Dim n As Long
    n = "abc"
End Sub

画面に出るメッセージ(抜粋)

実行時エラー '13': 型が一致しません。

何が起きているか:数値型(Long)の変数に、数値として読めない文字列 "abc" を入れようとしています。セルの値を数値の変数に入れるとき、セルに文字が入っていると起きやすいエラーです。

直し方:IsNumeric で数値として読めるか確かめてから代入します。文字列を入れたいなら変数を As String で宣言します。

実行時 実行時エラー '1004'(Excel 側の操作の失敗)

エラーになるコード

Sub Main()
    Range("A0").Value = 1
End Sub

画面に出るメッセージ(抜粋)

実行時エラー '1004':(続くメッセージは原因によって変わります)

何が起きているか:Excel のシートやセルに対する操作が失敗したときに出る番号です。この例は存在しないセル番地 A0 を指定しています(行は 1 から始まります)。メッセージの文言は原因ごとに異なります。

直し方:セル番地・シート名・範囲の指定が正しいか、保護されたシートに書き込んでいないかを確かめます。番号だけでは原因が絞れないので、止まった行を見て判断します。

コンパイル時 コンパイル エラー(変数が定義されていません)

エラーになるコード

Option Explicit

Sub Main()
    total = 1
End Sub

画面に出るメッセージ(抜粋)

コンパイル エラー: 変数が定義されていません。

何が起きているか:Option Explicit があると、Dim で宣言していない変数を使った時点で実行前に止まります。変数名の打ち間違いを見つけるための仕組みです。

直し方:Dim total As Long のように宣言を追加します。打ち間違いなら正しい変数名に直します。

ほかの言語の解説

  • C言語 1972年・静的型付け
  • C++ 1983年(1979年に「C with Classes」として開発が始まりました)・静的型付け
  • Java 1995年・静的型付け
  • C# 2000年(発表)・静的型付け
  • COBOL 1959年・静的型付け(PIC 句で桁数と種類を宣言する)

6言語の並べての比較は プログラミング言語を整える にあります。 書いたコードはどこにも送られません(このページに入力欄はクイズの選択だけで、選んだ答えも記録しません)。

このツールについて

Excel などの Office アプリの中で動き、表計算や帳票づくりの手作業を自動化するための言語です。

Excel VBA の概要と、同じ5つのお題・出力当てクイズ・よくあるエラー(実行時エラー 9・13・1004 など)。

主な機能

  • 概要(誕生・作った人・型・動かし方)と日本での使われ方・研修・資格
  • 5つのお題のコード例(C・C++・Java・C#・COBOL の同じお題へ移れる)
  • 出力当てクイズ4問(\ と / の割り算・& と + の違いなど)
  • よくあるエラー4件(実行時エラーの番号・原因・直し方)
  • 出力は手で追って確かめたもの(Excel での実行ではない)・送信ゼロ

よくある質問

Q. このページの出力は Excel で実行したものですか?

A. いいえ。VBA は Excel などの Office の中でしか動かず、このページを作った環境では実行できなかったため、コードを1行ずつ手で追って確かめた出力です。数字は CStr か & で文字にしてから出しているので、数値の前に空白が付く Debug.Print の癖は出ません。

Q. Debug.Print の出力はどこで見られますか?

A. VBE(Alt + F11 で開く画面)のイミディエイト ウィンドウです。表示されていなければ、VBE のメニューの「表示」から開くか、Ctrl + G で出せます。

Q. VBA の資格はありますか?

A. VBAエキスパートがあり、Excel VBA と Access VBA のそれぞれにベーシックとスタンダードがあります。

入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。

続けて整える

運営サイト

私たちが運営するサイト