| 
    
     |  | >>Cells(i, 5).Value = colNumber(i) 'コレクションの中からi番目の要素をとりだす。 >
 >これもやってみたのですが、実行時エラー「型が一致しません」に
 >成っちゃいます。どうして?どこかまちがえたかな?
 
 For i = 1 To 20
 Cells(i, 5).Value = colNumber(i)
 Next
 
 となってますか?私の環境では正常に動きますけど・・・
 
 なお、For Each 〜 Nextを使用するとこんな感じです。
 Dim rngDest As Range
 
 Set rngDest = Cells(1, 5)      '出力開始行セット
 For Each vntRndNo In colNumber
 rngDest.Value = vntRndNo
 Set rngDest = rngDest.Offset(1) '出力行インクリメント
 Next vntRndNo
 
 セルへの出力処理を、配列を使ってやればより高速化が望めます。
 Sub test5()
 Dim colNumber As New Collection
 Dim intRndNo As Integer
 Dim intRndArray() As Integer
 
 'エラートラップ
 On Error Resume Next
 Do
 intRndNo = Int(300 * Rnd) + 1
 'コレクション格納
 colNumber.Add intRndNo, "Key" & intRndNo
 Loop Until colNumber.Count = 20
 On Error GoTo 0
 
 '配列数確定
 ReDim intRndArray(1 To 20, 1 To 1)
 
 'コレクションから配列に代入
 For i = 1 To 20
 intRndArray(i, 1) = colNumber(i)
 Next i
 
 'セルに一括出力
 Cells(1, 5).Resize(20, 1).Value = intRndArray
 End Sub
 
 |  |