Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


39817 / 76732 ←次へ | 前へ→

【42021】Re:For〜Nextのネスティングについて
発言  ichinose  - 06/8/29(火) 21:34 -

引用なし
パスワード
   こんばんは。

>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から書き込まれます。
上記のコードを検討してみてください。
組合せの基本的なアルゴリズムです。
0 hits

【42015】For〜Nextのネスティングについて GPA 06/8/29(火) 20:13 質問
【42016】Re:For〜Nextのネスティングについて かみちゃん 06/8/29(火) 20:14 発言
【42019】Re:For〜Nextのネスティングについて kobasan 06/8/29(火) 21:15 発言
【42021】Re:For〜Nextのネスティングについて ichinose 06/8/29(火) 21:34 発言
【42063】Re:For〜Nextのネスティングについて GPA 06/8/30(水) 20:42 お礼

39817 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free