• ベストアンサー

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

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

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

  • ベストアンサー
  • mk0ttk
  • ベストアンサー率74% (41/55)
回答No.1

定数は固定の値を入れておきたいときに使います。 後から違う値を入れようとしても入りません。 変数は、後から違う値を入れることができます。 例えば税込価格を表示するなら 税込価格は変数、税率1.05は定数として扱います。 そのサンプルだけならどっちでも同じです。 ただ、mojiに、後から"いいい"や"ううう"を入れたいのなら 変数を使うことになります。

VMQBVLWH
質問者

お礼

>税込価格は変数、税率1.05は定数 とてもわかりやすいたとえです。ありがとうございました。

関連するQ&A

  • Const に dim は使えない?

    標準モジュールに ''''''''''''''''''''''''''''''''''''''''''' Dim Const moji As String = "a" Sub test1() MsgBox moji End Sub Sub test2() Dim Const moji As String = "a" MsgBox moji End Sub ''''''''''''''''''''''''''''''''''''''''''' とするとエラーになりますが ''''''''''''''''''''''''''''''''''''''''''' Public Const moji As String = "a" Sub test3() MsgBox moji End Sub ''''''''''''''''''''''''''''''''''''''''''' なら大丈夫です。 Const に対してdimは使えないのでしょうか?

  • vba関数 変数の中に該当の文字がいくつあるか

    vba関数 変数の中に該当の文字がいくつあるかを取得するには? Sub Sample() Dim moji As String moji = "aiuuueou" MsgBox "uは4つです" End Sub こんな感じで、moji という変数の中にuはいくつあるかを取得する方法はありますか?

  • 定数の宣言ってdimは使えないのですか?

    VBAです。 標準モジュールに Option Explicit Public Const フォルダ名 As String = "新しいフォルダー" Sub aaaa() End Sub はできるのですが、 Option Explicit dim Const フォルダ名 As String = "新しいフォルダー" Sub aaaa() End Sub は、エラーになってしまいます。 Option Explicit Sub aaaa() dim Const フォルダ名 As String = "新しいフォルダー" End Sub もダメみたいです。 定数を使うときは、必ずPublicで宣言しなけらばいけないのでしょうか?

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

    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 となった場合でも、 プロシージャーの外にあれば、グローバル変数と言うのでしょうか?

  • ifステートメント 大文字も小文字も区別なく

    Sub test() Dim moji As String moji = "a" If moji = "A" Then MsgBox "Aかaです" End If End Sub これだと、変数が小文字のaだからmsgboxが表示されません。 小文字も大文字も区別なく認識させるにはどうすればいいでしょうか? バイナリモードになってるようです。 Replace関数の場合は、vbTextCompareを付ければ Sub Sample() Dim moji As String moji = "a" Debug.Print Replace(moji, "A", "b", , , vbTextCompare) End Sub このように大文字小文字区別なく置換できますが このような事をifステートメントでやる方法を教えてください。

  • 配列のメリットは?

    下記のコードは同じ動作をします。 Sub 普通() Dim moji1 As String Dim moji2 As String moji1 = Range("a1").Value moji2 = Range("a2").Value MsgBox moji1 & moji2 End Sub --------------------------------------------- Sub 配列() Dim moji(2) As String moji(1) = Range("a1").Value moji(2) = Range("a2").Value MsgBox moji(1) & moji(2) 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) で宣言するから、変わらないのでしょうか?

  • 定数にFullNameは使えないのですか?

    アクセスで、 Sub aaa() Const sPath As String = CurrentProject.FullName MsgBox sPath End Sub をすると、「定数式が必要です。」問われるのですが、上記のように定数に自身のfaiある名を入れたいのですが、無理なのでしょうか?

  • 【VBA】 動的な変数(定数)の指定

    こちらの識者の方々にはいつもお世話になっています。 VBAの質問です。 環境は下記になります。 OS=windowsXP SP3 Office=Excel2003(11.8347.8403) SP3 タイトルが正確にやりたいことを表現できているのかいささか疑問なので補足します。 Sub test1()  Dim oDict As Object  Dim i As String  Const Dest01 As String = "C:\aaa\"  i = "01"  Set oDict = CreateObject("Scripting.Dictionary")  oDict(i) = "Dest" & i  MsgBox oDict(i)  Set oDict = Nothing End Sub 上記のようなコードで、msgboxで ”C:\aaa\”という文字列を返してほしいのですが、"Dest01"の文字列が返ってきます。 上記ではDest01しか指定していませんが、実際のコードではDest80ぐらいまで定数があり、いずれの定数のフォルダも共通性がない状態になっています。 これをFor next文でiをまわして、Dest01から順番に保存していきたい。というのがやりたいことです。 上記のような場合、どのようなコードが適していますでしょうか。 Dictionaryオブジェクトについては、必ず使いたいわけではありません。 質問に不備不足等ございましたらご指摘ください。 ご面倒お掛けしますがよろしくお願いします。

  • 変数の宣言(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をつけなくて良い理由を教えてください。

専門家に質問してみよう