• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[Excel]2つの条件がある重複しない数字)

Excelで重複しない数字を表示する方法

このQ&Aのポイント
  • Excelで1~100の範囲内で重複しないランダムな数字を表示させる方法を教えてください。
  • また、左側の列と同じ条件の範囲で右側の列に重複しない数字を2個表示させる方法も教えてください。
  • 表示数は1~50まで変化します。

質問者が選んだベストアンサー

  • ベストアンサー
  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.4

#1です。 関数での方法を示します。 A1に =RAND() と入力し、A2~A100にコピー&ペースト B1に =RANK(A1,$A$1:$A$100) と入力し、B2~B5までコピー&ペースト C1に =RANK(INDIRECT("A"&100+1-ROW()),$A$1:$A$100) と入力し、C2にコピー&ペースト これで、1~100のランダム値が B列に5個、C列に2個、重複せずに表示されます。 A列にあらかじめ3000個の乱数を用意し、 数式内の100という数字を3000に変更すれば応用できます。 また、B列C列のペースト数を増やせば表示数も変更可能です。 ただし、B列+C列がA列の元データを超えないようにしてください。 超えた場合は確実に重複したデータが発生します。 尚、A列がうっとうしいのであれば、A列選択後に 「書式」「列」「表示しない」をクリックしてください。 注意)無視できるほど極めて低い確率の話ですが、    RAND関数は、重複する数字が発生する可能性があります。    RANK関数ではそれらを同順位として判定するので、    結果的にB列C列に重複した値が発生する可能性は    否定できません。    極々まれな現象ですが、許されないのであれば    マクロで確実に重複をチェックしたほうが良い    かと思います。  ( =RAND()+ROW()/10^20 などで試してみましたがダメでした。)    

ree198888
質問者

お礼

回答ありがとうございました! 正に教えていただいた方法が知りたかったのです。 読んだ後すぐに書類も作成できました。 御気にされていた重複の件ですが、書類を使って作業する中で、重複していれば、すぐに分かるので、極々まれな現象であれば、全く許容の範囲内です。 本当にありがとうございました!

その他の回答 (3)

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.3

#1です。 たびたびのコメントです。 2番目のコードのポイントは A列にあらかじめA列+B列のランダム値を作っておいて、 あとで、分解するという方法です。 この考え方を応用というか、そのまま適応すれば、 もし、ree198888さんが、A列に関数で50行の重複しない ランダム値を作成が完成しているのなら、 A列に最初から100行のランダム値を作っておいて、 あとで、後半の50行をB列に移動させればいいのではないでしょうか。 もちろん、セル参照してもいいでしょうし・・・ もっと早く気づけば良かったです。

ree198888
質問者

お礼

ka_na_de様 回答本当にありがとうございました! こんなややこしく、分かりづらい質問に回答していただいて本当にありがとうございます。 最初に明記しておけばよかったのですが、Excelの知識は関数止まりなんです・・ 回答していただいて、すぐ色々調べながら、書類を作成していたのですが、上記の方が関数での方法を教えてくださったので、その方法で作成しました。 教えていただいたマクロは、ちゃんと勉強してみたいと思います。 本当にありがとうございました!

ree198888
質問者

補足

上記の方もka_na_de様だったんですね!! 勘違いして本当に申し訳ありません! 何から何までお世話になってしまって・・ 本当にありがとうございました!

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.2

くどい表現だったので、改良してみました。 Sub test2()  Dim i As Integer  Dim k As Integer  Dim flg As Integer  Dim Lt_Row_Num As Integer  Dim Rt_Row_Num As Integer  Dim Try_Val As Integer  Dim Rnd_Num As Integer  Lt_Row_Num = 5  '左のA列の行数  Rt_Row_Num = 2  '右のB列の行数  Rnd_Num = 100   'ランダムな数字の値の範囲(最大値)  '不適切な初期値の判定  If Rt_Row_Num + Lt_Row_Num > Rnd_Num Then GoTo ErrorTrap  Range("A:B").ClearContents  Cells(1, "A").Value = Int(Rnd() * Rnd_Num + 1)  For i = 2 To Lt_Row_Num + Rt_Row_Num   flg = 0   Do    Try_Val = Int(Rnd() * Rnd_Num + 1)    For k = 1 To i - 1     If Cells(k, "A").Value = Try_Val Then Exit For     If k = i - 1 Then flg = 1    Next k   Loop Until flg = 1   Cells(i, "A").Value = Try_Val  Next i  Range("B1:B" & Rt_Row_Num).Value = Range("A" & Lt_Row_Num + 1 & ":A" & Lt_Row_Num + Rt_Row_Num).Value  Range("A" & Lt_Row_Num + 1 & ":A" & Lt_Row_Num + Rt_Row_Num).ClearContents  Exit Sub ErrorTrap:  MsgBox "初期値が不正です。" End Sub

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.1

こんにちは。 マクロでサンプルコードを記述してみました。 新しいブックの標準モジュールに登録して実行してみてください。 もし、関数で実現したいということであれば、この回答は無視してくださいね。 Sub test()  Dim i As Integer  Dim j As Integer  Dim k As Integer  Dim flg As Integer  Dim Lt_Row_Num As Integer  Dim Rt_Row_Num As Integer  Dim Try_Val As Integer  Dim Rnd_Num As Integer  Lt_Row_Num = 5  '左のA列の行数  Rt_Row_Num = 2  '右のB列の行数  Rnd_Num = 100   'ランダムな数字の値の範囲(最大値)  '不適切な初期値の判定  If Lt_Row_Num > Rnd_Num Then GoTo ErrorTrap  If Rt_Row_Num > Rnd_Num - Lt_Row_Num Then GoTo ErrorTrap  '左のA列  Range("A:A").ClearContents  Cells(1, "A").Value = Int(Rnd() * Rnd_Num + 1)  For i = 2 To Lt_Row_Num   flg = 0   Do    Try_Val = Int(Rnd() * Rnd_Num + 1)    For k = 1 To i - 1     If Cells(k, "A").Value = Try_Val Then Exit For     If k = i - 1 Then flg = 1    Next k   Loop Until flg = 1   Cells(i, "A").Value = Try_Val  Next i  '右のB列  Range("B:B").ClearContents  For j = 1 To Rt_Row_Num   flg = 0   Do    Try_Val = Int(Rnd() * Rnd_Num + 1)    For i = 1 To Lt_Row_Num     If Cells(i, "A").Value = Try_Val Then Exit For     If i = Lt_Row_Num Then flg = 1    Next i    For k = 1 To j - 1     If flg = 0 Or j = 1 Then Exit For     If Cells(k, "B").Value = Try_Val Then      flg = 0      Exit For     End If    Next k   Loop Until flg = 1   Cells(j, "B").Value = Try_Val  Next j  Exit Sub ErrorTrap:   MsgBox "初期値が不正です。"   Exit Sub End Sub

関連するQ&A

専門家に質問してみよう