Page 514 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼文字列の作成 平 03/1/7(火) 9:47 ┣Re:文字列の作成 JuJu 03/1/7(火) 12:41 ┣Re:文字列の作成 ポンタ 03/1/7(火) 13:02 ┗Re:文字列の作成 平 03/1/8(水) 18:36 ─────────────────────────────────────── ■題名 : 文字列の作成 ■名前 : 平 ■日付 : 03/1/7(火) 9:47 -------------------------------------------------------------------------
今年も宜しくお願い致します。 さて、早速質問なのですが 0〜9およびA〜Zの36文字をランダムに 並べて文字列を作りたいと思うのですが 効率のよい方法は何かありますでしょうか? ちなみに単純に思いついたのは、変数D(x)に対し D(1)=1 D(2)=2 ・ ・ ・ D(35)=Y D(36)=Z としておき、Rnd関数で1〜36を発生させる方法ですが これですとあまりに手間がかかり過ぎるので、別の方法が あるのでは?と思う次第です。 文字列の長さは5〜10文字で任意に選べるようにしたいと 思っています。これはFor〜Nextで設定できると思いますが これについても効率のいい方法があれば教えて下さい。 |
平さん、こんにちはぁ >0〜9およびA〜Zの36文字をランダムに >並べて文字列を作りたいと思うのですが >効率のよい方法は何かありますでしょうか? > >ちなみに単純に思いついたのは、変数D(x)に対し >D(1)=1 >D(2)=2 > ・ > ・ > ・ >D(35)=Y >D(36)=Z >としておき、Rnd関数で1〜36を発生させる方法ですが >これですとあまりに手間がかかり過ぎるので、別の方法が >あるのでは?と思う次第です。 それが基本形です。 方法は色々あると思いますが、文字列操作でのサンプルと作ってみました。 重複ありとなしがあると思うので両方^^ 'こっちが重複なし Sub Macro1() Dim strSeed As String, strMoji As String Dim lngPos1 As Long, lngPos2 As Long Dim strC As String strSeed = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" strMoji = strSeed For lngPos1 = 1 To Len(strMoji) - 1 lngPos2 = Int(Rnd() * (Len(strSeed) - lngPos1 + 1)) + lngPos1 strC = Mid$(strMoji, lngPos1, 1) Mid$(strMoji, lngPos1, 1) = Mid$(strMoji, lngPos2, 1) Mid$(strMoji, lngPos2, 1) = strC Next MsgBox strMoji End Sub 'こっちは重複あり Sub Macro2() Dim strSeed As String, strMoji As String Dim lngPos1 As Long, lngPos2 As Long strSeed = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" strMoji = Space$(Len(strSeed)) For lngPos1 = 1 To Len(strMoji) lngPos2 = Int(Rnd() * Len(strSeed)) + 1 Mid$(strMoji, lngPos1, 1) = Mid$(strSeed, lngPos2, 1) Next MsgBox strMoji End Sub >文字列の長さは5〜10文字で任意に選べるようにしたいと >思っています。これはFor〜Nextで設定できると思いますが そのままForの回す回数です^^; か、結果をLeftで抜き取るとか。 ではではぁ |
こんな感じでどうでしょう? 5〜10の数字を入力させ、その文字数分の ランダムな文字列を作成します。 Sub test() Dim 文字数 As String, 文字列 As String Dim MyRnd As Integer Dim i As Integer 文字数 = InputBox("5〜10の数字を入力してください") If Val(文字数) > 4 And Val(文字数) < 11 Then Randomize For i = 1 To Val(文字数) MyRnd = Int(36 * Rnd) If MyRnd < 10 Then 文字列 = 文字列 & MyRnd Else 文字列 = 文字列 & Chr(MyRnd + 55) End If Next MsgBox (文字列) Else MsgBox ("不正なデータが入力されました") End If End Sub |
JuJuさん、ポンタさん、ありがとうございました。 これらの方法で試してみて、また別の件で何か都合が 悪い事が出た場合はご相談させて頂きます。 |