プロが教えるわが家の防犯対策術!

A1をダブルクリックすると、A1に7つの文字列がランダムに表示される。
追加条件として、先頭の文字は"a""c""f""h""k""9"に限定される。
2文字目から最後の文字までは、"0""1""2""5""6""7""8""x"に限定される。

例として、
f010156
a666082
k702x15
9xx7587

上記のVBAを教えていただきたいのですが。
よろしくお願いいたします。

A 回答 (2件)

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)


MJ1 = "acfhk9" '1文字目の文字列
MJ2 = "0125678x" '2文字目以降の文字列
If Target.Address = "$A$1" Then 'A1限定
MJ3 = Mid(MJ1, Rnd * 5 + 1, 1) '1文字目確定
For i = 2 To 7 '2文字目以降の繰り返し
MJ3 = MJ3 & Mid(MJ2, Rnd * 7 + 1, 1) '2-7文字目の確定
Next i
Target.Value = MJ3 'セルに値セット
End If
End Sub
    • good
    • 0
この回答へのお礼

希望どおりのことができました。
ありがとうございました。

お礼日時:2011/01/24 07:02

一例です。


ANo1さんとの違いは、
ダブルクリックでセルが編集状態になるのをとめたことと、
毎回違った乱数系列を発生させるために、Rnd関数を呼ぶ前に Randomize ステートメントを使用したことです。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim myAr1, myAr2 '変数宣言
Dim myRnd As String
If Target.Address <> "$A$1" Then Exit Sub 'A1以外停止
Randomize '乱数初期化
myAr1 = Split("a,c,f,h,k,9", ",") '先頭文字候補配列
myAr2 = Split("0,1,2,5,6,7,8,x", ",") '後続文字候補配列
myRnd = myAr1(Int(Rnd * 6)) '1文字目
For i = 1 To 6 '2文字目以降
myRnd = myRnd & myAr2(Int(Rnd * 8)) '2~7文字目
Next i '繰り返し
Target.Value = myRnd '値入力
Cancel = True '編集状態停止
End Sub
    • good
    • 0
この回答へのお礼

大変参考になりました。
ありがとうございました。

お礼日時:2011/01/24 07:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!