• ベストアンサー

同じ関数名やメソッド名は変数に使わない方が良い?

例えば、Strと言うのは、オブジェクトブラウザで確認すると VBA.Conversion のメンバ にありますが、この場合、 Sub test() Dim Str As String Str = "test" MsgBox Str End Sub のようなコードは作らない方が良いのでしょうか? エラーになったり何か不都合が発生しますか?

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

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

こんにちは。 VBAというのは、本当に予約語としてシステムで禁止している単語が少ないですね。Str は、禁止されていませんから、ご質問者さんのコードでも通りますし、際立ったトラブルもないはずです。 >エラーになったり何か不都合が発生しますか? エラーとして扱えないケースとしては、 例えば、 × Str = Str(200) つまり、変数と関数の併用 他のうまくない事象としては、 Dim str As String とすると、今度は、Str 関数の時に、str となって、小文字になってしまうので、変数なのか、関数なのか、見分けがつかなくなるということです。 同じように、メソッド名も使えないということです。プロパティ名も避けたほうがよいです。 ついでに、細かいことを言うなら、 Sub test()  ↓ Sub Test1()  'Testは、メソッドの中にそういう語を持ったものがあります。 と、パスカル形式にしますね。(別に従わなくてもよいけれど、コードを見ただけで、ある程度の実力は観られてしまいます) 昔は、VB6で、コーディング・ルールとして会社ごとに決められることもあり、プレフィックスの "int", "str", "lng" などを変数の手前につけろ、と言っていた時代はありました。今は、VB6のコーディング・ルールを持ち出されることはないにしろ、VBAプログラマーにとっては、str は、VB.Net では標準的な変数として使われるとなると、なんと言ってよいものか、訳がわからなくなることがあります。 要するに、エラーになるか、ならないかは別としても、他人からみて(半年経てば、自分も他人)が読みやすいコードで書くということが大事だということです。たかが、VBAなのですが、それでも、プロシージャ名、変数、定数の書き方などは、一般的に知られたコーディング・ルールを適用したほうが良いということです。 ちなみに、Str 関数は、昔は、VB6でよく使われていた関数で、符号のスペースを数値の前にとってくれるので桁揃えをしやすく便利なのですが、最近では使われなくなりました。

YLZGTQQOER
質問者

お礼

ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

愚問だとは思うが、予約語を本来の意味以外に使ってはいけない。 この手のコードはネットのサンプルでもみかける。こういう鈍感なヤツにサンプルを書いてもらいたくない、ッタク、、、 例えば、そのコードに、次のコードを追加しても、最早、変数定義の方が強いので、Strは関数としては使えない。 Dim Str2 As String Str2 = Str(100)

YLZGTQQOER
質問者

お礼

ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • gungnir7
  • ベストアンサー率43% (1124/2579)
回答No.1

関数名と変数名を同じにするのは混乱するので普通は使いません。 予約語だとエラーになりますし。 それよりも何を目的に作成したものか分かる方がいいです。 stringもStr_TestCode とか相応しい名前があります。 適当に長いとダブル可能性も小さくなります。 翌日には何を作ったのか忘れることさえあります。 まして人が作成したものをメンテナンスというのは骨が折れます。 だから後々の楽を考えれば少々の面倒には目をつぶります。 何を意図としたものかを後々分かるように注釈を入れる、 グローバルで使うのなら接頭辞にgを付けるなど幾つかの約束事は用意した方がいいです。 会社ならコーディング規約とかありますし、プロジェクト前に決めるのが普通です。

YLZGTQQOER
質問者

お礼

ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • グローバル変数などについて

    Option Explicit Dim str1 As String '・・・(1) Sub テスト() Dim str2 As String '・・・(2) str1 = "テスト1" str2 = "テスト2" MsgBox str1 MsgBox str2 End Sub (1)はグローバル変数と言うとの事ですが (2)は何変数と言うのでしょうか? ローカル変数ですか? また、(1)がdimではなく、 Public str1 As String となった場合でも、 プロシージャーの外にあれば、グローバル変数と言うのでしょうか?

  • Excel 2007 VBAで実行時エラー

    Excel 2007のVBAで、EUCコードの変換を試す下記コードの(6)行に「実行時エラー '424' オブジェクトが必要です」となります。 修正方法を教えて頂きたくよろしくお願い致します。 (1) Sub Test() (2) Dim str As String (3) Dim bytesData(1) As Byte (4) bytesData(0) = &HC0 (5) bytesData(1) = &HA4 (6) str = System.Text.Encoding.GetEncoding(51932).GetString(bytesData) (7) MsgBox str (8) End Sub

  • 変数の宣言(s As String)で良い理由

    vbaについてしつもんです。 標準モジュールで Option Explicit Dim s As String Sub test1() Call test2("qqq") End Sub Sub test2(s As String) MsgBox s End Sub としたのですが、もしかしてDim s As Stringって必要ないのでしょうか? あってもなくても動きます。 (s As String)があるからDim s As Stringは不要なのですか? だとしたら、(s As String)に dim や publicをつけなくて良い理由を教えてください。

  • Replace関数について

    Sub macro1() Dim str As String str = "abc" str = Replace(str, "c", "a") MsgBox str End Sub このマクロを実行した時に、問題なく動くのですが なぜReplaceは関数なのに、 WorksheetFunction.がいらないのでしょうか? しかも Sub macro2() Dim str As String str = "abc" str = WorksheetFunction.Replace(str, "c", "a") MsgBox str End Sub にすると、エラーになります。 macro1のReplaceは、関数ではないのでしょうか? メソッドやステートメントですか?

  • サブフォームに変数を代入し、RecordSourceの値を取得したい

    サブフォームに変数を代入し、RecordSourceの値を取得したいのですがうまくいきません。 Sub test1() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource End Sub ******************************************************************* Sub test2() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource MsgBox Forms(フォーム).Controls(サブフォーム).RecordSource End Sub オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438) ******************************************************************* Sub test3() Dim サブフォーム As String Dim フォーム As String フォーム = "土台" サブフォーム = "フォーム1" MsgBox Forms(サブフォーム).RecordSource End Sub 実行時エラー'2450' マクロの式またはVisual Basic コート゛で参照されている 'フォーム名'フォームが見つかりません。 ******************************************************************* test1~3のうち test1のみはうまくいくのですが 変数を代入したいです。 ヘルフ゜のには Forms![受注]![受注サブフォーム].Formとなってますが これじゃ変数を代入できないですよね。 どうすればサブフォームに変数を代入しつつ、RecordSourceの値を取得できるのでしょうか? よろしくお願いします。

  • 二つの違い・どちらを使った方がいいでしょうか?

    Sub test1() Dim a As String a = MsgBox("aaa") End Sub Sub test2() MsgBox "aaa" End Sub どちらもメッセージを表示させられるのですが コードを書く際はどちらを使った方がいいのでしょうか? 独学のためよくわかりません。 宜しくお願いいたします。

  • 定数と変数、どちらを使った方がいいか?

    vbaの勉強中なので教えてください。 Sub 定数を使った場合() Const moji = "あああ" MsgBox moji End Sub Sub 変数を使った場合() Dim moji As String moji = "あああ" MsgBox moji End Sub 二つのサンプルは答えは一緒なのですが プログラムを作るにおいてどちらを使った方が良いのでしょうか? このサンプルならどっちでもいいのでしょうか?

  • Stringに数字をかける事によってスペースを作る

    Stringに数字をかける事によってスペースを作るのですか? vbaなのですが Dim tmp As String * 10 このような宣言の仕方をたまに見かけますが 使い道がわかりません。 Sub test01() Dim tmp As String * 100 tmp = "aaaaaaaaaa" MsgBox tmp End Sub このようなコードを書いたら、スペース代わりになったのですが 文字列にスペースを付けたい時に使うのでしょうか? だったら Sub test01() Dim tmp As String tmp = "aaaaaaaaaa" MsgBox tmp & " " End Sub でもいいような気がしますが、 もし、スペースを付ける以外に意味があるなら教えてください。

  • 関数の引数

    こんにちわ。 ご存知の方、ご教授してもらえないでしょうか? VB.net2005を使っているのですが 関数の引数に変数をセットして、別関数で 引数に対してデータをセットすることは可能でしょうか? C言語でいうところのポインタを引数に渡し ポインタアドレスに書き込むような処理はVB.netでは 可能なんでしょうか? 下記のような事は試したのですが、うまく出来ませんでした(。。; public sub test1() dim mojiretu as string test2( mojiretu ) msgbox(mojiretu) end sub public sub test2( str as string) str = "文字列" end sub

  • 参照渡しをする時は、渡される側は違う変数を使う?

    参照渡しをする時は、渡される側は違う変数を使うべきなのでしょうか? VBAのお勉強をしているのですが Sub test1() Dim mystr As String mystr = "a" Call test2(mystr) Call test3(mystr) End Sub Sub test2(ByRef mystr As String) MsgBox mystr End Sub Sub test3(ByRef mystr2 As String) MsgBox mystr2 End Sub この場合、test2とtest3ではどちらを使ったほうがいいのでしょうか? test3は、mystr2 というmystrとは違う変数を使っていますが、 test2は、test1のmystrと同じ変数を使っています。 test1と同じ変数を使おうが違う変数を使おうが どちらにしろ (ByRef 変数名 As String) で宣言するから、変わらないのでしょうか?

専門家に質問してみよう