趣味のエクセルマクロ

ナンバーズ4などの数字選択式宝くじデータ分析用の自作マクロおよびナンバーズ4の各種データリストなどをブログにしています。

マクロ 制御式

・マクロを色んな条件で処理する際に私が良く使う制御式は


  ① Do Until  ~ Loop     繰り返して処理をする(~の条件あり)
   
  ② For  ~  Next        繰り返して処理をする


   ③ If ~ Then  ~ Else  ~      条件で処理する(もし~だったら~等)


   ④ Select  Case ~         条件で処理する


  
   


1.ナンバーズ4パターン表作成関係エクセルマクロ(1)では以下の様に使用してます。
(①~④を色々組み合わせてマクロに使用しています)


       (上部に列を数字で表示してます   Cells(i, j + 17)では j+17の部分)


Sub patapata_4() '当選数字パターン貼付け(引張表作成)


ー略ー


 i = 2
 Do Until Cells(i, 18) = "" ’ Cells(i, 18)のデータが無くなる迄i行で下の処理をする。
  ’(最初の2行18列から  i=i+1で1行づつ増えながら処理)


dai = 0
 For j = 1 To 4 ' 4つの出目の配列変数への入力
   hit(i - 1, j) = Cells(i, j + 17) ’Cells(i,18)、Cells(i,19)、Cells(i,20)、Cells(i,21)
       If hit(i - 1, j) >= 5 Then dai = dai + 1 ’出目の大小(■■□□等)、5以上の集計
      kiguu(j) = Cells(i, j + 21) ’Cells(i,22)、Cells(i,23)、Cells(i,24)、Cells(i,25)
        If kiguu(j) = "偶" Then kiguu(j) = "▲" Else kiguu(j) = "△"
   If j = 4 Then ’4つの出目の奇遇偶数を集計する
 Cells(i, 81) = kiguu(1) + kiguu(2) + kiguu(3) + kiguu(4) ’81列に▲や△を計4つ表示
   End If
 Next j
     Select Case dai '大小の表示
       Case 0: daida = "■■■■" ’4以下4つの時  daiが0の時daida を■■■■に
       Case 1: daida = "■■■□" ’4以下3つの時  daiが1の時daida を■■■□に
       Case 2: daida = "■■□□" ’4以下2つの時
       Case 3: daida = "■□□□" ’4以下1つの時
       Case 4: daida = "□□□□" ’4以下0の時
   End Select
 Cells(i, 79) = daida ’79列に■■□□などを表示する
  i = i + 1 ’ Cells(i, 18) のiの部分が1づつ増えて行く(下の行に向かっていく)
 k = i
 If i = 6000 Then Exit Do ’何かあったらマクロ停止iの値はデータから決定
 Loop ’Do Until ~ Loop 
 witi = 67 ’表示する列のスタート位置----出目0の時は67列目(67+0で)
For i = 1 To k - 2
 For j = 1 To 4 '出目パターン作成(4出目分)
If Cells(i + 1, witi + hit(i, j)) = "" Then ’データが無かったら●を67~76列に表示
    Cells(i + 1, witi + hit(i, j)) = "●"   ’シングルの時●にする。
 ElseIf Cells(i + 1, witi + hit(i, j)) = "●" Then ’データが●だったらをダブル◎表示
    Cells(i + 1, witi + hit(i, j)) = "◎" ’ダブルの時◎にする。
    dbl = dbl + 1 ’ダブルなどの判定計算
  ’ dbl = 1 だったら Db = "2"にし、違うときDb = " d2"する
       If dbl = 1 Then Db = "2" Else Db = " d2" 
     Cells(i + 1, witi + 11) = Db   ’78列にダブルかd2を表示
 ElseIf Cells(i + 1, witi + hit(i, j)) = "◎" Then
    Cells(i + 1, witi + hit(i, j)) = "☆" ’トリプルの時☆にする。
    Cells(i + 1, witi + 11) = 3 ’78列にトリプルを表示
 ElseIf Cells(i + 1, witi + hit(i, j)) = "☆" Then
    Cells(i + 1, witi + hit(i, j)) = "★" ’フォースの時
     Cells(i + 1, witi + 11) = 4 ’78列にフォースを表示
 End If
Next j
    dbl = 0
Next i


ー略ー
End Sub


  上でwiti + hit(i, j) は変数+配列変数とします。


----------------------------------------------------------------------------------------



 If ~ Then  ~ Else  ~
 
 (マクロだけでなく、他のプログラム言語でも共通の式ですね)


 条件により処理を変えるため、もし(if )と言う考えですね。


 if  a=1 Then b=1 Else b=0    (a、 bは変数、この式の場合 End Ifはいらない)


     変数aが1なら変数bを1にする(bに1を入れる)、それ以外はbを0にする。
  Thenの左の a=1はaに1を入れると言うことでは無くてa=1と言うことです。
       Thenの右の b=1は等しいと言うことではないです。


 上の式は 下の様にも書けますね。(最後にEnd If)


 if a=1 Then
       b=1
   Else
       b=0
   End If


 if  a=1 Then b=1 (Elseが無い場合は単純になります。この場合 End Ifはいらない)



  
 ちょっと複雑になると下記の様にします。 ElseIf は増やして行けます。
    最後はEnd Ifで処理の終了となります。


 if a=1 Then
       b=1
   ElseIf a=2 Then
      b=3
   ElseIf a=3 Then
      b=5
   ElseIf a=4 Then
      b=7
 ElseIf a=5 Then
      b=9
 Else
      b=100
   End If




実際にはifの中にifを入れたりして、もっと複雑な処理が出来ます。
複雑な条件で式を作るのは面倒ですが?ここはポイントですね。


条件の中で良く使う式(aは変数 )
a=10        等しい      
a<>10   等しくない 
a<10   10より小さい 
a>10   10より大きい
a>=10  10以上 
a<=10  10以下
a=""           データが無い時
a<>""         データがある時





Select  Case ~


Select Case で始まり End Selectで終わる


 If ~ Then  ~ Else  ~と基本的には同様らしいです。(表示がスッキリします)


 Select Case で書いたマクロは If ~ Then  で表せますね。
 ( Case 0: daida = "■■■■"    ⇒   If dai=0 Then   daida = "■■■■" )



     Select Case dai 'daiの条件をもとに大小daidaの表示をする


       Case 0: daida = "■■■■"  ’ daiが0の時daida を■■■■に
       Case 1: daida = "■■■□"  ’ daiが1の時daida を■■■□に
       Case 2: daida = "■■□□"   ’ daiが2の時daida を■■□□に
       Case 3: daida = "■□□□"   ’ daiが3の時daida を■□□□に
       Case 4: daida = "□□□□"   ’ daiが4の時daida を□□□□に


   End Select


     Case 0: daida = "■■■■" は 下の2行でもOKです。
     (:は左右で独立した動きになるので) 
     Case 0
        daida = "■■■■" 



 Case の使い方は下の様に、もっと.複雑に出来るようですね。



    Select Case ~


    Case Is < 10  '10より小さい時
      処理1
    Case 15 ’15の時
      処理2 
    Case Is > 20 ’20より大きい時
        処理3
    Case Else ’それ以外
   処理4
  End Select


-------------------------------------------------------------------------------------



 For  ~ Next        


・繰り返して処理をさせます。初期値1から終了値4迄+1づつ増やす。


 For n = 1 To 4
  Cells(n,1) = n ’ nが変化しCells(1,1) = 1 ~Cells(4,1) = 4となる
 Next n   


A列の1行目から4行目にそれぞれ1から4の数字を表示させる。
Next n  のnは省略可能です。  
     


・For  ~ Next を強制的に中止させる場合 Exit For    (条件がある時)


Sub forexit()  '条件によりFor  ~ Nextの繰り返しを中止させる


For i = 1 To 200 ’i は1から200まで1ずつ変化する


 ff = Int(99 * Rnd) + 1  '乱数発生させ Intで1から100までの整数にする


  Cells(1, 1) = i ’1から200まで+1ずつ変化する
  Cells(1, 2) = ff ’1から100までのどれかに変化する


 If ff = 77 Then Exit For    'ffが77になったらiが200に成らなくても強制的に中止させる
  
  For t = 1 To 10000: Next t  'タイマー的に使用(iとffの表示スピード調整)


Next i


End Sub



・For i = 0 To 200 Step 2  2ずつ増やす場合  (iは0,2,4----200と変化)
・For i = 200 To 0 Step-2  2ずつ減らす場合  (iは200,198,196----0と変化)



  


Do Until  ~ Loop  
   
 Do Until Cells(i, 18) = "" みたいに使っています。
 Loop に来たなら条件(Cells(i, 18) = "")になるまで最初から処理を繰り返します。


 For  ~ Next でExit Forを組み合わせると同じ働きになります。
 (If Cells(i, 18) = "" Then Exit For  )
 


Do Loop ~ Untilの式もありますね。



    
  If ~ Then  ~ Else  ~ と For  ~ Next を使えば色々な処理が出来ますね。