Excelで次のような表を作りました。(例として書きます)
1. みかん
2. バナナ
3. もも
4. なし
5. 栗 ・・・(以下同様) と続いていきます。
今回、その表から、ランダムにデータを抽出し、別のセルに書き出したいのですがどうやっていいのかわかりません。(理想図を下に書きます。)
2. バナナ
5. 栗
1. みかん ・・・・・(以下同様)
このようにして、今ある表から、ランダムに並び替えた、 『新たな表』 を作りたいのです。
どのように関数(RAND関数?)を設定したらいいのかよくわかりません。 教えてください。お願いします。
ちなみにOffice2000です。
No.4
- 回答日時:
A1に =RAND()
B1に =RANK(A1,$A$1:$A$5)
C1に =VLOOKUP(B1,元リスト範囲,2,0)
として、A1:C1をA5:C5までコピー
F9キーで変わります。
No.5
- 回答日時:
#4の方ので、だいたいいける(ランクが同列になる場合がある)と思いますが、
一応マクロでのバージョンを作ってみました。
まず、マクロエディタでクラスの挿入というのをやります。
そこに必要な分だけ(表の列の数だけ)変数を確保します。
'- Class1 -------
Public value1
Public value2
'- Class1 end ---
ThisWorkBookにでも以下のコードをコピーペーストします。
Public Sub shuffle()
Dim base As Range
Dim toBase As Range
Dim data As New Collection
Dim ins As Class1
Dim pos As Integer
Dim i As Integer
Set base = Range("A1") ' 元表のトップ
Set toBase = Range("G1") 'コピー先のトップ
pos = 0
Do While base.Offset(pos, 0).Value <> ""
Set ins = New Class1
ins.value1 = base.Offset(pos, 0).Value '列の数だけやります。
ins.value2 = base.Offset(pos, 1).Value
data.Add ins, CStr(base.Offset(pos, 0).Value)
pos = pos + 1
Loop
Randomize
pos = 0
Do While data.Count <> 0
i = Int(Rnd * data.Count + 1)
toBase.Offset(pos, 0).Value = data.Item(i).value1 '列の数だけやります
toBase.Offset(pos, 1).Value = data.Item(i).value2
data.Remove (i)
pos = pos + 1
Loop
End Sub
No.6
- 回答日時:
> だいたいいける(ランクが同列になる場合がある)
おっしゃる通り、確かに絶対無いとは言えないでしょうけど、、、
15桁だと 999兆9999億9999万9999 になるのかな?
重複する確率って、、、
No.7
- 回答日時:
#6様
>おっしゃる通り、確かに絶対無いとは言えないでしょうけど、、、
>15桁だと 999兆9999億9999万9999 になるのかな?
>重複する確率って、、、
乱数のプログラム関係の本やサイトでも読まれたらわかると思いますが、それほどの(1000兆もの間)循環しないなんてことは、たかがエクセルの乱数では、ないと(いうかありえないとさえ)思います。
実際の処、 #4の回答を見て作らないでおこうかと思ったんですけど、
数回実験してみた処
たった5行のデータなのに重複が生じたのを実際に見たので作ることにしたのです。
もちろん、実用には充分だとは思いますが、
表が充分長くなってきた時には、結構重複がでてくる可能性があると思っています。
また、そのような長い表の時にそれと気づくのが実際の場面で難しいとも思います。
また、もともとの表に重複があった場合
#2で「A列のデータは単に行番号ではなく
入力された値である」
ということからも
#4の方法では、VLOOKUPでうまくいかない(一意でないキーの時にランダムに表を抽出するような)場合もあるかもしれません。
No.8
- 回答日時:
識者に批判を乞う。
>新たな表』を作りたいのです
表を別のシートか列にコピーします。
・コピーした列の隣列の第1行にでも=RAND()と入れて
最終行まで複写する。小数点以下9桁の乱数が表れる。
乱数列をコピーし、自分の列に「値」を複写し、各セルの式を消す。
データと乱数行を範囲指定し、乱数の入った列で「並び替え」する。
最初回答を見た時は「なんのこっちゃ?」と思いましたけど、今見るとなるほど!と思いました(笑)
要するに、表の先頭の数さえランダムにしてしまえば、あとはExcelの標準機能の、「並び替え」を使えばできてしまいますね。F9での更新機能は使えませんけど(使えないことも無いですが)、一番手軽で、しかも分かりやすいと思います。
回答ありがとうございました。
No.9ベストアンサー
- 回答日時:
こんにちは。
maruru01です。作業列を1列だけ使用した、絶対に重複しない数式での方法です。
元データがA1:B5で、C列を作業列に使用して、D:E列に表示するとします。
まず、C1に、
=INT(RAND()*5+1)
と入力します。次に、C2に、
=LARGE(INDEX(NOT(COUNTIF($C$1:C1,ROW($A$1:$A$5)))*ROW($A$1:$A$5),),INT(RAND()*(5-ROW(C1))+1))
と入力して、C5までコピーします。
そうしたら、D1に、
=INDEX(A:A,$C1)
と入力して、E1にコピー。
さらに、D1:E1を5行目までコピー。
やはり、[F9]を押すたびごとに並べ替えられます。
回答ありがとうございました!!
数式の意味は実はほとんど、というか全く理解できません(笑) けれど、自分の表に合うように、セルアドレスを修正したり、RAND関数の範囲をうまく調整したらできました!!(数式の意味がわかるようになれば話が早いんですけどね・・・w)
僕の解釈だと、要はランダムに並び替えるには、表を一列追加して、その数字をランダムに割り振り、その順に並べればいいのですね! 一つセオリー?みたいなのを習得することができたような気がします。
F9で更新すれば、何パターンも作ることができるのでとても使いやすくすることができました!
回答ありがとうございました。 とても役に立ちました。
No.10
- 回答日時:
#7様
> 数回実験してみた処たった5行のデータなのに重複が生じた
そうですか、それは驚きです。
素人なのでこんな方法で良いか解りませんが、自分なりに下記のように検証した
限りではMsgが出る事はありませんでした。
先の方法で200件のデータを作成
C1:C200に =COUNTIF($B$1:$B$200,B1)
D1 に =SUM(C1:C200)
E1 に 200
下記を10回試した。
Sub Test()
Randomize
For i = 1 To 10000
Application.Calculate
If Range("D1").Value <> Range("E1") Then
MsgBox "重複"
Exit Sub
End If
Next i
End Sub
#6さんのマクロ以外にも、#8さん、#9さんと回答が出揃ってますのでこの辺にしておきます。
回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルについて教えてください。 2 2023/06/14 11:11
- Excel(エクセル) エクセルの数式で教えてください。 1 2022/10/25 09:26
- Excel(エクセル) Excelでのデータ管理 6 2022/12/24 09:33
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/06/23 15:02
- Visual Basic(VBA) VBAで早押しゲームを作りたい 4 2022/05/12 13:46
- Excel(エクセル) エクセルについて教えてください。 1 2023/03/03 08:38
- Excel(エクセル) エクセルの数式で教えてください。 1 2022/07/08 13:46
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) エクセルの数式について教えてください。 2 2023/03/04 09:54
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
エクセル指定した範囲からランダムで一つ抽出
Excel(エクセル)
-
Excelで事前にセルに入力した言葉をランダムに表示
Windows Vista・XP
-
エクセルで複数のセルにあらかじめ用意した単語を重複せずにランダム表示させる方法
Excel(エクセル)
-
-
4
エクセルでランダムにデータを抽出したい
Excel(エクセル)
-
5
「=RANDBETWEEN」で、同じ数字を出さないようにしたいのですが。
Excel(エクセル)
-
6
エクセル関数を使って、ランダム抽出をしたいです
Excel(エクセル)
-
7
エクセルで一部除外した数字を除いてランダムな数字を選択する方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでの作業計算方法について
-
はがきについて。
-
エクセル 文字を増やしたい。
-
セルの内容表示が邪魔になる
-
Microsoft365に変えたのですが...
-
エクセルの計算
-
Microsoft1Officeの互換ソフト...
-
【マクロ】その時、その時で変...
-
【マクロ】読取専用のファイル...
-
エクセル初心者です 関数の入れ...
-
Excel ピボットテーブルで日付...
-
【関数】適切な文字数の数字を...
-
LOOKUP関数を使えばいいのでし...
-
Aというブックの1というシート...
-
エクセル関数を教えてください
-
Excelのチェックボックスの使い...
-
エクセル 白黒印刷で白線を印刷...
-
時間によってファイル名が変わ...
-
WPS OFFICEでの縦書きについて
-
エクセルの条件付き書式につい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報