2016-06-18 4 views
0

次のコードは、次のような奇妙な動作を示しています:012)。ステップを0に設定すると、セルからセルに移動するだけで、メッセージボックスは1になります〜8(i = 1〜8の場合、ステップ0)。 2.)ステップを1に設定すると、シーケンス1,3,5,7(i = 1〜8の場合はステップ1)が得られます。ステップ1は、メッセージボックスの返品に対して1、2、3、4、5、6、7、8を生成するはずです。Excelでの奇妙なfor-nextループスキップステップの動作

Private Sub CommandButton1_Click() 
Dim i As Integer 
For i = 1 To 8 Step 1 
MsgBox i 
    ActiveCell.Offset(1, 0).Range("A1").Select 
    i = i + 1 
Next i 
End Sub 

これの数学コースの理にかなっているが、これは(指定されていないステップ増分)と同じ結果が得られますので、メカニックルーピング標準のExcelによるが、奇妙なようだ:

Private Sub CommandButton1_Click() 
Dim i As Integer 
For i = 1 To 8 
MsgBox i 
    ActiveCell.Offset(1, 0).Range("A1").Select 
    i = i + 1 
Next i 
End Sub 

ですポイントは1、3、5、7です。ポイントは、forステートメントに "Step 0"を追加することが単一のインクリメントを与えることを知っていることですが、これはStepインクリメントを一緒に離れるための回避策のように感じますか?私は2013年のエクセルプロプラスが破損しているかどうか疑問に思います。これが正常かどうかについて私に手がかりを与えてください。 TIA。

+3

通常、ループ内のループカウンタの値を変更しないでください。ここでは 'i = i + 1'は必要ありません。ループがどのように動作するかではありません。 –

+0

うわー、私は恥ずかしいです、これは私のコードのほとんどがどんなに厄介なものであるかを考慮して、私の部分では非常にアマチュアな動きでした。私は本当にあなたの助けに感謝します。最近私は最近コーヒーを飲み過ぎているかもしれない。親切にありがとう。しかし、ポスは、ハチの力が合っていると思われる場合には、立つかもしれません。クリス – StumpedObject

答えて

1

しかし、あなたはコードでこの行があります。

i = i + 1 

それはあまりにもあなたのループ変数だから、それはダブルジャンプになります!

だから、変数をインクリメントするには、ループでi = i + 1を実行する必要はありません。あなたがしなければならない場合は、ループしていた。しかし、ループに干渉しているので、Forループでは決してありません。

-1

フォーク何と言えますか?あなたは、私が含まれていませんでしたコードのブロックを見ればまあもう少し実際、:

Private Sub CommandButton1_Click() 
Dim i As Integer 
For i = 1 To 8 Step 0 
MsgBox i 
    ActiveCell.Offset(1, 0).Range("A1").Select 
i = i + 1 

Next i 
End Sub 

あなたは「ステップ0」の値を鑑賞することができるかもしれない、これはユーザーの合計コントロールを超えることができますi = i + 1を介した増分ステップ、またはより一般的には関数f()、i = f(i)の増分ステップ。したがって、「For i = ...」レベルでインクリメントしても、実際にはどのような種類のジャムが自分自身にあるのかによっては、いくらかのユーティリティがあるかもしれません。要約すると、Stepモディファイアを省略するとデフォルトすなわち、Step = 1.b。)ステップ修飾子をゼロにすると、ステップ= 0は、ループ内に配置されたi = f(i)を介して明示的にインクリメントする「do while」アプローチを必要とする。最後に、これをテストするつもりはありませんが、Step = 0で増分を増やしても状況に応じて無限ループやエラーが発生する可能性があります(そうでないとStep = 0を避けることをお勧めします)。あなたのf(i)とループブロック内の配置について確かめてください!)。

+1

あなたは基本的な間違いをしすぎています。実際の理由がない限り、答えはForループ内で増加しません。あなたには一つも示されていません。 –

+1

合意すると、i = f(i)= i + 1はfor-nextループ構造に組み込まれているため、Lazloはループカウントが短絡して事前に割り当てられた役割を果たすと述べています。しかし、ステップ= 0はオプションですが、あなたが与えられた状況で非常に不公平であると述べているので(吹き飛ばされた<アマチュア<ルーキー<プロ:)) – StumpedObject