実務で使える Excel VBA プログラミング作法
「動けばOK」から卒業しよう!生産性が上がるコードの書き方

[表紙]実務で使える Excel VBA プログラミング作法 ~「動けばOK」から卒業しよう!生産性が上がるコードの書き方

紙版発売
電子版発売

A5判/272ページ

定価2,398円(本体2,180円+税10%)

ISBN 978-4-297-10871-7

電子版

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

業務でVBAプログラムを組んでいる人の多くは,部署で一番パソコンやExcelに詳しいからという理由で任されていることも多く,プログラミングの基本的な素養や知識を知らない方も多いでしょう。このため,動けばOKといった,その場しのぎのコードを書いてしまいがちです。そういったコードは,あとから見直したり再利用する際にトラブルを起こしやすく,またどこになにが書いてあるかわかりにくいので,せっかくの生産性や効率性を落としがちです。本書は,そのようなVBAではじめてプログラムを組んだという人たちにプログラミングの基礎を示し,あとから見て読みやすく,変更や再利用に強いVBAプログラムの書き方を身につけるための本です。

こんな方におすすめ

  • 業務や趣味で初めて触ったプログラミング言語がVBAという人,VBA以外プログラミングしたことがない人
  • 独学でVBAプログラミングをやってきたけど,自分の書き方でよいのか自信のない人

本書「はじめに」より

Excelのマクロはあらゆる操作や処理を自動化でき,生産性を劇的にアップできる便利な機能です。VBA(Visual Basic for Applications)をがんばって学び,目的の機能のマクロをプログラミングによって作れるようになったときの喜びは格別なものでしょう。 さて,VBAをある程度使えるようになり,「そろそろ初心者は卒業かな」といった段階になったら,その次のステップとして,“良いコード”を書ける力を身につけることが求められます。 仕事の実務ではたいてい,マクロは一度作成して終わりではなく,あとから機能の追加・変更が必要となります。その際,コードが「動けばOK」といった意識で記述され,ゴチャゴチャしていると,機能の追加・変更のためのコード編集で非常に苦労してしまいます。そこで,「動けばOK」ではなく,あとから機能の追加・変更を素早く確実に行える“良いコード”を書くことが重要になるのです。 本書はそういった“良いコード”を書ける力を身につけるための本です。どのようなコードが“良いコード”であり,どう書けばよいのかを丁寧に解説しています。 そして,本書の大きな特徴がハンズオン型であることです。“良いコード”は書き方を単に本で読んだだけでは身につかないものです。そこで本書では,具体的なサンプルを用いて,読者の皆さんのお手元のPC上にて,“良くないコード”から“良いコード”への書き換えを実施していただきます。 読者の皆さんはそういった書き換えを実際に手を動かして体験することで,解説を読んで得た知識が確実にご自身の血肉となります。ただ読むだけではなく,常に手を動かすスタイルの本のため,飽きることなく,効率よく学んでいけるでしょう。 それでは,「動けばOK」から卒業し,生産性をよりアップするために,“良いコード”の書き方の学習を始めましょう!

本書のサンプル

本書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。

サンプル画像1

サンプル画像2

サンプル画像3

目次

第1章 良いVBAのコードとは

1-1 そのVBAのコード,半年後の自分が理解できますか?

  • 意図どおり動くコード,の次に目指すこと
  • どこでなにをやっているかがわかりやすいか?
  • 半年後の自分は他人

1-2 “良いコード”とはなんだろう?

  • 良いコードであるための2つの条件
  • 最初から良いコードを書くのは難しい
  • [COLUMN]良いコードであるためのほかの条件

1-3 本書の読み進め方

  • サンプルを“良いコード”にしていこう
  • サンプルの機能の紹介
  • サンプルのコード
  • プログラムの中身をザッと把握しよう
  • [COLUMN]「マクロの記録」で生成されたコードも整えよう

第2章 見た目にこだわる

2-1 理解しやすいコードは見た目も美しい

  • 見た目を整える3つの基本的な方法

2-2 コードのまとまりをインデントしよう

  • インデントを行う基準
  • サンプルのインデントを整えよう
  • 忘れずに動作確認しよう
  • インデントの入れすぎに注意!
  • [COLUMN]インデントに関する設定を変更する

2-3 まとまりごとに空行を入れよう

  • 空行ひとつで見やすさアップ
  • サンプルに空行を入れてみよう
  • 転記の処理のまとまりをさらに際立たせる

2-4 1行が長いコードは適度に改行しよう

  • 「 _」でコードの途中で改行
  • サンプルのコードを途中で改行してみよう
  • より見やすく途中で改行するには
  • 1つのコードで何回途中で改行してもいいの?
  • [COLUMN]半角スペースの挿入もVBEに任せればOK!
  • [COLUMN]Valueプロパティは省略しないほうが吉

第3章 適当な名前を付けない

3-1 読みやすいコードは名前もわかりやすい

  • 理解しやすさには名前も大切

3-2 プロシージャは機能がわかる名前を付けよう

  • 機能が一目でわかる名前にしよう
  • キャメル記法とスネーク記法
  • サンプルのSubプロシージャ名を変更しよう
  • マクロを登録しなおす
  • 長いプロシージャ名は省略形にしよう
  • 日本語のプロシージャ名はあり?

3-3 変数や定数は用途がわかる名前を付けよう

  • わかりづらい変数名はNG!
  • どんな名前にするかを考える
  • 複数の単語を並べるときの順番

3-4 変数名を変えてみよう

  • サンプルの変数名を書き換えよう
  • 面倒でもバックアップを心がけよう
  • [COLUMN]「コメントアウト」を活用しよう
  • 一括置換する際は要注意

3-5 変数名の暗黙の了解

  • カウンタ変数は必ず「i」にすべき?
  • 変数名でよく使われる省略形
  • 処理の前後,真偽,を表す変数名
  • 日本語の変数名
  • [COLUMN]フォームのコントロールもわかりやすい名前を

第4章 コメントを入れよう

4-1 たかがコメント,されどコメント

  • コードの中に残しておく“メモ”
  • VBAでのコメントの書き方
  • コメントを残すべきことって何?
  • [COLUMN]コメントを入れる際の注意点

4-2 サンプルにコメントを入れてみよう

  • 宛名転記の処理にコメントを入れる
  • “ハマりそうな罠”への警告をコメントする
  • 処理の意図をコメントで残しておこう
  • 繰り返しと分岐にもコメント
  • 似たようなコードをコメントで区別する
  • 「コードを読んだまま」のコメントはNG
  • 削除してはいけない処理もコメントしておこう
  • プロシージャ全体にもコメントをつける

4-3 ポイントとなる箇所にコメントを入れよう

  • プログラムの大きな構成をコメントで示そう
  • コメントを整えて全体の見通しをよくする
  • [COLUMN]コメントから先に書くVBAプログラミングも有効

第5章 変数は必ず宣言して使おう

5-1 なぜ変数を宣言するのか

  • 変数宣言のキホンをおさらいしよう
  • [COLUMN]プロシージャレベル変数とモジュールレベル変数
  • 変数を宣言すべき2つの理由
  • 宣言していない変数を強制的に使えないようにする
  • [COLUMN]Option Explicitを自動で挿入するには

5-2 本書サンプルで変数を宣言してみよう

  • 2つの変数を宣言するコードを追加
  • わざと誤った変数名で試してみよう

5-3 変数を宣言したことによる補完機能

  • 記述の間違いをもっと早く知るには
  • 入力補完で変数名の記述ミスを減らす

5-4 変数宣言時にデータ型も指定しよう

  • データ型を指定すべき2つの理由
  • データ型を指定しないとどうなる?
  • なるべく毎回指定しておきたいデータ型
  • その他の主なデータ型

5-5 本書サンプルでデータ型を指定してみよう

  • 変数の宣言にデータ型の指定を追加する
  • わざと誤ったデータ型で試してみよう
  • [COLUMN]実行時エラー「型が一致しません」の示すコードが変わった理由

5-6 覚えておきたいオブジェクト変数のデータ型

  • オブジェクトを入れる変数のデータ型
  • [COLUMN]「どんな変数だっけ?」を素早く調べる

第6章 数値や文字列は定数に置き換えよう

6-1 なぜ数値や文字列を直接記述してはいけないのか

  • 「異なる意味の同じ数値」はトラブルの原因
  • 数値を定数化して問題を解決しよう
  • 直接記述された文字列も定数化しよう

6-2 定数定義のキホンをおさらい

  • 名前と値を指定して定義
  • [COLUMN]定数じゃなくて,変数じゃダメなの?

6-3 サンプルで数値を定数化しよう

  • 数値ごとに定数名を考えよう
  • [COLUMN]定数はプロシージャレベル/モジュールレベルも考慮

6-4 定数を定義して数値を置き換えよう

  • 請求書の表の先頭行番号を定数化
  • 残りの数値も定数化しよう
  • 定数定義のコードを整理してもっと見やすくしよう
  • [COLUMN]「列の入れ替え」への対応を体験してみよう

6-5 文字列も定数化して変化に強くしよう

  • 直接記述された文字列の問題と解決方法
  • 文字列ごとに定数名を考えよう

6-6 定数を定義して文字列を置き換えよう

  • まずは定数定義のコードを追加
  • 直接記述された文字列を定数に置き換えよう
  • 「異なる意味の同じ文字列」問題
  • [COLUMN]定数化するタイミング

6-7 知っておきたい定数の知識やノウハウ

  • 複数の列番号の定数化はどうすべき?
  • 基準となる列番号の定数も加える
  • 文字列の定数の値の定義に数値の定数を利用する
  • [COLUMN]列挙型のキホン

第7章 共通するコードはまとめよう

7-1 何度も登場するオブジェクトをまとめよう

  • オブジェクトの記述をまとめる2つの方法
  • オブジェクト変数のキホンをおさらい

7-2 サンプルの重複するオブジェクトを変数にまとめよう

  • オブジェクトをまとめる変数を決めよう
  • サンプルで重複するオブジェクトを変数でまとめよう
  • 階層構造のオブジェクトならもっと効果的

7-3 Withステートメントで重複をまとめる

  • Withステートメントのキホンをおさらい

7-4 共通する処理はくくり出してまとめる

  • サンプルの紹介(sample2.xlsm)

7-5 共通する処理をSubプロシージャにくくり出す

  • Subプロシージャにまとめ,Callで呼び出す
  • サンプルで重複するコードをまとめよう
  • Callなしでもプロシージャは呼び出せるが

7-6 Subプロシージャの引数でちょっとした違いを吸収する

  • Subプロシージャの引数の使い方
  • Subプロシージャの引数を利用してコードをまとめる
  • Subプロシージャの実行に関するルールのおさらい
  • [COLUMN]なぜVariant型にするの?

7-7 戻り値が必要ならFunctionプロシージャの出番

  • Functionプロシージャの使い方
  • サンプルの紹介(sample3.xlsm)
  • サンプルをFunctionプロシージャでまとめる

7-8 長いコードは機能別に小分けにしよう

  • 長いコードは分割して見やすくすべし
  • サンプルの紹介(sample4.xlsm)
  • 機能ごとにSubプロシージャにまとめる
  • 値の受け渡しにモジュールレベル変数も活用

7-9 変数を利用して賢くコードを分割しよう

  • フクザツなコードを変数で分割する
  • サンプルの紹介(sample5.xlsm)
  • 入れ子になったコードを分割して解消する
  • 長くて複雑なコードも分割してスッキリ
  • [COLUMN]CurrentRegionとOffsetとResizeについて

第8章 変化やトラブルにもっと強いコードにする

8-1 表のデータの増減に自動対応可能にしよう

  • 自動対応でもっと良いコードに!
  • 表のデータが増減したら,どう対応する?
  • Endプロパティで表の末尾のセルを取得
  • 表の末尾セルの行番号を数値として取得
  • 表の増減に自動対応できるようサンプルを書き換えよう
  • [COLUMN]表の下端セル,上から取得するか下から取得するか

8-2 表の移動に自動対応可能にしよう

  • 表が移動しても対応できるコードにするには
  • 「名前の定義」機能のキホンを身につけよう
  • セルに定義した名前をVBAで利用する
  • 定義した名前をあとから変更する方法
  • Cellsを使いセルを相対的に指定する
  • 名前を定義したセルを基準に相対的に指定する
  • セルの行を相対的に指定するように書き換えるには
  • 行を相対的に指定するその他の方法

8-3 コードを整理してスッキリさせよう

  • Withステートメントでまとめよう
  • 「名前の定義」で隠れていた重複箇所を整理する

8-4 予期しづらいトラブルの受け皿を用意しておく

  • 予期できるトラブルと予期しづらいトラブル
  • 予期しづらいトラブルの例
  • On Errorステートメントによる“受け皿”
  • サンプルにエラー処理を組み込もう
  • 可能な限り予期してエラー処理を設ける

著者プロフィール

立山秀利(たてやまひでとし)

フリーランスのITライター。1970年生。筑波大学卒業後,株式会社デンソーでカーナビゲーションのソフトウェア開発に携わる。退社後,Webプロデュース業務を経て,フリーライターとして独立。現在はシステムやネットワーク,Microsoft Officeを中心に執筆中。主な著書に『Excel VBAのプログラミングのツボとコツがゼッタイにわかる本』(秀和システム)や『入門者のExcel VBA』(講談社ブルーバックス),『入門者のPython』(同)など。