過去ログ

                                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で設定できると思いますが
これについても効率のいい方法があれば教えて下さい。
 ───────────────────────────────────────  ■題名 : Re:文字列の作成  ■名前 : JuJu <juju-bbs@su-u.com>  ■日付 : 03/1/7(火) 12:41  -------------------------------------------------------------------------
   平さん、こんにちはぁ

>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で抜き取るとか。

ではではぁ
 ───────────────────────────────────────  ■題名 : Re:文字列の作成  ■名前 : ポンタ  ■日付 : 03/1/7(火) 13:02  -------------------------------------------------------------------------
   こんな感じでどうでしょう?

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
 ───────────────────────────────────────  ■題名 : Re:文字列の作成  ■名前 : 平  ■日付 : 03/1/8(水) 18:36  -------------------------------------------------------------------------
   JuJuさん、ポンタさん、ありがとうございました。

これらの方法で試してみて、また別の件で何か都合が
悪い事が出た場合はご相談させて頂きます。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 514