プロが教えるわが家の防犯対策術!

for i = 1 to 100 の様に連続ではなく 1,5,8,15,20 などのように
規則性のない場合の手法を探しています
今は if i = 2 then ~ などと一つ一つ書いていく方法しか考えつきません
よろしくお願いいたします

A 回答 (6件)

下記のようにすればいいのでは?


1,5,8,15,20,21,22,23,24,25,50の場合の実行例

For i=1 to 100
Select Cace i
Case 1,5,8,15,20-25,50
処理内容
End Select
Next i

例外の処理がある場合は
For i=1 to 100
Select Cace i
Case 1,5,8,15,20-25,50
処理内容
Case Else
例外処理内容
End Select
Next i
    • good
    • 9
この回答へのお礼

ありがとうございます
まさに 私がやりたかったことです
これで作業がすごく楽になります

お礼日時:2011/12/08 10:37

>for next の不連続版


 ⇒For~Nextは範囲内の繰り返しを行うものとして利用されるので連続・不連続に
  関係ありません。
  実処理の入力条件の判定方法についてはコード作成の前にご要望のポリシーに
  合う方法案を検討してみては如何でしょうか。

 一例です。
  ■案1.不連続値をIf、Case文で判定させる方法
   不連続値がかわれば同等のロジックの追加、コードが煩雑になる

  ■案2.インデックス値を別配列で定義してそれをFor~Nextで判定させる方法
   不連続値が変わってもロジック変更はないが配列テーブルの変更が必要  

  ■案2.新規列に処理対象のフラグを設定する方法
   不連続値が変わってもロジックの変更は不要

  
    • good
    • 0

規則性が無い限り、自動でカウントアップさせる方法は無いでしょう。



先の回答のようにCaseで分岐とるのもいいですし、数字の並びが毎回変化するなど汎用性を持たせたい場合、
カンマ区切りも利用して一旦数字の並びを配列に読み込んでから、配列の最終までをWhileなりのループで実行させればいいのでは?
    • good
    • 0

通常カウンタの増分を指定する場合はStepを使うのですが


For i = 0 To 20 Step 2
MsgBox i
Next i

とすれば0、2,4,6のように2ずつ増えます。

とここまで書いておいて
質問者さんの求めるものとは違うような気がしますね

「規則性のない場合」というのがどのような場面を想定しているのか分かりませんが、
もしかして複数条件で分岐をしているのでしょうか?
ならばSelect Caseは使えませんか?
たとえば、変数「ほにゃらら」が「いぬ、ねこ、その他」で条件を変えたいとして、

Select Case ほにゃらら
Case いぬ
いぬの場合の処理
Case ねこ
ねこの場合の処理
Case Else
  その他の処理
End Select

のようにすればif thenを入れ子にするよりスマートです。
    • good
    • 0

「不規則」に規則があるなら,その規則で1から順に計算すればいいことです。


「デタラメ」を並べたいなら,プログラムの中に生値を列記する(コーディングする)しかありません。


 dim a
 dim i
 a = array(1,5,7,11,4,29)
 for i = 0 to ubound(a)
  msgbox a(i)
 next i
    • good
    • 1

こういうのはだめですか?



for i=1 to max(数値変数)

max(数値変数)をforの前で、意図的な数値を代入してあげれば、任意のループ回数が設定できますよ。

あと、エクセルでやったのが、シートに数値を入れて、forに入る前にセルから任意の数値をピックアップすれば、目的が達成できると思われますがいかがでしょうか。
(これ、BASICでやった、READ~DATAの形式を応用した。)

【例】

max=15

for i=1 to max
・・・
・・・
next i


最近、この手のたぐいはしていないので、記憶が非常に薄いのですが・・・(^^;)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A