|
こんばんは。
>For〜Nextのネスティングとはどのようなことを指すのですか?
>自分なりに作りましたが・・・こんなことなのでしょうか?
>
>Sub CheckI()
>Dim i As Integer
>Dim j As Integer
>For j = 6 To 15
> For i = 6 To 15
> If Cells(i, 1) = 10 Then
> Cells(i, 1).Offset(, 2).Value = 100
> End If
> If Cells(j, 1) = 11 Then
> Cells(j, 1).Offset(, 4).Value = 200
> End If
> Next i
>Next j
>End Sub
これね、見かけは確かにFor〜Nextの中にFor〜Nextが
入っているのでFor〜Nextネストに見えますが・・・。
これだと無駄にループさせている事になってしまいます。
上記のコードは、
Sub test2()
Dim i As Integer
For i = 6 To 15
If Cells(i, 1) = 10 Then
Cells(i, 1).Offset(, 2).Value = 100
ElseIf Cells(i, 1) = 11 Then
Cells(i, 1).Offset(, 4).Value = 200
End If
Next i
End Sub
これでも同じ結果が得られますからね!!
>何かサンプルがありましたら教えてください。
例えば、10個のデータから2つ選ぶ組合せのリストを作成することを考えます。
10C2=45通りのリストが作成されますが、
新規ブックの標準モジュールに
'================================================================
Sub 組合せ()
Dim i As Long
Dim j As Long
Dim k As Long
Dim rng As Range
Range("a1:j1").Value = _
Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j")
MsgBox "セルA1〜J1から2つを選ぶ組合せをA2から書き込みます"
k = 2
Set rng = Range("a1:j1")
For i = 1 To rng.Count
For j = i + 1 To rng.Count
Cells(k, 1).Value = rng(i).Value & "," & rng(j).Value
k = k + 1
Next j
Next i
End Sub
これを実行してみてください。
セルA1〜J1にa,b,c,d,・・・jと入っています。
二つを抜き取る組合せのリストがセルA2から書き込まれます。
上記のコードを検討してみてください。
組合せの基本的なアルゴリズムです。
|
|