• ベストアンサー

エクセルでランダムな座席表を作成したい

excel 2003を使用しています。 エクセルで、100名程度の座席表を作成したいと思っています。 今、机の絵をレイアウトどおりに表示させて、該当する机に社員番号を入れれば、社員名が表示されるように設定しています。 席替えを毎日行うので、1-100の数字をランダムかつ重複せずに入れて、簡単に座席変更をしたいのですが、方法がわかりません。RANDBETWEENだと、ランダムに数字が入りますが、重複してしまい、困っております。 ランダムに数字を入力でき、かつ重複しない方法を教えてください。 どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.5

#02、04です。 う~ん困りました。補足していただいた内容だけでは到底期待に添うマクロは書けないからです。例えば「机の絵をレイアウトどおりに表示させて」って、具体的にはどのセルが氏名の表示セルなのかも分かりません。回答者は質問者さまのパソコンは見えないのです。 それにVLOOKUP関数を使用する方法は試していただけましたか? これでも毎回異なる座席表は作成できるはずです。どんな問題がありました?(試さずに「マクロでお願いします」はないですよね) とりあえずマクロは書いてみました。でもこちらで不足する情報を想像で補っていますから、きっと期待通りのものにはなりません。後はご自身で修正するなりしてください。 前提 ・シート1に座席表がある。氏名が入るセルはB,D,F,H,J列の2行目から2行おきとする ・シート2のA列に1~100の連番。B列に100人分の氏名が入力されている。C列は作業列として使うので何も入力しない ・実際の人数が100人に満たない場合、空席もランダムに発生する(人を前方に詰めることはしない。マクロを変更すれば詰めることも可能ですが…) 以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。マクロの実行はワークシート画面に戻ってALT+F8でマクロ一覧を開き、マクロ名を選択して「実行」ボタンです。 Sub Macro1() Dim idx, R, C As Integer   Randomize   For idx = 1 To 100     Sheets("Sheet2").Cells(idx, 3) = Rnd   Next idx   With Sheets("sheet2")     .Activate     .Cells(1, 1).CurrentRegion.Select     Selection.Sort key1:=Range("C1"), Order1:=xlAscending, _       header:=xlGuess, DataOption1:=xlSortNormal     For idx = 1 To 100       R = Int((idx - 1) / 5 + 1) * 2 'この式は実際の配置に合わせる       C = ((idx - 1) Mod 5 + 1) * 2 '必要があります       If .Cells(idx, "B") = "" Then         Sheets("Sheet1").Cells(R, C).ClearContents       Else         Sheets("Sheet1").Cells(R, C).Value = .Cells(idx, "B")       End If     Next idx     .Cells(1, 1).CurrentRegion.Select     Selection.Sort key1:=Range("A1"), Order1:=xlAscending, _       header:=xlGuess, DataOption1:=xlSortNormal     .Columns(3).ClearContents   End With   Sheets("Sheet1").Activate End Sub このマクロを実行するボタンを作成するなら、「ツールバー右クリック」→「フォーム」から「コマンドボタン」を選択し、画面上にコマンドボタンを配置して、マクロを登録すればよいでしょう

IWA_OKOSHI
質問者

お礼

お礼が送れて失礼いたしました。 実例のマクロを作成いただきありがとうございました。前提どおりのシートを作成して、マクロを少しずつ変更しています。希望通りのマクロにもう少しでなりそうです。後は自力でやってみます。ありがとうございました。

IWA_OKOSHI
質問者

補足

ご対応ありがとうございます。記載していただいている前提条件のように述べる必要があったのですね・・・。 う、失礼いたしました。 VLOOKUPも試してみたのですが、エクセルをほとんど知らないメンバーでも操作できるようになるべく簡略化したかったのです。 今日、マクロを入れて試してみます。取り急ぎお礼まで。

その他の回答 (4)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

#02です >ワンボタンで、実行できればと考えていました ワンボタンで何を自動化するか、質問に具体的に書かれていないのに何をどう回答すればよいのでしょうか(^^; #01さんもヒントを書いてくれていますが、#02の方法で乱数を発生させたとして、例えば1~100の乱数を発生させたシートをSheet2として、さらにSheet3のA1:C100に1~100の連番と社員番号と氏名の表があるとすれば、座席に相当する100個のセルに順番に  =VLOOKUP(Sheet2!A1,Sheet3!$A1:$C100,3,0)  =VLOOKUP(Sheet2!A2,Sheet3!$A1:$C100,3,0)   ~中略~  =VLOOKUP(Sheet2!A100,Sheet3!$A1:$C100,3,0) と指定しておけば、自動的に100人分の氏名を座席表に表示することができますよ Sheet2でF9を押下して再計算するたびに、座席表も変わるはずです これでもワンクリックではないというならマクロが必要でしょう。 マクロがよければ補足してください。でもきちんと条件を書いていただけないとマクロは書けませんよ。

IWA_OKOSHI
質問者

補足

ご回答ありがとうございます。 ご回答に甘えてマクロをお願いさせて頂きます。(スイマセン) 机の絵をレイアウトどおりに表示させて、それぞれの机に=VLOOKUP(Sheet2!A1,Sheet3!$A1:$C100,3,0)の関数を入れている席表のシートをSheet4とした際に、sheet4上に、「席替え」ボタンを作成して、そのボタンを押せば、Sheet2を再計算、最ソート出来きて、Sheet4の席がランダムに変われば良いと思っています。 どうぞよろしくお願いいたします。

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

ランダムに1-100の数が入っている列をその値でソートし、ソート結果の行番号ROW()を使えばどうでしょう。 直接セルの値をつかうのでなく。 乱数では重複していても、並び替えると、同じ値の中でも、何かの上下の序列が付きますから。そうするとROW()の値は、それぞれ別になります。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

どのくらい作業を自動化したいのか分かりませんが、単純に「1~100までの重複しないランダム数列を得たい」で良ければ以下で可能です まず適当なシートのA1:A100に1~100の連番を予め入力します。オートフィルを使うと簡単でしょう。そしてB1に  =RAND() を入力し、B100までコピーします。 A1:B100をB列をキーにして昇順、もしくは降順で並べると、A列はランダムな重複なしの数列になります。 意味が違っていたらごめんなさい。

IWA_OKOSHI
質問者

お礼

ご回答ありがとうございます。 ワンボタンで、実行できればと考えていました。並べ替えてセルをコピー・・・もう少し考えてみます。

  • root16
  • ベストアンサー率31% (43/138)
回答No.1

参考情報 http://www.relief.jp/itnote/archives/001798.php 多分、もっと簡単な方法としては、 RAND関数を使って予め入力しておいた1~100の数字を ランダムに並べ替え、それを座席番号とリンクしている セルにコピーすれば早いんではないでしょうか。

IWA_OKOSHI
質問者

お礼

ご回答ありがとうございます。 ワンボタンで、実行できればと考えていました。並べ替えてセルをコピー・・・もう少し考えてみます。

関連するQ&A