[三流君] −−> [VBAで楽しく] −−> [バックナンバー一覧]
−−> No.005 変数・乱数・定数

変数・乱数・定数

メルマガ発行内容

<変数・乱数・定数>

今回は、 変数・乱数・定数 とXX数で攻めてみたいと思います。 /* * 1.変数ってなんですかぁ? */ 一直線プログラムはプログラムじゃない? なんて声が聞こえてきそうですが、 分岐、ループの前に、今回は、 変数 を軽めに書こうと思います。 Sub test() MsgBox "プログラムは、上から下に流れます" MsgBox "まんなか、、" MsgBox "今日も一日がんばりましょう" MsgBox "こんな感じです" End Sub と前回は上から下へ固定の動きをするプログラムを書いてました。 変数って、言葉で説明すると説明しにくいんだけど (それは、三流君が説明ベタってことだよねぇ(笑)) はじめは、 値を入れる、記憶するハコ(メモリ)に名前を付けて使う って感じで覚えておいてもらえると、ありがたいです。 またまたぁ、どんな感じだっての? Sub test2() Dim a As Integer a = 10 MsgBox a End Sub まず、変数を使用するには、変数宣言をします。 宣言の方法は、 Dim a As Integer dim 変数名 as 変数の型です。 aって名前のInteger型の変数をこれから使うよ(確保します) a = 10 変数aに10を代入します。 MsgBox a メッセージボックス関数で変数aを表示します。 質問、Integer型って何よ?初耳です私。 まぁ、a=10は代入ってのは、なんとなくわかるけど。。。さ。 変数の型ってのは、いっぱいあって主なのだけ書くけど、 整数型 (Integer) 2 バイト -32,768 〜 32,767 長整数型 (Long) 4 バイト -2,147,483,648 〜 2,147,483,647 単精度浮動小数点数型 (Single) 4 バイト 倍精度浮動小数点数型 (Double) 8 バイト 文字列型 (String) (可変長) 10 バイト + 文字列の長さ 0 〜 2GB 日付型 (Date) 8 バイト 西暦 100 年 1 月 1 日〜西暦 9999 年 12 月 31 日 オブジェクト型 (Object) 4 バイト オブジェクトを参照するデータ型 なんてのがあります。 で? でっと言われてもなぁ。 使用するものに合った型を選んでください。とそっけなく言ってみたり。 次のサンプルを見て下さい。 Sub test3() '変数の定義 Dim a As Integer Dim b As Integer Dim c As Integer '代入と計算 a = 5 b = 7 c = a * b MsgBox c '結果表示 End Sub まぁ、余裕ですね? a,b,cの名前を付けた変数を宣言して、 aに5をBに7を代入、 cには、a*bの計算結果が代入されます。 で、結果を表示。 三流君さぁ、オイラ、Excelで表作ったりしてるんだよ、 C3のセルに=a1*b1とかやってるし、 あまりなめたマネしないでくれる? もしかして、*は×で/が÷ですなんて説明するつもり?だったとか? ギク、、、+−*/はご存知でしたか。 そっか、Excelで計算式作ってるから、みなさん、式はOKかなぁ。 変数って言ってるけど、セルの番地みたいなもんと軽く覚えてもらえば、 いいのか。セルも値が入るハコだしねぇ。 Dim a1 As Integer の整数型でa1を宣言する まぁ、イメージの問題なので、わかりやすいほうで。 だと、下記は理解に苦しむ式になるのでは? Sub test4() '変数の定義 Dim a As Integer '初期値の代入 a = 1 '計算式 a = a + 1 a = a + 1 MsgBox a '結果表示 End Sub ポイントは、a = a + 1ですね。 数学だとありえない等式だ、、、なんて言わないで、 =記号は代入だと覚えてください。 先に右辺の計算 a+1を行い、結果をaに代入します。 この感覚を違和感無く使えるようにすぐなるんだけど。 結果は?(自分で試してみてください) 変数には、いろいろな型がある、 =は代入です。 いろいろ引っ張りまわしたけど、今回はこれだけでよかったのかも。 /* * 2.定数って知ってますか? */ a = a + 1 の変数は、チョット置いといて、 定数って、いきなり言われても???だと思います。 有名な定数で、vbCrLfってのかあります。 使い方は、 Sub test1() MsgBox "三流君" & vbCrLf & "丁寧に解説しろ" End Sub なんて感じで使用します。 このテストを実行すると、画面に 三流君 丁寧に解説しろ と改行されて、表示されます。 あっそ、で三流君、このvbCrLfってのは、なに? 別の人から、 キャリッジ リターン chr(13) と ライン フィード chr(10) を組み合わせると、改行されるって聞いたことあるけど、 それとは、ちがうの? えっと、同じなのですが、 書き方として、 Sub test2() MsgBox "三流君" & Chr(13) & Chr(10) & "丁寧に解説しろ" End Sub と書くと、13ってなに?10って?になるので、 定数として、 Chr(13) + Chr(10) を vbCrLfとして扱えるんですよ。 そのほうが、わかりやすいでしょ? Sub test3() MsgBox "三流君" & Chr(9) & "丁寧に解説しろ" End Sub だと、9ってなに?ってことになりませんか? vbTab Chr(9) タブ文字 なんですねぇ。 VBAで使う定数は、 パターン的にvb****と名前がついているので、 出てきたらみてください。 なんか、イマイチしっくりこないなぁ。 あとは、関数のパラメーターとかでよく見かけると思います。 Sub test4() MsgBox StrConv("abCDef", vbWide) End Sub のvbwideってのも定数です。 これらの定数は Visual Basic で定義されているものです。 なので、実際の値の代わりに使用できます。 まだ、よくわかんないけど、慣れてくれば違和感無くvb**って使えるのかなぁ。 /* * 3.乱数って知ってますか? */ 変数、定数、、と来たから、 今回は強引に乱数を行ってみたいと思います。 乱数って、いきなり言われても???だと思います。 小学校の国語の先生は言いました、 漢字には意味があると、 乱れた数なんですね(乱れるのは酒の席だけにしろ?) 三流君がまた、わけわかんないこと言ってるよ、 小学校は担任だろ、中学から国語の先生・数学の先生に分かれるんでしょ。。。 いつもの前置きはこれくらいにして、 業務プログラムなどではめったに使用しないのですが、 ゲームとかでパソコンにサイコロを振らせたい時、 ランダムな数字がほしい時に使用します。 使い方は簡単で、 Sub test() Dim saikoro As Integer Randomize ' 乱数発生ルーチンを初期化します。 saikoro = Int((6 * Rnd) + 1) ' 1 から 6 までの乱数を発生させます。 MsgBox "サイコロの数は、" & saikoro & "です" End Sub って感じです。 実行してみると毎回値が違っていると思います たまに同じ値が連続するけど。 ポイントは、 数値を受け取りたいので、 Dim saikoro As Integer とInt型の変数を宣言します。 次に、Randomizeステートメントで乱数表を初期化します。 ここがメインかなぁ、 saikoro = Int((6 * Rnd) + 1) で 1 から 6 までの乱数を発生させます。 最後に結果を表示させます。 6 * Rnd + 1 で1から6なので、 RPGなどで、12面ダイズの値がほしければ saikoro = Int((12 * Rnd) + 1) として下さい。 丁半博打の場合は、 saikoro = Int((6 * Rnd) + 1) + Int((6 * Rnd) + 1) ってのもありですね。 インチキ恋愛運測定機は Sub test2() Dim abc As Integer Randomize ' 乱数発生ルーチンを初期化します。 abc = Int((100 * Rnd) + 1) ' 1 から 100 までの乱数を発生させます。 MsgBox "今日の恋愛運は、" & abc & "%です" End Sub です、信じるも信じないもあなたの心一つです(謎) /* * 4.Constで定数宣言 */ Constで定数宣言を書いてみたいと思います。 No.003で解説した下記のプログラムだと、 ファイルの場所が、 "D:\vba002\TYPE.xls" とプログラム中に3ヶ所埋まってます。 /vba/backno/vba003.html In message "[VBAで楽しく No.003] - Dir関数でファイルの存在をチェックする", >Private Sub コマンド0_Click() >On Error GoTo Err_コマンド0_Click > > Dim oApp As Object > > '*3ファイルの存在をチェックする > If Dir("D:\vba002\TYPE.xls") = "" Then > MsgBox "D:\vba002\TYPE.xls を 確認して下さい" > Exit Sub '途中で抜ける > End If > > Set oApp = CreateObject("Excel.Application") > oApp.Visible = True > 'Only XL 97 supports UserControl Property > oApp.UserControl = True > > '*1↓頭にCreateObjectで作成した変数を追加しただけ > oApp.Workbooks.Open FileName:="D:\vba002\TYPE.xls" > '^^^^ > > '*2 Range("A1").Value ="XXXX" でデータをセットする > oApp.Range("B4").Value = Me![ID] > oApp.Range("C4").Value = Me![Name] > oApp.Range("B6").Value = Me![Address] > oApp.Range("D7").Value = Me![TEL] > >Exit_コマンド0_Click: > Exit Sub > >Err_コマンド0_Click: > MsgBox Err.Description > Resume Exit_コマンド0_Click > >End Sub フォルダーの変更をした時には、全てのヶ所を修正しないといけません。 そこで、 Constを使用した定数宣言を行います。 Private Sub コマンド0_Click() On Error GoTo Err_コマンド0_Click Const strXLSFILE As String = "D:\vba002\TYPE.xls" '*4^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Dim oApp As Object 'ファイルの存在をチェックする If Dir(strXLSFILE) = "" Then MsgBox strXLSFILE & " を 確認して下さい" Exit Sub '途中で抜ける End If Set oApp = CreateObject("Excel.Application") oApp.Visible = True 'Only XL 97 supports UserControl Property oApp.UserControl = True '*1↓頭にCreateObjectで作成した変数を追加しただけ oApp.Workbooks.Open FileName:=strXLSFILE '^^^^ '*2 Range("A1").Value ="XXXX" でデータをセットする oApp.Range("B4").Value = Me![ID] oApp.Range("C4").Value = Me![Name] oApp.Range("B6").Value = Me![Address] oApp.Range("D7").Value = Me![TEL] Exit_コマンド0_Click: Exit Sub Err_コマンド0_Click: MsgBox Err.Description Resume Exit_コマンド0_Click End Sub 使用方法は、 Const 変数名 as Type = 値 と書きます。 Const strXLSFILE As String = "D:\vba002\TYPE.xls" If Dir(strXLSFILE) = "" Then と使用しているので、環境が変化した時は、 頭の Const strXLSFILE As String = "D:\vba002\TYPE.xls" を Const strXLSFILE As String = "F:\DATA\make\TYPE.xls" など書き直せば動作するので、 メンテナンスがラクです。 固定の値を使用する時は、 Constで宣言してみてください。


ページフッター

ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、

種類別のリンク や 広告など

気になったジャンル↓を選択してください。

人気記事(来場者が多いTOP3):
[VBAでIE,WebBrowserを操作]・・・VBAでIE,WebBrowserを操作する サンプルです
[Access から Excel 連携 CreateObject("Excel.Application")]・・・AccessからExcelを操作したりデータの書き出しなどです
[VBAでOutlookの操作 CreateObject("Outlook.Application" )]・・・VBAからOutlookを使い、メール関係を処理するサンプルです
↑上記3つみたいなCreateObjectで他のアプリケーションを操作するサンプルが人気です。

Excel関係:
[Excel UserFormを操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
[ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
[Excel関係 関数、その他]・・・その他Excel関係です

Access関係:
[Access UserForm/サブフォーム 操作]・・・アクセスでフォームを使ったサンプルです
[Access レポート操作]・・・レポートを操作してみました
[Access クエリーやその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です

その他:VBAの共通関数やテキストファイルの操作など
[VBAでテキストファイル(TextFile)の操作]・・・普通のテキストファイルを使ったサンプルです
[VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます

開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う]

仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力]

※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。
※※読んで、気分を悪くされたらスミマセン。

Blogとリンク:[三流君の作業日記]/ [VBAやASPのサンプルコード]/ 広告-[通販人気商品の足跡]



[三流君(TOP ken3.org へ戻る)] / [VBA系TOPへ] / [VBA系バックナンバー目次へ移動]