Excel VBA質問箱 IV

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

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


6968 / 13646 ツリー ←次へ | 前へ→

【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 お礼[未読]

【42015】For〜Nextのネスティングについて
質問  GPA  - 06/8/29(火) 20:13 -

引用なし
パスワード
   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

【42016】Re:For〜Nextのネスティングについて
発言  かみちゃん  - 06/8/29(火) 20:14 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>For〜Nextのネスティングとはどのようなことを指すのですか?
>自分なりに作りましたが・・・こんなことなのでしょうか?

私は、ご提示のコードのことで合っていると思います。
個人的な意見ですけど。

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

引用なし
パスワード
   ▼GPA さん:
>For〜Nextのネスティングとはどのようなことを指すのですか?
>自分なりに作りましたが・・・こんなことなのでしょうか?
>何かサンプルがありましたら教えてください。
>
皆さん 今晩は。

私は、「疑問はまずヘルプを見る」というのを、この質問箱で勉強させてもらいました。

VBEのヘルプでForを検索してみてください。
以下はその一部です。

For...Next ループはネスト (入れ子) 構造にすることができます。つまり、For...Next ループの内部に別の For...Next ループを入れることができます。ループをネスト (入れ子) させるときは、それぞれの引数 counter に別の変数名を指定してください。正しいステートメントの例を次に示します。

For I = 1 To 10
  For J = 1 To 10
    For K = 1 To 10
      ...
    Next K
  Next J
Next I

メモ Next ステートメントの引数 counter を省略すると、引数 counter が指定されているかのように実行を継続します。Next ステートメントが対応する For ステートメントよりも前にあると、エラーが発生します。

それから、ネストという言葉は、他にも使われます。
たとえば、ワークシート関数について使われることもあります。
  =if(if(******)*****)
のように関数の中に関数を入れることをネストするといいます。(Excelでは、7階層までネスト関数を作ることができる)

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

【42063】Re:For〜Nextのネスティングについて
お礼  GPA  - 06/8/30(水) 20:42 -

引用なし
パスワード
   ▼ichinose さん 皆様

こんばんは。

色々とご指導アドバイスありがとうございました。
おぼろげながらのレベルですが理解できました。

これからもよろしくお願いします。

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