「繰り返し文」の編集履歴(バックアップ)一覧はこちら
「繰り返し文」(2015/04/29 (水) 11:09:25) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
<p>繰り返し</p>
<p>繰り返し</p>
<p> </p>
<h3 class="midasi-3" style="margin-left:5px;font-size:1em;color:rgb(0,0,102);padding:3px 3px 3px 10px;border:1px solid rgb(0,100,0);font-family:'MS PGothic';line-height:normal;background-color:rgb(255,255,204);">
<a name="for_next">For~Next</a> <a href="http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_for_next.html#top">topへ</a></h3>
<ul style="color:rgb(0,0,0);font-family:'MS PGothic';font-size:medium;line-height:normal;"><li style="padding-bottom:5px;padding-top:5px;">
繰り返す回数が決まっている場合、指定回数ステートメントを実行します。
<ol type="A"><li style="padding-bottom:5px;padding-top:5px;">C1からC10までにA1*B1の計算結果を入力する。
<ul><li style="padding-bottom:5px;padding-top:5px;">
<table cellspacing="0" class="tblexl" style="border-collapse:collapse;padding:2px;"><colgroup><col span="1" width="600" /></colgroup><tbody><tr><td class="siro" style="border:1px solid rgb(0,102,0);">Sub rei1()<br />
Dim myCnt As Long<br />
<font color="#FF0000">For myCnt = 1 To 10</font><br />
Cells(myCnt, 3).Value = Cells(myCnt, 1).Value * Cells(myCnt, 2).Value<br />
<font color="#FF0000">Next myCnt</font><br />
End Sub</td>
</tr></tbody></table></li>
<li style="padding-bottom:5px;padding-top:5px;">実行結果<br /><img border="0" height="204" src="http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_02/vba05_01.gif" width="266" alt="vba05_01.gif" /></li>
</ul></li>
<li style="padding-bottom:5px;padding-top:5px;">増減値に「2」を設定して1行置きに計算結果を入力する
<ul><li style="padding-bottom:5px;padding-top:5px;">
<table cellspacing="0" class="tblexl" style="border-collapse:collapse;padding:2px;"><colgroup><col span="1" width="600" /></colgroup><tbody><tr><td class="siro" style="border:1px solid rgb(0,102,0);">Sub rei1()<br />
Dim myCnt As Long<br />
<font color="#FF0000">For myCnt = 1 To 10 <b>Step</b> 2</font><br />
Cells(myCnt, 3).Value = Cells(myCnt, 1).Value * Cells(myCnt, 2).Value<br />
<font color="#FF0000">Next myCnt</font><br />
End Sub</td>
</tr></tbody></table></li>
<li style="padding-bottom:5px;padding-top:5px;">実行結果<br /><img border="0" height="207" src="http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_02/vba05_02.gif" width="265" alt="vba05_02.gif" /></li>
</ul></li>
<li style="padding-bottom:5px;padding-top:5px;">
カウンタ(myCnt)が5になったら、途中でループを抜ける。
<ul><li style="padding-bottom:5px;padding-top:5px;">
<table cellspacing="0" class="tblexl" style="border-collapse:collapse;padding:2px;"><colgroup><col span="1" width="600" /></colgroup><tbody><tr><td class="siro" style="border:1px solid rgb(0,102,0);">Sub rei1()<br />
Dim myCnt As Long<br />
<font color="#FF0000">For myCnt = 1 To 10</font><br />
<font color="#FF0000">If myCnt = 5 Then <b>Exit For</b></font><br />
Cells(myCnt, 3).Value = Cells(myCnt, 1).Value * Cells(myCnt, 2).Value<br />
<font color="#FF0000">Next myCnt</font><br />
End Sub</td>
</tr></tbody></table></li>
<li style="padding-bottom:5px;padding-top:5px;">実行結果<br /><img border="0" height="207" src="http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_02/vba05_03.gif" width="263" alt="vba05_03.gif" /></li>
</ul></li>
<li style="padding-bottom:5px;padding-top:5px;">2重ループの例
<ul><li style="padding-bottom:5px;padding-top:5px;">下図のような九九の表を作成してみます<br /><img border="0" height="245" src="http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_02/vba05_05.gif" width="345" alt="vba05_05.gif" /></li>
<li style="padding-bottom:5px;padding-top:5px;">
入力するセルはB2からになるので、ループの開始値「1」に1を加えて <font color="#FF0000">Cells(i + 1, j +
1)</font> とすることで調整しています。
<table cellspacing="0" class="tblexl" style="border-collapse:collapse;padding:2px;"><colgroup><col span="1" width="600" /></colgroup><tbody><tr><td class="siro" style="border:1px solid rgb(0,102,0);">Sub rei_kuku1()<br />
Dim i As Integer<br />
Dim j As Integer<br /><br />
<font color="#FF0000">For i = 1 To 9</font><br />
<font color="#009900">For j = 1 To 9</font><br />
Cells(i + 1, j + 1).Value = i * j<br />
<font color="#009900">Next j</font><br />
<font color="#FF0000">Next i</font><br />
End Sub</td>
</tr></tbody></table></li>
<li style="padding-bottom:5px;padding-top:5px;">
また、A1を基準にずらして入力すると考えれば、Offsetを利用して <font color="#FF0000">Range("A1").Offset(i,
j).Value = i * j </font>と書くこともできます。
<table cellspacing="0" class="tblexl" style="border-collapse:collapse;padding:2px;"><colgroup><col span="1" width="600" /></colgroup><tbody><tr><td class="siro" style="border:1px solid rgb(0,102,0);">Sub rei_kuku1()<br />
Dim i As Integer<br />
Dim j As Integer<br /><br />
<font color="#FF0000">For i = 1 To 9</font><br />
<font color="#009900">For j = 1 To 9</font><br />
<font color="#FF0000">Range("A1").Offset(i, j).Value = i * j</font><br />
<font color="#009900">Next j</font><br />
<font color="#FF0000">Next i</font><br />
End Sub</td>
</tr></tbody></table></li>
<li style="padding-bottom:5px;padding-top:5px;">下図のようになります。<br /><img border="0" height="250" src="http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_02/vba05_06.gif" width="347" alt="vba05_06.gif" /></li>
</ul></li>
<li style="padding-bottom:5px;padding-top:5px;">2重ループの例2
<ul><li style="padding-bottom:5px;padding-top:5px;">下図のような九九の表を作成してみます<br />
この例では1行目とA列の掛ける数値がランダムに入力されています。<br /><img border="0" height="247" src="http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_02/vba05_07.gif" width="353" alt="vba05_07.gif" /></li>
<li style="padding-bottom:5px;padding-top:5px;">
計算は1行目とA列の値ですので、基準となるA1セルからの位置関係で計算ができます。<br /><font color="#FF0000">Range("A1").Offset(i, j).Value = Range("A1").Offset(i,
0).Value * Range("A1").Offset(0, j).Value</font> としました。
<table cellspacing="0" class="tblexl" style="border-collapse:collapse;padding:2px;"><colgroup><col span="1" width="600" /></colgroup><tbody><tr><td class="siro" style="border:1px solid rgb(0,102,0);">Sub rei_kuku1()<br />
Dim i As Integer<br />
Dim j As Integer<br /><br />
<font color="#FF0000">For i = 1 To 9</font><br />
<font color="#009900">For j = 1 To 9</font><br />
Range("A1").Offset(i, j).Value = _<br />
Range("A1").Offset(i, 0).Value * Range("A1").Offset(0, j).Value<br />
<font color="#009900">Next j</font><br />
<font color="#FF0000">Next i</font><br />
End Sub</td>
</tr></tbody></table></li>
<li style="padding-bottom:5px;padding-top:5px;">下図のようになりました。<br /><img border="0" height="241" src="http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_02/vba05_08.gif" width="346" alt="vba05_08.gif" /></li>
</ul></li>
</ol></li>
</ul><h3 class="midasi-3" style="margin-left:5px;font-size:1em;color:rgb(0,0,102);padding:3px 3px 3px 10px;border:1px solid rgb(0,100,0);font-family:'MS PGothic';line-height:normal;background-color:rgb(255,255,204);">
<a name="each">For Each In~Next</a> <a href="http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_for_next.html#top">topへ</a></h3>
<ul style="color:rgb(0,0,0);font-family:'MS PGothic';font-size:medium;line-height:normal;"><li style="padding-bottom:5px;padding-top:5px;">オブジェクトを繰り返し処理します。
<ol type="A"><li style="padding-bottom:5px;padding-top:5px;">セル範囲を繰り返し処理します。<br />
セル範囲(C1:C10)に(2つ左列のセルの値)*(1つ左列のセルの値)を入力します。
<ul><li style="padding-bottom:5px;padding-top:5px;">
<table cellspacing="0" class="tblexl" style="border-collapse:collapse;padding:2px;"><colgroup><col span="1" width="600" /></colgroup><tbody><tr><td class="siro" style="border:1px solid rgb(0,102,0);">Sub rei1()<br />
Dim myRng As Range<br />
Dim c As Range<br />
Set myRng = Range("C1:C10")<br />
<font color="#FF0000">For Each c In myRng</font><br />
c.Value = c.Offset(0, -2).Value * c.Offset(0, -1).Value<br />
<font color="#FF0000">Next c</font><br />
End Sub</td>
</tr></tbody></table></li>
<li style="padding-bottom:5px;padding-top:5px;">実行結果<br /><img border="0" height="204" src="http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_02/vba05_01.gif" width="266" alt="vba05_01.gif" /></li>
</ul></li>
</ol></li>
</ul><h3 class="midasi-3" style="margin-left:5px;font-size:1em;color:rgb(0,0,102);padding:3px 3px 3px 10px;border:1px solid rgb(0,100,0);font-family:'MS PGothic';line-height:normal;background-color:rgb(255,255,204);">
<a name="do_loop">Do~Loop</a> <a href="http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_for_next.html#top">topへ</a></h3>
<ul style="color:rgb(0,0,0);font-family:'MS PGothic';font-size:medium;line-height:normal;"><li style="padding-bottom:5px;padding-top:5px;">ループ条件を満たしている間は繰り返す。Do
While<br />
ループ条件が満たされるまで繰り返す。Do Until</li>
<li style="padding-bottom:5px;padding-top:5px;">
抜け出す条件が適当でない時、無限ループに入り終了できなくなります。
<ul><li style="padding-bottom:5px;padding-top:5px;"><font color="#009900">[Esc]キーを押すと、コードの実行が中断できます。</font><br />
タイミングが悪く中断できない時は[Esc]キーを押し続けます。
<ul><li style="padding-bottom:5px;padding-top:5px;">
[CTRL]+[Break(Pause)](DOS-V機)または[CTRL]+[STOP](NECの98シリーズ)でも中断できます。</li>
</ul></li>
</ul><ol type="A"><li style="padding-bottom:5px;padding-top:5px;">myCntが5以下の時は繰り返し実行する。
<ul><li style="padding-bottom:5px;padding-top:5px;">
<table cellspacing="0" class="tblexl" style="border-collapse:collapse;padding:2px;"><colgroup><col span="1" width="600" /></colgroup><tbody><tr><td class="siro" style="border:1px solid rgb(0,102,0);">Sub rei1()<br />
Dim myCnt As Long<br />
myCnt = 1<br />
<font color="#FF0000">Do <b>While</b> myCnt <= <b>5</b></font><br />
Cells(myCnt, 3).Value = Cells(myCnt, 1).Value * Cells(myCnt, 2).Value<br />
myCnt = myCnt + 1<br />
<font color="#FF0000">Loop</font><br />
End Sub</td>
</tr></tbody></table><ul><li style="padding-bottom:5px;padding-top:5px;">
実行後に条件判断する時はLOOPの後ろにWhileを書きます<br />
この例では「myCnt < 6」となります。
<table cellspacing="0" class="tblexl" style="border-collapse:collapse;padding:2px;"><colgroup><col span="1" width="600" /></colgroup><tbody><tr><td class="siro" style="border:1px solid rgb(0,102,0);">Sub rei1()<br />
Dim myCnt As Long<br />
myCnt = 1<br />
<font color="#FF0000">Do</font><br />
Cells(myCnt, 3).Value = Cells(myCnt, 1).Value * Cells(myCnt, 2).Value<br />
myCnt = myCnt + 1<br />
<font color="#FF0000">Loop<font color="#FF0000"><b> While</b></font> myCnt
< <b>6</b></font><br />
End Sub</td>
</tr></tbody></table></li>
</ul></li>
<li style="padding-bottom:5px;padding-top:5px;">実行結果<br /><img border="0" height="208" src="http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_02/vba05_04.gif" width="267" alt="vba05_04.gif" /></li>
</ul></li>
<li style="padding-bottom:5px;padding-top:5px;">myCntが5を超えたら繰り返しを抜け出す。
<ul><li style="padding-bottom:5px;padding-top:5px;">
<table cellspacing="0" class="tblexl" style="border-collapse:collapse;padding:2px;"><colgroup><col span="1" width="600" /></colgroup><tbody><tr><td class="siro" style="border:1px solid rgb(0,102,0);">Sub rei1()<br />
Dim myCnt As Long<br />
myCnt = 1<br />
<font color="#FF0000">Do <b>Until</b></font> myCnt > 5<br />
Cells(myCnt, 3).Value = Cells(myCnt, 1).Value * Cells(myCnt, 2).Value<br />
myCnt = myCnt + 1<br />
<font color="#FF0000">Loop</font><br />
End Sub</td>
</tr></tbody></table></li>
<li style="padding-bottom:5px;padding-top:5px;">実行結果<br /><img border="0" height="208" src="http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_02/vba05_04.gif" width="267" alt="vba05_04.gif" /></li>
</ul></li>
<li style="padding-bottom:5px;padding-top:5px;">
IF文で抜け出す条件を書き込む(myCntが5を超えたら繰り返しを抜け出す)
<ul><li style="padding-bottom:5px;padding-top:5px;">
<table cellspacing="0" class="tblexl" style="border-collapse:collapse;padding:2px;"><colgroup><col span="1" width="600" /></colgroup><tbody><tr><td class="siro" style="border:1px solid rgb(0,102,0);">Sub rei1()<br />
Dim myCnt As Long<br />
myCnt = 1<br />
<font color="#FF0000">Do</font><br />
Cells(myCnt, 3).Value = Cells(myCnt, 1).Value * Cells(myCnt, 2).Value<br />
myCnt = myCnt + 1<br />
If myCnt > 5 Then <font color="#FF0000"><b>Exit Do</b></font><br />
<font color="#FF0000">Loop</font><br />
End Sub</td>
</tr></tbody></table></li>
<li style="padding-bottom:5px;padding-top:5px;">実行結果<br /><img border="0" height="208" src="http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_02/vba05_04.gif" width="267" alt="vba05_04.gif" /></li>
</ul></li>
</ol></li>
</ul>