Excel VBA質問箱 IV

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

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


9878 / 13644 ツリー ←次へ | 前へ→

【24977】どこがまずいのでしょうか hinerikomi 05/5/16(月) 15:44 質問[未読]
【24979】Re:どこがまずいのでしょうか Kein 05/5/16(月) 16:02 回答[未読]
【24985】>Re:どこがまずいのでしょうか hinerikomi 05/5/16(月) 16:42 お礼[未読]
【24980】Re:どこがまずいのでしょうか 小僧 05/5/16(月) 16:03 回答[未読]
【24986】>Re:どこがまずいのでしょうか hinerikomi 05/5/16(月) 16:45 お礼[未読]
【24982】Re:どこがまずいのでしょうか Jaka 05/5/16(月) 16:08 発言[未読]
【24984】>Re:どこがまずいのでしょうか hinerikomi 05/5/16(月) 16:38 お礼[未読]

【24977】どこがまずいのでしょうか
質問  hinerikomi  - 05/5/16(月) 15:44 -

引用なし
パスワード
   Range("A1":"C4")のエリアに、4列目で改行するようにして
各セルに1〜10の数字を出力させようとしています。
すなわち
Range("A1") = 1
Range("A2") = 2
Range("A3") = 3
改行して
Range("A2") = 4
……………………
……………………
Range("A4") = 10
という具合です。
そこで、次のようなコードを作ってみました。

PrivateSub CommandButton1_Click()
Dim N,i,myCC AS Integer
For i = 1 To 4
For N = 1 To 10
Range(Cells(i,1),Cells(i,N)).Select
myCC = Selection.Count
If myCC > 3 Then
i = i +1
N = N -3
End If
Cells(i,N) = N
Next N
Next i
End Sub

が、これを実行すると、最後の行、すなわち65536行まで
延々と続いてしまいます。
どこがどのようにまずいのでしょうか。

【24979】Re:どこがまずいのでしょうか
回答  Kein  - 05/5/16(月) 16:02 -

引用なし
パスワード
   >Range("A1":"C4")のエリアに、4列目で改行するようにして
>各セルに1〜10の数字を出力
ならば

Sub Test()
  Dim i As Long
  Dim C As Range

  For Each C In Range("A1:C4")
   i = i + 1
   C.Value = i
  Next
End Sub

で、良いのでは ?

【24980】Re:どこがまずいのでしょうか
回答  小僧  - 05/5/16(月) 16:03 -

引用なし
パスワード
   ▼hinerikomi さん:
こんんちは。

>For N = 1 To 10
>  Range(Cells(i,1),Cells(i,N)).Select
>   myCC = Selection.Count
>   If myCC > 3 Then
>     i = i +1
>     N = N -3
    '↑ここ
>   End If
> Cells(i,N) = N
>Next N

「N」の値を変えてしまっているために、
For 〜 Next のループが抜け出せなくなってしまってます。

そのほか気づいた点を…

>Dim N,i,myCC AS Integer

この表記ですと myCCは Integer型ですが、 N 、i については
型宣言をしていない為 Variant型として扱われてしまいます。

私が作成するとしたら下のようなコードになります。

Private Sub CommandButton1_Click()
Dim I As Long
Dim J As Long
  For I = 1 To 10
    For J = 1 To 3
      Cells(I, J).Value = (I - 1) * 3 + J
    Next
  Next
End Sub

【24982】Re:どこがまずいのでしょうか
発言  Jaka  - 05/5/16(月) 16:08 -

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

▼hinerikomi さん:
>Range("A1":"C4")のエリアに、4列目で改行するようにして
>各セルに1〜10の数字を出力させようとしています。
>すなわち
>Range("A1") = 1
>Range("A2") = 2
>Range("A3") = 3
>改行して
>Range("A2") = 4
>……………………
>……………………
>Range("A4") = 10
>という具合です。

すみません。
上の意味がわかりません。
Range("A2") = 2
Range("A2") = 4 改行せずに同じ所に書き込んでますが

こう言う事なんでしょうか?
Dim Cel As Range
For Each Cel In Range("A1:C4")
  ct = ct + 1
  Cel.Value = ct
Next

同じですが、
For i = 1 To 4
  For ii = 1 To 3
    CT = CT + 1
    Cells(i, ii).Value = CT
  Next
Next

【24984】>Re:どこがまずいのでしょうか
お礼  hinerikomi  - 05/5/16(月) 16:38 -

引用なし
パスワード
   Jaka さん、こんにちは。

>▼hinerikomi さん:
>>Range("A1":"C4")のエリアに、4列目で改行するようにして
>>各セルに1〜10の数字を出力させようとしています。
>>すなわち
>>Range("A1") = 1
>>Range("A2") = 2
>>Range("A3") = 3
>>改行して
>>Range("A2") = 4
>>……………………
>>……………………
>>Range("A4") = 10
>>という具合です。
>
>すみません。
>上の意味がわかりません。
>Range("A2") = 2
>Range("A2") = 4 改行せずに同じ所に書き込んでますが

非常に申し訳ありません。
Range("A1") = 1
>>Range("B1") = 2
>>Range("C1") = 3
>>改行して
>>Range("A2") = 4
>>……………………
>>……………………
>>Range("A4") = 10
>>という具合です。
が正しい記述です。

>こう言う事なんでしょうか?
>Dim Cel As Range
>For Each Cel In Range("A1:C4")
>  ct = ct + 1
>  Cel.Value = ct
>Next
>
>同じですが、
>For i = 1 To 4
>  For ii = 1 To 3
>    CT = CT + 1
>    Cells(i, ii).Value = CT
>  Next
>Next

ありがとうございます。
そのとおりです。

【24985】>Re:どこがまずいのでしょうか
お礼  hinerikomi  - 05/5/16(月) 16:42 -

引用なし
パスワード
   Kein さん、こんにちは。
私の記述に誤りがありました。申し訳ございません。

>>Range("A1":"C4")のエリアに、4列目で改行するようにして
>>各セルに1〜10の数字を出力
>ならば
>
>Sub Test()
>  Dim i As Long
>  Dim C As Range
>
>  For Each C In Range("A1:C4")
>   i = i + 1
>   C.Value = i
>  Next
>End Sub
>
>で、良いのでは ?

そのとおりです。
回等をありがとうございます。

【24986】>Re:どこがまずいのでしょうか
お礼  hinerikomi  - 05/5/16(月) 16:45 -

引用なし
パスワード
   小僧 さん、こんにちは。
私の記述に誤りがありました。申し訳ございません。

>>For N = 1 To 10
>>  Range(Cells(i,1),Cells(i,N)).Select
>>   myCC = Selection.Count
>>   If myCC > 3 Then
>>     i = i +1
>>     N = N -3
>    '↑ここ
>>   End If
>> Cells(i,N) = N
>>Next N
>
>「N」の値を変えてしまっているために、
>For 〜 Next のループが抜け出せなくなってしまってます。
>
>そのほか気づいた点を…
>
>>Dim N,i,myCC AS Integer
>
>この表記ですと myCCは Integer型ですが、 N 、i については
>型宣言をしていない為 Variant型として扱われてしまいます。
>
>私が作成するとしたら下のようなコードになります。
>
>Private Sub CommandButton1_Click()
>Dim I As Long
>Dim J As Long
>  For I = 1 To 10
>    For J = 1 To 3
>      Cells(I, J).Value = (I - 1) * 3 + J
>    Next
>  Next
>End Sub

回答に感謝いたします。

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