マクロでいこう! ~ Excel活用HomePage ~

VBAでラクしたい ~Part 2~

こちらのコーナーでは、VBAの使い方を中心にご紹介していきます。
作者自身の経験から書いておりますので、本とかとは違ったコトを
書いてるトコロもあるかもしれません。 そういう場合は、良さそうな方を信じましょう(^_^;
TOPVBAでラクしたい ~Part 2~ > 定義のコツ

定義のコツ

前回は、ここで使用する変数と定数の定義を考えてみましょうってことで、宿題
みたいな感じにしておきました(^-^
どぉでしたか?考えつきました?

それでは順番に考え方を追っていきましょう。

1.データを入れる行位置
2.データを入れる列位置(3項目分必要)
3.起動時の行位置


まずにどれが定数でどれが変数に当たるかということがポイントになってきます
よね。
"定数"というのは、「プログラムを実行中にまず変化しないであろう値」を定義
しておくためのものであることは、以前にもお話しした通りです。
上の項目の中で、まず変化させないであろうというものは、さてどれでしょう?

まずは「データを入れる列位置」。これは変わりませんよね。
だってワークシートに見出しを3項目書いちゃってますもの。その位置に順番に
追加していくわけですから、途中で違う列に入れたりはしないですよね。
従って"2"は定数。

まだあります。"3"も定数化していいですよね。
例えば、"起動時は必ず1番目のレコードを表示する"っていう仕様を考えるなら
ば、1番目のレコードの行位置っていうのも必ず一定ですよね。もちろん、2行
目からデータを入れていくからってことで、直接プログラム中に"2"とかって書
いてしまうのもいいんですけど、そうしてしまうと例えば見出しの位置を上下に
移動した場合など、その数字にかかわる部分を全部直さなくてはならなくなりま
す。なので、ここでは"3"の項目も定数にしましょう。

そうしますと、残った"1"が変数になるんだろうなーという事をウスウス感づい
てしまうわけですね(^-^;
入力レコードが増減すれば、入力行位置は常に変化しますから、その変化する値
を格納するのは"変数"ということになります。

ふぃーーー(^o^;;; ここまではよろしいですか?

んでわ、次にいきましょう。

どれを定数・変数にするかはわかりました。
次に具体的な定義に移りましょう。

変数や定数を定義する場合には、私の場合決まった略称を使うことにしています。
例えば"行"であれば "Row"、列であれば "Col" など。
これは個人の好みによりますし、漢字を使って書いてももちろんOKなわけです。

ってことで、私の場合

'*** データ列の定義 ***
Const NameDataCol = 1	'氏名
Const MailDataCol = 2   'メールアドレス
Const BirthDataCol = 3  '誕生日

'*** 起動時のレコード行位置 ***
Const InitRow = 2       

'*** レコード行位置 ***
Dim RecRow as Long      

こんな感じになりましたヽ(^-^ )

"データ列の定義"部分は問題ないですよね。
"起動時の~"の定数の Init っていうのは Initialize(イニシャライズ)の略
です。初期状態を示すのに私はよく使います(^-^;

"レコード行位置"の定義の Rec は "レコード"の意味。
なぜ as Long かと言えば、これはExcelのヘルプで「仕様」っていうキーワー
ドで検索してみて下さい。そうすると

"最大ワークシート サイズ	65,536 行 × 256 列"

とかいう記述があるはずです。
65,536行までデータを追加できるとすると、as Integer (整数型)で定義したので
は、32,767行を超えた時点でオーバーフローしてしまいます。
なのでここは as Long(長整数型) で定義しているというわけです。

ここまで出来たところで、ちょっとワンポイント。

前頁でコントロールの名前をつける際に、"プリフィックス"というものを使いま
した。要はコントロールの種別を判断するのに、名前だけで分かるようにする為
でしたよね d(^-^

この手法は変数・定数名をつけるのにも有効なのです。

私の場合、定数を定義する時には先頭に小文字の c を、変数を定義する時には
"データ型"を示すプリフィックスをつけます。変数のプリフィックスは先頭を
大文字で書いてます。例を挙げると

整数型(Integer)    Int
長整数型(Long)     Lng
倍精度少数(Double) Dbl
文字列型(String)   Str
日付型(Date)       Dat
・・・・

従って先程の定義を修正してみますと


'*** データ列の定義 ***
Const cNameDataCol = 1	'氏名
Const cMailDataCol = 2   'メールアドレス
Const cBirthDataCol = 3  '誕生日

'*** 起動時のレコード行位置 ***
Const cInitRow = 2       

'*** レコード行位置 ***
Dim LngRecRow as Long      

というふうになります。

こういうクセを身につけておくのと、おかないのとでは、あとで差がついてくるんで
すよ~。

#次回こそはセルに値を入れますよん(( ((( ヽ(;^^)ノ でわまた!!


TOPVBAでラクしたい ~Part 2~
Copyright (C) 2006 マクロでいこう!. All Rights Reserved.