VBA別館・Python別館
For ~ Nextのお話 - Tak
2018/04/30 (Mon) 06:10:28
連続日にち作成の時に次のようなcodeを書きましたので、その説明を致します。
Private Sub CommandButton2_Click()
Dim i As Integer
For i = 1 To 31
ActiveCell.Value = i: ActiveCell.Offset(0, 1).Select
Next
End Sub
for~nextは次のようなものです。 CommandButtonをクリックすると、勝手にドンドンcodeに従ってエクセルが勝手にやってくれます。
・変数iがまず1になります。
・すると、次の行のActiveCell.Value = iの指示で、セルの値に1が表示されます。この数字が日付の1です。
・同じ行(: ActiveCell.Offset(0, 1).Select)では、セルの列位置を一つ右へ移しなさいという指示です。
・そして次の行のNextの命令で、最初のforへ戻ります。
その後はこのようにして1~31までを繰り返しながら、日付をセルに書き出してくれます。
何と便利な機能でしょうか。 このFor~Nextは、大事な機能ですので、これは覚えて下さい。
Re: For ~ Nextのお話-2 - Tak
2018/04/30 (Mon) 19:47:07
今度は、縦に1-6までの数字を書き出すcodeを作りましょう。
結論を言うと、次のようになります。
----------------------------------------
Private Sub CommandButton3_Click()
'まず1-6までの数字を縦に書き出す。
Dim i As Integer
For i = 1 To 6
ActiveCell.Value = i
ActiveCell.Offset(1, 0).Select
Next
End Sub
----------------------------------------
Offsetの所が今回は(1, 0)となっています。 前回は(0,1)で次の列へカーソルが移動しましたので、そこから類推すれば、次の行へ移動というのが分かりますね。
すると、図のように1-6の数値が表示されます。
メッセージBoxの使い方 - Tak
2018/05/01 (Tue) 09:05:34
変数の値がどう変わっていくか、とかプログラムの進行具合を見るのに便利な機能ですので書いておきます。
以下は前回1-6までシートに書き出すcodeを作ったものです、今回はそれをメッセージボックス(msgboxと書くと勝手にMsgBoxと予約語に変更されます)に表示するcode(一応プログラム)です。
-----------------------------------------------
Private Sub CommandButton4_Click()
'表示boxで表示させる
Dim ran As Integer
For ran = 1 To 6
MsgBox ("発生した数字は " & ran & "です。")
Next
End Sub
----------------------------------------------
・このメッセージボックスをOKすると、次の数字2の表示になります。 これがranの変化を見るために書いたcodeなのです。 そして6まで行って終わります。
・変数はiでもnでも良いのですが、プログラムが大きくなってくると、作者でも何の変数だったか忘れてしましまうので、分かり易い名前にして下さい。ここでは、乱数だからranとしました(次回乱数にします)。
・msgbox ranだけでも良いのですが、第三者が使う場合は考慮し簡単な説明文を付けるようにしました。 文字列は””で囲います。
1~6迄の乱数を発生させる - Tak
2018/05/01 (Tue) 20:34:00
サイコロゲームなどを作るときの定番codeです。
Private Sub CommandButton5_Click()
'1~6の乱数を発生させる
Dim j As Long
For j = 1 To 6
Randomize '乱数系列初期化
Cells(1, j).Value = Int(6 * Rnd + 1)
Next j
End Sub
図はコマンドボックス5をクリックすると、セルA1~A6に発生させた数値が表示されます。
詳細はまたこの次。
Re: For ~ Nextのお話 - Tak
2018/05/02 (Wed) 07:22:51
では前回のサイコロゲーム原案の説明を致します。
・Dim j As Long : 乱数発生用変数jは小数点を使いますので、データ型をLongに設定します。
・Randomize : 複数の乱数発生は毎回初期化してやらないと、同じ乱数が出てきます。 その為の初期化を毎回行いますという宣言です。
・Cells(1, j).Value : 乱数表示のセルは1行目、j列に表示されます(1行目のA列からF列まで)。
・Int(6 * Rnd + 1) :RNDは乱数発生関数(1未満の小数点、0.97450295など)。 それに6を掛けると6未満の乱数となるので、1を足して6.xxxの乱数となる。 最後にInt(VBA関数)で整数化してやると1-6の乱数が出来る。
ここは乱数発生の定型VBA codeですので、ドンドン使ってください。