2017-05-20 18 views
-1

私はSheet2の値をcolumn2からcolumn4まで持っています。私はsheet-2の各列にある固有のデータを使って、このような出力を自分のsheet3に無作為に生成したいと考えています。文字列間にランダムな値を生成できますか?VBAでのランダム値生成

のSheet2:

Column 2 Column 3 Column 4 
M   25   Agree 
F   48   Agree 
      50   DisAgree 

私は、シート3にこのような何かを、データのランダムな120行を生成します。

Column 2 Column3 Column4 
M   25  Agree 
F   48  DisAgree 
M   48  Agree 
M   50  DisAgree 
. 
. 
. 
. 
M  25  Agree 

それを明確にするために、

私は3つの列がある - 列2、列3、Column4

のSheet2には、唯一のユニークな値が存在しています。その列内の同じ値は存在しません。

Sheet3では、例として、2列目のみとします。それは、M、F、F、M、F(ランダムに121行目まで)のように、row2からrow 121までランダムに値を持たなければならない。

あなたの意見をお寄せください。

+0

私は少し混乱している - 。どのようにシート2のデータは、シート3に慣れるでしょうか?私は、あなたが示した表2の表に 'F/25/Disagree'と表示されていません。ランダムな値が必要な場合は、VBAが必要ですか?どうしてそんなにしないの?(年齢のために) '= RANDBETWEEN(25,50)'? – BruceWayne

+0

@BruceWayne申し訳ありませんが、F25はsheet2には存在しません。ごめんなさい。 – Sid29

+0

しかし、それはない(25,50)。特定の列内の値の間にちょうどランダムです。実際には25と50です。 – Sid29

答えて

1

OFFSETRANDBETWEEN機能を使用できます。例えば

:0と2の間の乱数を選択し、[Sheet2の下に多くの行という値を選択します

=OFFSET(Sheet2!D$1,RANDBETWEEN(0,2),0) 

D1!。したがって、生成された乱数が2だった場合は、「反対」に戻ります。

RANDBETWEEN関数の2番目のパラメータを、利用可能な選択肢の数より1つ少なく設定するだけです。 (あなたは2番目のパラメータとしてCOUNTA(Sheet2!D:D)-1のようなものを使用していることを一般化できます。)


をあなたのシートの両方が1行にヘッダを持っているので、あなたのデータが2行目に開始し、あなたがシート3に次の式を使用したと仮定すると!B2とは、シート3 B2の全範囲にコピー:D121

1
=OFFSET(Sheet2!B$2,RANDBETWEEN(0,COUNTA(Sheet2!B:B)-2),0) 

これは、データセットのカウント用シート2の列をチェックし、データから取得され、その行の乱数を生成します。これは、データをSheet3に貼り付けます。あなたはに貼り付けるデータセットの数と範囲のためのループのために変更することができます

Sub Random() 
Dim lr1, lr2, lr3 As Long 
Dim r1, r2, r3 As Integer 
Dim sht, sht2 As Worksheet 

Set sht = Worksheets("Sheet2") 
Set sht2 = Worksheets("Sheet3") 

lr1 = sht.Cells(Rows.Count, 1).End(xlUp).Row 
lr2 = sht.Cells(Rows.Count, 2).End(xlUp).Row 
lr3 = sht.Cells(Rows.Count, 3).End(xlUp).Row 

For i = 1 To 120 
r1 = CInt((lr1 - 1 + 1) * Rnd()) + 1 
r2 = CInt((lr2 - 1 + 1) * Rnd()) + 1 
r3 = CInt((lr3 - 1 + 1) * Rnd()) + 1 

sht2.Cells(i, 1).Value = sht.Cells(r1, 1).Value 
sht2.Cells(i, 2).Value = sht.Cells(r2, 2).Value 
sht2.Cells(i, 3).Value = sht.Cells(r3, 3).Value 

Next i 

End Sub