• ベストアンサー

VBA 変数・定数名の付け方

いつもお世話になっております。 現在VBAを勉強中の初心者です。 変数や定数名について質問させていただきます。 自分でコードを作成した場合、変数名や定数名について、『何にしようか?』と結構な時間迷ってしまします。 決められたルールの中であれば、自由に命名して良いのでしょうが、参考書等を見ると同じような役割の変数・定数には似通った名前がつけられているように見受けられます(まあ当然かもしれませんが・・・) 私も今後の事を考えて、規則?に沿った名称を使って行きたいと考えています。 何か参考となるサイトなどはありますでしょうか? どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

こんにちは。 >自分でコードを作成した場合、変数名や定数名について、『何にしようか?』と結構な時間迷ってしまします。 基本は、「単語で構成された、誰でも分かるような名前をつける」ということですが、VBAでも、まず、いくつか決まったものがありますから、それは、そのまま使えばよいと思います。 カウンター変数は、i,j,k ;一次的に保管する場合は、buf やtmp など、#1の方の引用先で十分だとは思いますが、旧VBで使われていたハンガリアン記法(intFl等)は、現在の.Netではマイクロソフトでは使わないようにと言われています。(理由は後で書きます) Excel等で使われる省略形: Office では、windows -> wn, workbook ->wb, worksheet -> sht ;ws, word -> wd, object- >obj などが使われています。これらは、小文字で使われることが多いです。 これらを称して、「コーディング規則」と言っていますが、プロ用の規則では、なるべく英語表記にするとか、決まったもの以外は、省略形は不可だといいます。しかし、アマチュアの中では、そこまでは気にすることはありません。例えば、ローマ字のzaikoではなく、inventory や stockとは言いますが、英語の得意な方に限ります。ただ、Hanniとか書くには、ちょっと格好が悪いです。 ある一定以上のレベルの人は、同じような変数や書き方になることが多いです。また、書き方も似ていますので、すぐにコードが理解できます。得てして、一定の規則に則った書き方が出来ない人で、実力ある人は見たことがありません。変数の名前付けだけでも、ある程度の実力は分かると言っても過言ではありません。 Microsoft で、VB.Netの規則ですが、このようなものがあります。 http://msdn.microsoft.com/ja-jp/library/aa291593.aspx http://msdn.microsoft.com/ja-jp/library/h63fsef3 あまり良くない例: http://home.att.ne.jp/zeta/gen/excel/c04p15.htm  この著者は、プログラマーとして有名な方で、業界では重鎮なのですが、この規則は古いし、プリフィックスは参考にすべきではありません。また、サフィックス記号-$などは、原則としては使ってはいけません。これら古い書き方は、VBAの将来性をにらむと、それが大きな混乱の元になるからです。 ●VB6以前の命名法を使っていた方への補足(ここは非常に参考になります。) http://dobon.net/vb/dotnet/beginner/namingrules.html ただ、VB系の場合は、プログラミング規則は、会社独自で作ることが多いので、完全にこれだけというものはありません。 これ以外にも、 ・コーディングスタイルに気をつける   大事なことは、読みやすさ(可読性)。   修正しやすいように、修正したら、それが分かるように心がける。私の場合は、改編した場所には、日付を入れます。 ・大文字小文字を使い分ける   Pascal(パスカル)形式(プロシージャ名)   各単語の頭文字を大文字で記述します。   基本的には単語の接続には"-"や"_"は使いません。  例えば、"indxBackColor"や"winMsg"みたいな感じです。 Camel(キャメル)形式(変数)  前述のPascal形式に似ているのですが、最初の単語の最初の文字は小文字にします。 こっちも基本的には単語の接続には"-"や"_"は使いません。(←私自身、痛い失敗したことがあります。) "indxBackColor"や"winMsg" とか書いた時に、indexbackcolor と書いたら、大文字・小文字の変化をしませんから、indxBackColorと書き間違えたことがすぐに分かります。 全部大文字(定数) 定数を表す時は大体、全部大文字にします。(例外は、プレフィックスのg--グローバルの意味などをつける時は、それを小文字にします。) ただ、全部大文字なので、単語をつなぐときは、例えば、"BACK_COLOR"と、"_"を使ってつなぎます。 後は、思いつくまま、このような規則が挙げられます。 ・インデント(段下げ)をする。 ・データ型を表す記号($,#,!)は、用いてはいけません。 ・文字列の結合を表す"&"(アンパサンド)を用い、"+"では繋がない。 ・2 byte文字は、コメント以外には使わない。 ・適当な場所に、コメントを書くべきだが、全部に入れないこと。 ・プロパティは省略をしない。 ・VBAには、予約語の禁止という規則はありませんが、ワークシート関数名やVBA関数名などは、紛らわしいので使わないこと。例:Str (Str関数という古い関数がある) なお、VBAは、大文字・小文字自体は関係がないとは言われますが、実際の場では、大文字・小文字を間違えて、動かないということもありますから、インテリセンスを用いない手入力の部分は、まず気をつけるに越したことはありません。(インテリセンス:入力候補の表示によるオートコンプリート機能、タイプミス補正機能のこと) 最後に、ご自身で、研究してみてください。 私自身は、それだけ書かれたVB.Netの規則本を持っていますが、それを、紹介するよりも、Microsoft の専門書やサイトがありますから、そこを参考にすると良いです。ただし、参考にするのは、msdn側であって、Microsoft.Support 側は、意外にも、アマチュアの方も参加して書いているようですから、あまり参考にはしないほうがよいでしょう。

genta1019boston
質問者

お礼

ありがとうございます。

その他の回答 (2)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

>何か参考となるサイトなどはありますでしょうか? といわれて探してみましたが、特にこれというものがないですね。 確かに、変数名は自由ですので、決まりはないのでしょうね。 ただ >現在VBAを勉強中の初心者です。 ということなので、以下のつもりでは如何でしょうか。 変数の型がわかり易い、意味がわかる。 よく使う変数では 文字型と数値型です。 数値型でも整数型は nを使います。 エクセルですので行番号(列番号)を変数に入れることもあります。 行番号は Longを使いますので注意です。 MyRow(MyCol)などと行(列)であることがわかる名前が良いと思います。 For文では、決まりのように For i=1 to *** For j=1 to *** For k=1 to *** ですね。 文字列は、文字列であることがわかりやすいように Strを頭に付けると良いと思います。 例 StrFileNameとかすると文字でファイルの名前とわかりやすいはずです。 定数は Contを頭に付けるのが定番です。 複雑なVBAを書くときにややこしくなるのがObject型やVarinat型です。 http://www.ken3.org/vba/backno/vba055.html にあるように Set oApp = CreateObject("Outlook.Application") とアプリケーションにcApp Set objMAIL = oApp.CreateItem(0) オブジェクトに Objを頭に付けるのが多いようです。 そのほかに シートは Ws レンジは Rsではじめると覚えても良いでしょう。 これだけでも初心者ではないと思ってもらえます。 それと、むやみに変数への置き換えをしないことも一案です Withと End Withも活用しましょう。 まあ、最初は使えれば良いとか動けば良いととかいうレベルでかまいませんが そのうちに、もっとシンプルにしたいと思うようになります。 次のステップには、ほかの人にもわかりやすい(引継ぎしやすい) となりますが、最初からそのようなことを考えていると進まなくなることが ありますので 最初は、基礎知識の勉強 次に、実践で数をこなす(同じ目的のVBAを何度も作り直す) です。

genta1019boston
質問者

お礼

ありがとうございます。

  • sech1152
  • ベストアンサー率72% (45/62)
回答No.1

こういう名前の付け方の規則のことを、命名規則とかネーミング規約とか言いますね。 http://ja.wikipedia.org/wiki/%E5%91%BD%E5%90%8D%E8%A6%8F%E5%89%87_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0) VBAに限定して、参考になるサイトとしては、 http://officetanaka.net/excel/vba/variable/06.htm http://home.att.ne.jp/zeta/gen/excel/c04p15.htm あたりは、どうでしょう。 こういうのは、実際の開発現場ごとに結構違ったりするので、もし、仕事で勉強しているのであれば、上司・先輩・リーダー等に確認した方がいいと思います。

genta1019boston
質問者

お礼

ありがとうございます。

関連するQ&A

  • VBAでの変数や定数の使い方について

    いつもお世話になっております。 VBAを学習中の初心者ですが。 私の使っている参考書では作成したコードについて、後からのコードの修正時を考えて (1)数値や文字列などを直接記述している箇所を定数に置き換える。 (2)セルのアドレスを直接記述している箇所を基点セルを基準に指定するように変更する。 と記載されております。 (例)   Const BASE_ADRS As String="A1"           ・   Dim baseCell As Range           ・   Set baseCell=Range(BASE_ADES)    このような感じでコードを記載しています。 (1)(2)の方法だと、後から見返した時に、確認する場所が飛ぶため、今の私にとっては可読性が良いとは言えません。 後々の事を考えると、いまからこの方法に慣れておくべきでしょうか?

  • APIの関数名と定数の調べ方を教えてください

    VBAから Windows32APIの学習を始めたばかりの初心者です。作成しようとするプログラムに必要なAPI関数名とその関数を使用するにあたっての設定すべき定数名を調べる方法(辞書などの本やWebは問いません)がありましたら教えてください。よろしくお願いします。

  • 変数名のこだわりについて

    私はC言語始めて10ヶ月ぐらいのものなのですが、 現在ゲームプログラミングを学んでいます。 C言語で用いている変数名や関数名、クラスのオブジェクト名 など、本当に適当につけていたのですが、 最近とてつもなくソースコードが読みにくくて 変数名のつけ方に規則みたいなものを作ろうと思うのですが、 どなたかゲームプログラミングなどのプログラミング をやっている方々、参考までに、どんな風に名前をつけているか を教えてください。 そういうことを記述しているサイトでもかまいません。 よろしくお願いします。

  • VBAでユーザ定義変数名をシートから取得したい

    VBAでユーザ定義型変数を宣言する際、 要素名をシートに記述した名称にすることは可能でしょうか? 【例】 シート「Sheet1」のセルA1とA2に 「SYAIN_NO」と「SYAIN_NM」が入力されています。 ユーザ定義型変数syainの要素名1と要素名2をシートから名称を取得し [取得前] Type syain 要素名1 As Long 要素名2 As String End Type [取得後] Type syain SYAIN_NO As Long SYAIN_NM As String End Type にしたいです。 今後、シートに名称を追加することで変数を拡張したいと考えています。

  • VBA 引数の簡単な命名規則ありますか?

    Excel VBAで 簡単なプロシージャを作る時に引数名で詰まります。 関数化するなら引数は別に名前を付けたい。でも単純すぎてわざわざ別名が 思いつかない…できれば呼びだし元の変数名をそのまま使いたい hoge(text,loop) sub hoge( _text, _loop ) とかできればいいんですが先頭_(アンダーバー)ってダメなんですよね 最後_(アンダーバー)は行継続と紛らわしいし… いまんとこ、 定数UPPER 関数UpperCamelCase 変数loweCamelCase と簡単な程度なんですがなにか短くて気楽な引数の命名規則は無いもんでしょうか?

  • エクセルVBAでの変数のスコープ

    基本的なことなのですが、教えて下さい。 当方、PHPやjavascriptを中心にプログラムしてきたのですが、 今回、エクセル+VBAでプログラムすることになり、VBAを勉強しているところなのですが、ちょっと戸惑っています。 いままでは、グローバル変数をなるべく使わないように、プログラミングをしてきたのですが、 VBAの勉強で、参考にしている本のコードは、全てグローバル変数を使っています。 そもそも、エクセルのシート・セルがグローバル変数のようなもの(?)なので、変数のスコープにこだわってもあまり意味がないのかな?とも思います。 エクセル+VBAである程度の規模のプログラムを作る際、 変数のスコープはどのように使い分けるのが良いのでしょうか? すみませんが、ご教授の程、よろしくお願いします。

  • テーブル名やカラム名の命名にコツとかありますか?

    javaなどのプログラムでは保守容易性などを高めるために変数などの命名に一定の規則をもうけていたりするみたいですが、データベースでもテーブル名やカラム名の命名にコツとかあるのでしょうか? いろいろ調べてみましたが、あまり明確に記述されたものが見つかりません。よろしくお願いします。

  • VBAの変数の型について

    VBAの変数の型について VBA初心者です。 下記のようにして背景に色を付けようと思ったのですが、 文字列型の変数名では、型が違うとエラーが出ます。 ただ、事情により、文字列型でしか色情報を取得できないため、 VBA内部で型の変更をして、上手く処理出来ないかと考えています。 文字列型から色名に対応する型への変更は、出来るのでしょうか? --------------------------------------- .BackgroundPatternColor = 文字列型変数名 --------------------------------------- 現在は、諦めて、下記のようにして対応しています。 --------------------------------------- If (bgColor = "黄") Then .BackgroundPatternColor = wdColorYellow End If --------------------------------------- よろしくお願い致します。

  • 変数について

    お世話になります。 VBAにてプログラムを作成しています。 本コードで得た変数をCALLのサブルーチン先 でもその変数を生かしたいのですが、empty空 になってしまいます。 変数宣言はPublicにしているのですが。 そう言うものなのでしょうか。 お教え頂きたく宜しくお願い申し上げます。

  • VBAでコンピューター名を取得したい

    こんにちは Office2000使ってます ExcelやAccessのVBAで作業しているコンピューター名を 取得し 変数に入れたいのですがどうすればできますか? ご存知の方教えてください VBA初心者です よろしくお願いします

専門家に質問してみよう