• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:別のシートから、数字をランダムに選択するには)

エクセルでランダムに選択する方法

このQ&Aのポイント
  • エクセルを利用して従業員の役割分担表を作成する際、ランダムに選択する方法について試行錯誤しています。
  • 現在は、従業員の識別番号を使用してランダムに選択する方法を模索しています。
  • これにより、作業効率を上げることができると考えています。

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

  • ベストアンサー
  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

K1:K9にデータがあり、M~U列に3人づつ取り出すとします。 A1:J9に =RAND() と入れます。 L1:U3に =VLOOKUP(SMALL(A:A,ROW()),A:$K,COLUMN($K1)-COLUMN(A1)+1,FALSE)  これで重複の無い3個が横に10組取り出せます。L1:U3の縦横を逆にすればご希望の表示になります。 ちなみに、ランダムに選択では不公平だと思いますので、できれば輪番制をお勧めします。

1968masaru
質問者

お礼

無事解決出来ました。 縦横を逆にしたら、希望通りの配列になりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

>……乱数の関数では、従業員の識別No.が出る保証が無いので、他の方法が無いものか…… RAND 関数(乱数の関数)でいきなりコードを算出するのはなく、行番号を算出します。つまり RAND を使います。 TRUE 型の VLOOKUP 関数などを用いれば、いきなりコードを抽出することはできるのですが、一定の確率で、抽出したデータ同士に重複が発生してしまいます。そのため、いったん重複のない行番号を作業列に求めます。 C1 =1+int(rand()*(rows(シート1!$A$1:$A$9)-2)) D1 =c1+1+int(rand()*(rows(シート1!$A$1:$A$9)-c1-1)) F1 =index(シート1!$A$1:$A$9,c1) これを入力したら、D1 セルを E1 に、F1 を G1:H1 にそれぞれコピペ。後は C1:H1 を下方向に好きな行数だけオートフィルしてください。 なおランダムでは、等確率でコードを抽出しますが、抽出結果には偏り(個数の不揃い)が発生します。ですから No.1 さんのおっしゃるように、輪番などにしないなら、公平でないとも考えることができるシステムをわざわざ採用する理由の説明を求められる可能性がありますね。 まあ「公平、平等」という概念自体が、物の見方ひとつで結果が大きく変わってしまう、哲学にも深く関るような、非常に判断の難しい問題でもありますが。輪番なら平等(である気がする)と受け止められやすいというのは、人間という生き物の性質のようです。人間には機械と違って、感情がありますからね。 また、RAND は再計算するたびに異なる値を算出するので、どの瞬間値を確定値にするのかについて、何らかの基準をあらかじめ用意する必要があります。なお、ある瞬間値を固定して保存するには、瞬間値の表示されているセルを他のセルなどに値複写します。

全文を見る
すると、全ての回答が全文表示されます。
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

シート1のA2セルから下方に識別Noが入力されているとします。 その識別Noをランダムに並び替えるために例えばC2セルには次の式を入力して下方にドラッグコピーします。 =IF(A2="","",RAND()) 並び替えた識別番号をD列に表示させるためにD2セルには次の式を入力して下方にドラッグコピーします。 =IF(A2="","",INDEX(A:A,RANK(C2,C:C)+1)) その後にお望みのデータをシート2に表示させるとしてA2セルには次の式を入力してC2セルまで横方向にドラッグコピーしたのちに必要な日数分だけ下方にドラッグコピーします。 =INDEX(Sheet1!$D:$D,MOD((ROW(A1)-1)*3+COLUMN(A1)-1,COUNT(Sheet1!$C:$C))+2) 1日を5人とする場合には上の式で*3を*5にすればよいですね。

1968masaru
質問者

お礼

無事解決出来ました。 人数対応も数式で変更して確認しましたが、表示出来ました。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

シート1のA2以下に社員番号があります シート2の Z2に =IF(Sheet1!A2="","",RAND()) と記入、社員の人数をカバーできるだけ沢山、下向けにコピーして埋めておきます シート2の A2に =INDEX(Sheet1!$A:$A,MATCH(SMALL($Z:$Z,ROW(A1)*3+COLUMN(A1)-3),$Z:$Z,0)) と記入、右にあと2つと下向けにコピーします。

1968masaru
質問者

お礼

無事解決出来ました。 有難う御座います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルで、2つの選択から、別シートの数字表示する

    恐れ入りますが、 エクセルで、2つの選択から、別シートの数字を 表示させたいのですが。  作業シート 1  番号 氏名 コード名  資格 取得日 2  112 阿部 A001    免許   参照シート 1  番号 氏名 コード名 資格 取得日 2  112 阿部 A001   免許 20130728 番号を入力しかつコード名を入力すると別シート の取得日が表示させるようにしたいのですが。 (コード名、資格は別の参照資格コード表より 表示させております(VLOOKUP)) 大変恐縮ですが、こちらが解決できないために、 業務が滞っております。 恐れ入りますが、ご回答のほう、よろしくお願い 致します。

  • オートフィルタで選択した値を別のシートに表示させる

    現在、オートフィルタで選択した値を別のシートに表示させる方法を調べています。 (Excel2010を使用) Sheetが2つあり、Seet名前には、英語で名前が入っています。 添付の通り、B3からMike,David,Bob...という様に300行目まで英語の名前が入っています。 もう1つはSheet名が名前抽出結果です。 Seet名前にオートフィルタをかけて選択した名前を、別のSheet名前抽出結果に表示させたいのですが、なかなかうまくいかず困っています。 表示させる名前の場所は、Sheet名前抽出結果にB4から順番に下に表示させていければ と考えています。 ※1 300名位もいるのでオートフィルタで誰も選択していない時はB4以降の行は空白でよい ※2 先ずはSheet名前にオートフィルタで10人ぐらい選択し、Sheet名前抽出結果に、選択した名前B4~B13に10人分表示させたい(選択した名前のみを表示させる) B4以降の行に関数で簡単に表示できれば良いのですが、そういった方法はあるのでしょうか。 どなたか詳しい方ご教授頂ければ幸いです。 よろしくお願い致します。

  • エクセルで勤務表から出勤者を別シートに抽出したい。

    下記の「勤務表シート」の「弁当コーナー」、「飲料・デザートコーナー」の出勤者の名前を 「分担表シート」に日付ごとに抽出し、後は手入力でその日の分担作業名を入れて、作業指示書 を作りたいと思います。 実際には、その他にも3つのコーナーがあり、40人程のパートさんを管理しております。 抽出する際に休んでいる人を空欄で残したいと思います。 また、日付ごとの分担表に月日も反映したいと思っています。 更に、勤務表に従って、1ヶ月分の日付の分担表のシート(28~31シート)を作成しておきたいと思っています。 今までは、勤務表に従って、手入力で名前を入れていましたが、入力ミスや休日変更などその都度、分担表も訂正し、手間がかかる上にミスも多く、困っています。 尚、マクロは使ったことが有りません。エクセルは2010です。 どうか、お手数ですが、ご教授お願い致します。

  • エクセルで別シートに・・・煮詰まりました。

    こんにちは。 はじめて質問させていただきます。 お時間が許す方、どうかお手柔らかに お願い致します。 エクセルで下記のような表を作りたいのです;; 初心者なのでチンプンカンプンです・・・・           ●    ▲    ■   ★      ○     4/2   4/1   4/4   4/3      △    4/3        4/1      □    4/4   4/2   4/2          ↑の表に日付を入れると      ↓の表に別シートで表示させたいのですが関数がわかりません・・・          4/1  4/2  4/3  4/4      ●        ○   △   □      ▲   ○   □             ■    △   □         ○      ★            ○    どうかよろしくお願い致します。

  • 別シートに複数条件を選択すると抽出され合計値がでてくるような関数はありますか

    毎日、以下のような作業内容が手元にくるのですが今までは手でノートに振り分け管理していたのですが、エクセルの関数で別シートに複数条件を選択すると抽出され合計値がでてくるような関数はありますか。 よろしくお願いします。 ↓毎日くる作業内容です。 ex)これを日ごとにシートに入力して、別シートに項目の班替え選択→内訳選択→班長を選択→形を選択→該当する全日付から時間が抽出され合計時間がでてくる

  • シート選択時のみに実行されるようにしたい。

    Excel2003です。 Sheet2_Activateに  MsgBox "a" とすると、Sheet2を選択するたびにメッセージボックスを表示できますが、Sheet1選択状態で別の関数からSheet2上にPasteすると、Sheet2_Activateが発生し、メッセージボックスが表示されてしまいます。(表示されているのはSheet1のまま) Activateは「有効になったとき」なので仕方ないのかもしれないですが、Sheet2が“選択(表示)されたときのみ”メッセージボックスを出すにはどうしたらよいのでしょうか? よろしくお願いします。

  • エクセルのシート選択について

    エクセルでプルダウンにシート名を設定し、プルダウンの項目を選択するとその選択されたシートの情報が表示されるような機能を作成しております。 しかし関数で選択したシート名にLink先を変える方法が分からず困っております。 実際にはVLOOKUP(A1,Sheet1!$A$1:$B$200,2,0)の\"Sheet1!\"の部分をプルダウンで選択したシートに変える方法です。 誰かご存知の方がいれば方法を教えていただけないでしょうか。

  • 別のシートの計算式を利用したい

    関数や数式が入力されているセルを別のシートで=Sheet1!A1のように指定 するとそのセルに表示されている計算結果が表示されますが そのセルに入力されている数式自体を他のシートで利用するにはどうしたらいいのでしょうか? 例 Sheet1のA1に=A2+A3とすると Sheet2のA1にも=A2+A3(Sheet2のA2+A3としたい)となり Sheet1のA1の式を変更するとSheet2のA1の式も連動して変更して欲しい

  • Excel2000:複数シート同座標セルから、別シート一覧を連番で参照するには?

    同一のExcelファイル中に、30シートあるとします。 これらはどれも同じフォームで、全てのシートの同座標セルに連番をとりたいとします。 その連番のナンバーは、31番目のシートに一覧になっています。 この30ものシートの同座標セルから、31番目の一覧にひとつずつズレて参照させるには、どうしたらいいでしょうか。 例) 1シートA1に、31番目シートA1の「No.1-1」 2シートA1に、31番目シートA2の「No.1-2」 ※ちなみに、30シート分のフォームが既にあり、後で一覧のシートを追加するという前提です。 今は一つずつのシートを開けて、31番目シートの一覧へ、一つ一つリンクさせているだけです。 でも、これをやってるとシートが多くなると面倒なんですよね。 多分一括で出来るやり方がExcelにはあると思うんです。 ただし、私はVBはまったくの素人なので、表示形式や関数で教えていただけると嬉しいです。 また、なぜそういうやり方になるのかも、お勉強のために解説していただけると尚嬉しいです。 よろしくお願い致します。

  • 選択したセルの値を別シートのセルに取り込む方法

    顧客情報を閲覧・印刷するためのフォームがsheet1とします。顧客の情報が入ったデータベースがsheet2とします。 以下のマクロでsheet2の48列目を空欄にして、48列のいずれかのセルに「出力」と入力すると、そのセルの行の値を出力結果というシートに渡すようにしています。取り込んだ行の顧客番号をsheet1のmach関数の参照先に指定して、index関数で各項目に取り込むようにしています。 Worksheets("sheet2").Activate Dim i, LastRow As Long LastRow = Cells(Rows.Count, 48).End(xlUp).Row For i = 1 To LastRow If Cells(i, 48) = "出力" Then Rows(i).Copy Sheets("出力結果").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) End If Next i もう少しこれを改良して、Sheet2の顧客番号の入っている1列目の任意のセルを選択して、sheet1のmatch関数の参照先(例としてK4)に選択した顧客番号を渡す方法はありませんでしょうか。sheet1は顧客番号だけ取得できれば、match・index関数でフォームが完成します。 VBAは初心者です。上記マクロは検索で調べて必要な個所をコピーして今の環境にアレンジしました。よろしくお願いします。

専門家に質問してみよう