カテゴリー別アーカイブ: Excel VBA

Excel VBA: 指定した行、列内のテーブルのセルに乱数を格納

excel_vba_random_cells

今回のネタは乱数でサンプルデータを生成したいときなどに使えますかね。

ソースコード

実行結果は上図のように0~100の範囲の乱数(今回は整数)が格納されます。
上記のコードの要の式は

です。簡単に意味を説明しますと括弧内の+1はRndの戻り値の範囲が1未満の為の補正で、式の最後の+lowerはRndの戻りが0の場合の補正、と捉えます。

参考サイト

Excel VBA: Hello Worldと変数、配列の宣言

ポツポツ使う場面が増えてきたので、備忘録代わりにまとめていこうかな(気が向いたときに)。

VBAでHello World

メニューバーからツール→マクロ→Visual Basic Editor(Alt+F11)をクリックするとエディタが起動します。最初は何もファイルが開かれていないと思うので、まず、メニューバーから挿入→標準モジュールをクリックして新規作成し、試しに以下のコードを打ち込んで実行してみます。

入力し終わったらメニューの実行→Sub/ユーザー フォームの実行(F5)をクリックするとスクリプトが実行されます。結果は下図のようになります。
vba_hello_world
ダイアログボックス内に文字列が表示されていますね。仮に下記のようにした場合は、

一つ目の”Hello, VBA”のダイアログのOKを押した後、”Hello, Excel”のダイアログが表示されます。どうやらMsgBox関数はブロック関数みたい。

変数の宣言 – Dim

実行結果は
vba_var01
vba_var02

変数宣言の一般式は

Dim <変数名> As <型>

のようにDim~Asステートメントを用います。

また、MsgBox関数のvbinformationを指定することで情報メッセージアイコンを表示します。ちなみに、出力する複数の文字列の連結は「&」を用います。

定数の宣言 – Const

Const <定数名> As <型> = <値>

変数宣言と似てますね。異なるところは、DimがConstに変わり、宣言と値の初期化を同時に行うことですかね。変数も値の初期化は可能ですが、それは任意です。

オブジェクトの参照を変数に格納 – Set

オブジェクトの参照を代入する際にはSetステートメントを使用します。以下のコードは1つ目のワークシート名を表示しています。

実行結果は
vba_var_set01
一般式は

Set <オブジェクト型変数> = <オブジェクト>

コンパイルエラー、「SubまたはFunctionが定義されていません」の原因

大抵ミスタイプです。Worksheets(1)と打つところをWorksheet(1)としてしまうとか。変数宣言のミスでもデフォルトでは「SubまたはFunctionが~」と出力されるので注意。

配列の宣言

Dim <配列名>(<要素数>) As <型>

ダイアログには99が表示されます。配列の添え字は0から数えますが、下記の文をモジュールの宣言セクションに書くことで1から数えられます。

Option Base 1

実行結果は同じく99です。