エクセルではマクロが利用できます。
マクロはVBAと呼ばれるプログラム言語を使ってより自由度の高いカスタマイズが可能となります。
- マクロを使うには?
- エラー一覧
- 3:Return に対応する GoSub がありません
- 5:プロシージャの呼び出し、または引数が不正
- 6:オーバーフロー
- 7:メモリが不足
- 9: インデックスが有効範囲内にありません
- 11:0で除算
- 13:型が一致しない
- 14:文字列領域が不足
- 16:式が複雑
- 17:要求された操作は実行できません
- 28:スタック領域が不足
- 35:Sub または Function が定義されていません
- 53:ファイルが見つかりません
- 55:ファイルは既に開かれています
- 62:ファイルにこれ以上データがありません
- 91:オブジェクト変数または With ブロック変数が設定されていません
- 94:Nullの使い方が不正
- 424:オブジェクトが必要です
マクロを使うには?
エクセルのマクロとは?
コンピュータやプログラミングでは、プログラムの命令を記録したものなどにマクロという言い方をします。
エクセルならVisual Basicを使って作成したプログラムのことをマクロといいます。
いつもいつも同じ手順で繰り返しているような処理や関数で記述すると大変になる場合、マクロを使って処理できるようにすると事務も効率化できるでしょう。
マクロを使う準備は?
まず「ファイル」メニューから、「オプション」を選びます。
オプションが出たら、左側の項目から「リボンのユーザ設定」を選びます。
右側にある「開発」のチェックボックスをオンにします。
すると、「開発」メニューが表示されます。
リボンから「ビジュアルベーシックエディター」や「マクロ」といった機能をワンクリックで呼び出せるようになります。
マクロが動作するか確認するには?
実際にエクセル2016でマクロを使ってみて、マクロが動作するか確認してみましょう。
ここでは「ハローワールド」という文字をダイアログだけのプログラムを実行します。
まずは開発タブを選びます。タブがない場合にはオプション設定を確認しておきましょう。
次に「Visual Basic」をリボンで選びます。するとビジュアルベーシックエディターが起動します。
「vba project」というものが作られます。これは「マクロ」全般を含みます。「マクロ」ではいろんなファイルを使う場合がありますから、プロジェクトが1つの管理単位となります。ファイルを入れるフォルダーのようなもの考えるとわかりやすいかもしれません。
そのプロジェクトの中には「Sheet1」というファイルがあるので右クリックします。そして「コードの表示」を選びます。
または「Sheet1」をダブルクリックするだけでもOKです。
ここに文字列を入れます。
Sub test()
MsgBox "HelloWorld!"
End Sub
カーソルがまだ文字入力の画面に残った状態で「F5」キーを押します。
するとプログラムが実行されます。
下記のように表示されます。
表示されたら「OK」を押してダイアログを閉じます。
このように
Sub プログラム名()
命令1
命令2....
End Sub
とマクロの命令を書いていくのが基本となります。
VBAが文字化けする?
どうもエクセル自体が文字エンコードにはあまり強くない印象です。
とはいえVBAで文字化けの場合には以下の設定を確認しておきましょう。
「コントロールパネル>地域>場所の設定」を実行します。
「ユニコード対応ではないプログラムの言語」で「システムロケールの変更」を押して日本語に設定をしておきましょう。
マクロが保存されない?
エクセルには「.xlsx」や「.xlsm」といったファイルの保存方式があります。
「.xlsm」はマクロ有効なエクセルで、「.xlsx」だとマクロは保存されません。
間違えて「.xlsx」形式で保存してしまうと、マクロの情報がなくなってしまうことになります。
このブックには 安全ではない可能性?
ネットからダウンロードしたエクセルファイルでマクロが含まれている場合にこのような警告が表示されます。
エクセルのマクロは強力なので、セキュリティにかかわる不具合を生じる可能性がないとはいえません。
官公庁のようなところの提供するエクセルファイルなら、まずは大丈夫かとは思います。
が、身元の不明なところからダウンロードしたファイルを開く場合はかなり注意したほうがよいでしょう。
エラー一覧
3:Return に対応する GoSub がありません
VBAでは、「GoSub」を使って「Sub1:」のようにラベルを定義した場所へ処理を移動させることができます。
GoSubを使った書き方を今一度確認してみましょう。
5:プロシージャの呼び出し、または引数が不正
引数の数や書き方が違う場合のエラー。
関数によっては「引数で0以上を書かないといけない」などの決まりがあります。
文法的に正しいかいまいちど確認してみましょう。
6:オーバーフロー
計算した値が型以上の数値を扱う場合などに発生します。
例えば、VBのIntegerは「-2147483648 ~ 2147483647」です。もっと大きい値を扱うにはLongやDouble型などを利用します。
最初からVariant型として計算するのもいいかもしれません。
場合によっては、仮想メモリを増やす、他に起動しているアプリを閉じる...などのメモリ自体の確保を試すのもよいでしょう。
7:メモリが不足
フォームやモジュールにはの最大サイズが64KBという制限があるため、1つのフォームに集中して書きまくるとよくないかもしれません。
また、配列など大量のデータを扱う場合にも注意が必要です。
9: インデックスが有効範囲内にありません
VisualBasicのプログラム上のエラー。
配列で範囲外へアクセスする場合などに表示されます。
最初に配列数を確認してから参照する....のように記述するとエラーは防げます。
11:0で除算
数学では数は0では割れないのでエラーになります。
計算前に、割る数が0かどうかチェックするとこの手のエラーは防げます。
Sub test()
Dim i As Integer
i = 1 / 0
End Sub
13:型が一致しない
VBでは真か偽化を扱う「Boolean」、文字を扱う「String」、日付を扱う「Date」などいろいろな型があります。
エラーの場合は、型変換するよう意識しないといけません。
14:文字列領域が不足
システムメモリの不足がないか確認。
また想定外に多量の文字データを扱っていないかチェックしてみましょう。
16:式が複雑
浮動小数点式のネストが制限を超える場合に起きるエラー。
17:要求された操作は実行できません
実行中モジュールをプログラムで変更しようとした場合のエラー。
28:スタック領域が不足
スタック領域では関数の実行手順などを記憶します。「再帰呼び出し」が多すぎたりするとスタック領域がオーバーフローしてしまいます。
プログラムが実行される手順について今一度見直してみましょう。
35:Sub または Function が定義されていません
Sub...EndSub Function...EndFunctionは基本的な書き方です。
53:ファイルが見つかりません
参照するためのファイルをあとで削除したり場所を移動してしまうことがあります。
OnErrorでファイルが見つからない場合の処理も記述しておくのをおすすめします。
55:ファイルは既に開かれています
ファイルを開いて、終了後は閉じるよう意識しましょう。
62:ファイルにこれ以上データがありません
ファイルの読み込みでのエラー。
EOF関数やLOF関数でファイルの終わりを確認するようにするとエラーは防げると思います。
91:オブジェクト変数または With ブロック変数が設定されていません
オブジェクト変数にSetで正しくデータを入れましょう。
94:Nullの使い方が不正
Nullを型変換なく代入しようとしてエラーになる場合があります。
Variant型へデータを格納する、など型で問題が起きないよう見直してみましょう。
424:オブジェクトが必要です
オブジェクトにはSetで正しくデータを入れてから利用しましょう。