• ベストアンサー

VB6変数の宣言dim j,k,p,m,n as Integerは良くない?

お世話になります。 VB暦1年です。 汎用の変数宣言でタイトルのように dim j,k,p,m,n as Integer dim ssa,ssb as String など、カンマ区切りで変数宣言を使っていたのですが 最近、知人にasの手前の変数は型どおり宣言されるが その手前の変数はVariant型で宣言されてしまうと指摘されました。 指摘されるまで気にはしていませんでしたが ウォッチで確認すると変数に代入されるまでは 型がVariant/Emptyとなってます。 以後、気をつければいいのですが 過去にコーディングしたプログラムにも多少、使用していて客先に納品してしまっているものもあります。 後々、問題になるのかな?

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

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

おっしゃる通り、カンマで区切る場合は、 Dim j As Integer, k As Integer, p As Integer という風にすべてAsで型を明示しないと、 Variant型になってしまいます。 つまり、 Dim j Dim k Dim p As Integer とわけて書いた場合と同じです。 (VB.NETは、 Dim j, k, p As Integer で全部Integerになるようなので、ややこしいですね) すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというようなバグの原因になりやすいので、型を明示できるような状況で敢えてVariant型を使うべきではないです。 しかし、すでに納品してしまったコードについては、問題はメモリを余計に使ってしまうことくらいではないでしょうか? 他の人が気づかなかったことから考えるに、多分狭いスコープで使っていますよね? 比較対象や代入するべき型を誤るというようなロジックの誤りがない限り、少なくとも動作上の問題は発生しないと思います。ただ、直せる機会があるのであれば、直した方がいいとは思いますが。

jojo_dio
質問者

お礼

スコープはローカル関数範囲内でFor~Nextのカウンタや一時的に代入する文字列変数ぐらいなので致命的な心配はないはず。です。 以後、気をつけます。 ありがとうございました。

その他の回答 (1)

  • knkenkn
  • ベストアンサー率50% (1/2)
回答No.2

#1さんのおっしゃるとおり、特に問題ないとは思います。 ですが画面上から入力された値で加算処理を行った場合、処理結果が文字列結合となってしまう場合があります。 その点だけは注意した方がいいかもしれません。 フォームに、ボタンとテキストボックスを貼り付けて下のソースを実行していただけると、結果が文字列結合になっているのが分かります。 Private Sub Command1_Click() Dim a, b, c As Integer a = Text1.Text b = Text1.Text c = 0 MsgBox a + b + c End Sub <開発環境> WinXP pro sp1 VB6.0 sp5

jojo_dio
質問者

お礼

自由が利くといぅか、あんまり好ましくないですね。 以後、気をつけます。 ありがとうございました。

関連するQ&A

  • VBでの変数宣言は1行に2つできないのですか?

    Visual BASICで変数宣言は1行に2つ以上記述しても実際、動作します。 例 DIM A、B as Integer このように宣言すると、AもBも整数となります。 しかし、このように宣言して、この変数を Call サブプログラム名(B) のように、パラメ-タとして引き渡そうとするとエラーとなってしまうようです。 よくわからないまま、 DIM A as Integer DIM B as Integer と分けて記述したらエラーがきえたようです。 変数宣言は1行に2つ以上まとめて記述してはいけないのでしょうか? VBは Ver 5 です。

  • VB6の変数宣言について

    VB6で変数を宣言するときにいちいち新しいプロシージャのたびに新しく宣言しなおすのがすごく不便です。 Dim A As Integer A = 12345 と毎回宣言すると見た目も悪いですしいろいろと不便です。 どのプロシージャにも A と書けば必ず 12345 を呼び出してくれるようにはできないのでしょうか?

  • VB 変数宣言にて

    OKwaveをご覧の皆様、はじめまして。 当方、新人プログラマーです。 早速ですが、質問がございますので、 ぜひお答えしていただければ幸いです。 Microsoft Visual Basic 6.0にて、 とあるプログラムの解析をしているのですが、 変数宣言部分でわからないことがございます。 Dim ex_str As String * 256 とは、どういう意味でしょうか? 技術者の皆様にとっては容易過ぎる質問かもしれませんが、 宜しくお願い致します。

  • Variant型で宣言してるのにEmptyになる

    エクセルVBA2003について質問です。 Sub aaa1() Dim a As Variant Debug.Print TypeName(a) End Sub を実行してイミディエイトウインドウで確認すると Emptyが返ってきます。 Variantが返ってこない理由は何でしょうか? また、変数の方の宣言をしない場合は Variant型になるはずなのに Sub aaa2() Dim a Debug.Print TypeName(a) End Sub を実行すると、同じくEmptyが返ってきます。 Variantが返らない理由を教えてください。よろしくお願いします。

  • 配列を初期化する時ってどうすればいいですか?

    Dim test() As String や Dim test As Variant で、宣言した配列を初期化する時ってどうすればいいですか? test="" test=Null test= Empty test= = Nothing は、エラーになります。

  • ExcelVBAで配列に一気にデータを入れる

    かすかな記憶で申し訳ありませんが、変数をVariant型で宣言しておくと、","で区切られた文字列は、一気に配列として代入出来ると聞いた気がしています。色々と試してみたのですが、よくわかりません。よろしくお願いいたします。 Dim a as Variant dim myText as string myText = "月曜,火曜,水曜,木曜,金曜,土曜,日曜" のような感じで(実際のカンマで区切られた文字列は100個ぐらい要素があります)一気に代入して、aを配列として扱いたいのです。 よろしくお願いいたします。

  • vbaで配列に値を格納する場合

    vbaで配列に値を格納する場合 変数の宣言はどちらを使った方が良いのでしょうか? Sub Sample1() Dim i As Long Dim myStr As String Dim tmp() As String myStr = "a,i,u,e,o" tmp = Split(myStr, ",") End Sub か Sub Sample1() Dim i As Long Dim myStr As String Dim tmp As Variant myStr = "a,i,u,e,o" tmp = Split(myStr, ",") End Sub でも問題なく動くのですが、 Variant型での宣言はあまりしない方が良いですか? あと Dim tmp() As String ならエラーにならないのですが Dim tmp As String だとエラーになってしまう理由がよくわからないので教えて頂けますか?

  • 小数点第2位の数値の計算

    下記のような処理があるとします。 Dim 変数1 As 宣言 Dim 変数2 As 宣言 Dim 変数3 As 宣言 Dim 変数4 As 宣言 変数1 = 0 変数2 = 0 変数3 = 0 変数4 = 0 変数1 = テキストボックス1.Text 変数2 = ラベル2.Caption 変数3 = ラベル3.Caption 変数4 = (変数2 + 変数3) - 変数1 ラベル4.Caption = 変数4 変数1~3には、小数点第2位までの 数値が入る事があるのですが、 例) 変数1 = 3.0 変数2 = 4.75 変数3 = 7.75 の場合、変数4 = 0 と計算される。 その場合、変数4の計算結果が 正しく出力されません。 宣言はDoubleを使うと計算結果は 16進数表示になり、Singleを使うと0になります。 正しい計算結果を出すには どのようにすれば良いでしょうか?

  • [VBA] 型宣言の順番について

    こちらの識者の方々にはいつもお世話になっています。 VBAの質問です。 環境は下記になります。 OS=windows7 pro 64bit Office=Excel2010(14.0.7128.5000) 私はVBAのレベルとしては初級で、具体的には配列内で処理をしたり、連想配列のコードが書けるぐらいで、クラスモジュールはわかりません、ぐらいの感じです。(分かりづらくてすみません) 私はいつも宣言の文を書くときに、プロシージャの一番上に全て書き、順番もだいたい大きい(と感じる)型のものから書いています。 例: Sub test()  Dim FSO As Object  Dim oDic As Object  Dim wbSour As Workbook, wbDest As Workbook  Dim wsSour As Worksheet, wsDest As Worksheet  Dim r as Range  Dim tmp As Variant  Dim destDir As String  Dim i As Long, j As Long, k As Long  ~  ~  ~  ~  ~  ~ End Sub みたいな感じです。 いつもこれでいいのかなぁ?と思いながら宣言文を書いてるんですが、ネットに転がっている他のソースコードを見ると、変数を使う直前で都度宣言しているものもあったりするので、正しい(とされている)宣言のしかたってあるのでしょうか? そんなの人と場合によるって感じだと思うのですが、こういう理由で自分はこう宣言している、とか、これからのことを考えるとこうしたほうがいい、みたいなのがあれば教えてください。 質問に不備不足等ございましたらご指摘ください。 ご面倒お掛けしますがよろしくお願いします。

  • VBA モジュールで共通に使う変数の宣言方法

    VBAにてプログラミングを覚えている者です。 現在、いくつかのモジュールがあり、それぞれDimにて宣言している共通の変数があります。 いくつものプロシージャに毎回宣言せず、どこかでひとまとめにしたいと思い、色々と調べています。 例えば、 Dim pic1 As Picture Dim cell1 As String Dim pass1 As String Dim pic2 As Picture などです。 Dimのほかに、Publicの宣言などがありますが、いま一つ使い方がピンときません。 共通宣言する変数をひとつのモジュールとして登録し、活用できると、いざ変更となったときに その内容だけ置き換えればいいと思うのですが、みなさんはどのように宣言をしていますか? (例えば、Stringなどは各モジュールで変更するのが大変だと思うのですが・・・) ヒントを教えていただければと思います。よろしくお願いします。