| 
    
     |  | こんにちは。 コピペについては、うまくいきました。ありがとうございました。
 漢字にする部分と送りがなのある部分ときちんと分けて表示することができました。
 疑問の残るところはありますが……
 
 ついでにといっては何ですが、乱数(重複なし)のことです。
 ネット上で見つけた下記のコードですがどうも怪しいです。時々同じ数字がでるような気がするのです。
 
 Sub rannsuu()
 Dim i As Integer
 Dim n As Integer
 Dim stri(1 To 20) As String
 Dim p As Integer
 Dim t As Integer
 Dim numtmp As String
 
 For p = 1 To 20
 t = 99
 i = Int(Rnd * t) + 1
 If i < 10 Then
 stri(p) = "0" & i
 Else
 stri(p) = i
 End If
 numtmp = stri(p)
 
 Do While InStr(1, numtmp, stri(p)) > 0   'numtmpにstriが含まれてる間シャッフルを繰り返す
 i = Int(Rnd * t) + 1
 If i < 10 Then
 stri(p) = "0" & i 'この処理を行わないと完全にシャッフルにならないっぽい
 Else
 stri(p) = i
 End If
 Loop
 Next
 End Sub
 
 
 過去ログに(コレクションを使った方法)もあったのですが、
 
 http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=15434;id=excel
 
 コレクションを理解していないためによくわかりませんでした。
 
 そこで、セルを使った方法を考えました。
 
 Sub 乱数2()
 Dim rndNO As Integer
 Dim myRange As Range
 Dim hani AS Range
 Dim p As Integer
 Dim t As Integer
 
 For p = 1 To 20
 t = 30
 Set myRange = Sheet4.Cells(p, 1)
 Set hani = myRange.CurrentRegion
 
 Randomize
 rndNO = Int(Rnd() * t) + 1  '1からtまでの乱数の発生
 
 Do Until WorksheetFunction.CountIf(hani, rndNO) < 2 '同じ数字が出たら、                                 違うまでループ
 rndNO(p) = Int(Rnd() * t) + 1
 myRange = rndNO
 
 Loop
 Next
 
 End Sub
 
 バッチリだったのですが、ここまでできたら、シートを使わないで何とかならないものかと、配列を使って考えたのですが、
 
 Dim rndNO(1 To 20) As Integer
 Dim intNO As Integer
 Dim p As Integer
 Dim t As Integer
 
 For p = 1 To 20
 t = 30
 Randomize
 rndNO(p) = Int(Rnd() * t) + 1  '1からtまでの乱数の発生
 intNO = rndNO(p)
 
 Do Until rndNO(p) <> intNO '同じ数字がでたら、違うまでループ
 ↑
 ここの式が思いつかないしわからない。
 
 rndNO(p) = Int(Rnd() * t) + 1
 intNO = rndNO(p)
 
 Loop
 
 Next
 コレクションを勉強したらなんていわないで、この配列を使って何とかならないものでしょうか。
 rndNO(p)が、今まで作った配列の中にあるかないかを調べるような式や関数をどなたか教えていただけないでしょうか? このコードからは無理ならば、諦めてシートを使います。
 よろしくお願いします。
 
 
 |  |