Excel VBA

エクセルでマクロを自作してみた。
気づいた点をメモ。

Sub または Function が定義されていません

まずは簡単なマクロを作り実行してみると、

Sub または Function が定義されていません

というエラーが出て実行できなかった。
自分の作ったマクロが悪いのだと思い、
セキュリティーとかいろいろ調べたが、
結局のところは、CellsをCellと書いていたためだった。
確かにカーソルもその部分を指していた。
単純な綴り間違いだが、初めてだったため
気づくのに時間がかかった。
自分に間違いがあると思いこみ、
解決に時間がかかるというよくあるパターン。

表の値を取得

表から値を取得するのは、

Dim val As Integer

Rem カーソル移動させてカーソル位置の値を取得
Range("B5").Select
val = ActiveCell.Value

Rem 座標で取得
val = Cells(5, 2).Value

Rem A1形式で取得
val = Range("B5").Value

Rem あるセルからのオフセットで取得
val = Range("A2").Offset(3,1).Value

いろいろとやり方があるが、
通常はCellsかOffsetを使うことになるだろう。
.Valueは記述しなくても大丈夫。
↓ここを参考にしました。
http://www2s.biglobe.ne.jp/~iryo/vba/VBA05.html

ラベル

ラベルへのジャンプは、

GoTo Skip
...
Skip:

Integer

Excel VBAのInteger型は16ビットで、
-32768〜32767の範囲しか扱えない。
なので、結構オーバーフローエラーが出る。
大きい整数型はLongを使う。
実数型ならDoubleがよい。

サイズ
Integer 2バイト整数
Long 4バイト整数
Single 4バイト実数
Double 8バイト実数
Currency 8バイト固定小数(整数14桁小数点以下4桁)

↓こちらのページを参考にしました。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_array.html