• ベストアンサー

エクセルで乱数を作成する

たとえば、 A1~A1000に0から始まる9桁の数字を入力したとき、 B1に、B1~B1000内で重複しない、4桁の英数文字を表示させたいのです。 マクロは使わず関数で4桁の英数文字をランダムで表示させることは可能でしょうか? よろしくお願いいたします。

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

  • ベストアンサー
noname#223623
noname#223623
回答No.4

#3です。補足ありがとうございます。で、確認ですが、A列の値を元にB列の値を計算するわけではないですよね?単にパスワードの生成ができればいいと思うのですが違いますか? ということなら、パスワードは別のツールで生成したらどうでしょう。例えば参考URLのプログラムですが、  * 含まれる文字種を指定する  * 文字種ごとの個数を指定する  * 全体の桁数を指定する  * 生成するパスワードの個数を指定する このようなことができます。生成したパスワードはテキストファイルに保存できるので、Excelで読み込んでしまえば、後は簡単な関数でできると思います。 あくまでもExcelだけで処理する必要がないならばですが、参考になりますでしょうか。

参考URL:
http://fapsis.s1.xrea.com/pascrt.shtml
delic0000
質問者

お礼

ご回答ありがとうございます。 ご返信が遅くなってしまい申し訳ございません。 >単にパスワードの生成ができればいいと思うのですが違いますか? そのとおりですね。No.5さんのゆうとおりExcelでなんとかしようと考えすぎていたのかもしれません。参考URLはフリーウェアですし、大変助かります。ありがとうございました!

その他の回答 (4)

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

難しい問題を処理しようとしている感じがする。その上VBAという方法も使わない制約を自ら課して。 不完全、未完成ですが、参考に。 (A)4桁のパスワードを計算して出すのではなく、パスワードを用意しておく (B)そのうちの1つを、ランダムに選ぶ という方法になると思う。 そのとき困るのが、 (X)RAND()関数は再実行されて変わってしまうということ (Y)また乱数は、重複発生までは排除するものでないこと である。 ーーー 例えばA1に=INT(RAND()*42+48)を入れる。48は0の文字コードが 48だから。42はZが文字コード90で、90-48=42だから。 範囲の乱数は=INT(RAND()*(上限ー下限)+下限) D1まで式を複写し、A1:D1を範囲指定し、A1000:D100まで式を複写する。 56 67 78 80 8CNP 60 55 54 76 <76L 52 69 72 53 4EH5 89 63 87 66 Y?WB ・・・ そしてE1に=CHAR(A1)&CHAR(B1)&CHAR(C1)&CHAR(D1)と入れてE1000まで 式を複写する。 (X)を逃れるためにE列をE列に形式を選択して貼り付けー値で式を消す。 上記E列のようになる。 困ったことにコード58-64に記号があるので記号が出てくる行(パスワード)がある。この回避方が今思いつかない。 ーーーー さて入力行J列の隣K列に =IF(J1="","",INDEX($E$1:$E$1000,INT(RAND()*(1000-1)+2),1)) と入れてF1000まで式複写する。 J列に入力の都度K列の行のセルをポイントし、数式バー部をクリックしてF9を押してENTERで値かする。 これでも再計算されるかもしれない。 以上不完全なので、結局関数ではできないのではと思いました。 (1)パスワードの重複は関数でチェックできるので、修正する。 パスワードのランダム性はRAND()関数を利用する (2)人に割り当てるのは、パスワード表上で、利用済みの次を割り当てる。 で妥協かなと思いました。 もう一列乱数を出して、その乱数で並べ替えて、順をシャッフルすることは可能です。

delic0000
質問者

補足

ご回答ありがとうございます。 >(A)4桁のパスワードを計算して出すのではなく、パスワードを用意しておく パスワードはNo.2さんのURLを参考にしたいと思います。関数でなんとかしようと難しい質問をしてしまい申し訳ございませんでした。参考にためさせていただきます。VBAもきちんと学ばなくてはですね…。ありがとうございました!

noname#223623
noname#223623
回答No.3

ちょっと補足お願いします。 > A1~A1000に0から始まる9桁の数字を入力したとき、 > B1に、B1~B1000内で重複しない、4桁の英数文字を表示させたいのです。 B列ですが、単に「A列を入力した時に」値を生成すればいいのでしょうか?それとも「A列が入力された時、A列の値を使って」B列の値を生成するのでしょうか?つまり、A列の値がB列の値に影響するのかということです。 > B1に、B1~B1000内で重複しない、4桁の英数文字を表示させたいのです。 確認ですが英数文字とは「半角英大文字(A~Z)」、「半角英小文字(a~z)」、「半角数字(0~9)」でいいですか?「○桁目は必ず英小文字で」とか「必ずすべての文字種を使わなければならない」とか条件はないですか? 数字だけなら楽だけど、文字が入るとちょっと面倒かもしれない。 おそらくVBAになると思うが、それはOK? ついでにExcelのバージョンも教えてください。

delic0000
質問者

補足

補足させていただきます。エクセルは2000を使っています。 「A列の値がB列の値に影響するか」ということですが、下記のようなことをしたいと思っています。 たとえば、 今日  A1に091010100と文字列で入力する →B1に半角の英数字4桁が自動表示される。     A2に000510100と文字列で入力する →B2に(B1とはかぶらない)半角の英数字4桁表示される。 次の日 A3に01001000と文字列で入力する  →B3に(B1B2とはかぶらない)半角の英数字4桁表示される。 と、いう感じです。下記のNO2の回答のとおり、パスワードをランダムで作成したいと思っています。 A列は0から始まる9桁ということだけ決まっていて何がどの順番で入るかわかりません。 B列で表示させたい内容ですが 使えるものは「半角英大文字(A~Z)」「半角英小文字(a~z)」「半角数字(0~9)」 です。 困るのは、数字だけ、半角英大だけ、半角英小だけとならなることです。(数字だけだと簡単なのですね…)「いずれかの2種を使う」「すべての文字種を使う」はどちらでも問題ありません。 「すべての文字種を使う」にしたほうが簡単であればこれでOKです。なお「○桁目は必ず△を」というのもありません。 >おそらくVBAになると思うが、それはOK? VBAはいっさい手を出したことがなく、VBAしか方法がない!ということであれば、申し訳ございませんが、VBAについてのご説明は不要です。メニューバーの意味もかわらない状況なので理解に大変な時間がかかります。そのときは勉強しなおして出直します…。 関数でできればなんとかお教えいただきたいです。

noname#204879
noname#204879
回答No.2

1.A列のデータは数字(文字列)ですか数値ですか?2.B列の4桁の英数の構成(何桁目が英字とか数字   とか)はどうなりますか? 3.英字は大文字、小文字の区別はありますか? 4.A列のデータは何のためにあるのですか?(今回   の質問と関係あるのですか?)

delic0000
質問者

補足

補足させていただきます。 1  0から始めたいので「文字列」です。 23 半角であれば大文字・小文字が混ざってもかまいません。    また、「○行目は数字がいい」などはありません。    ただ、「英語の大文字・小文字の組み合わせ「数字だけ」というのは避けたいです。    ごちゃまぜがいいです。 4  顧客番号を入力する予定です。そのパスワード作成に乱数を表示させたいのです。    ただ、A1から通し番号にはならなりません。また、今後どんな数字9桁を入力していくのか未定です。    作成前に決まっていないとだめでしょうか…。

noname#20378
noname#20378
回答No.1

Excel持っていないので実験できませんが RANDBETWEEN関数というのがあるようです http://digipot.web.infoseek.co.jp/itiran03.html

delic0000
質問者

お礼

読み飛ばしてしまいました。 ご返信が遅れて大変申し訳ございませんでした。 英数文字を含めた乱数がいいのですが、これの関数でも可能なのでしょうか。リンク先を読ませていただきます。

関連するQ&A

  • エクセルで3ケタの乱数

    今度くじ引き大会をするのに3ケタの数字を250名ほどに配りたいのですが、それぞれの数字が重複なくかつ各桁数の数字が重複しないで乱数をエクセルで生成する方法を教えてください。(例えば、101,221,199などは除外したいです) RAND,RANDBETWEEN関数を使ってみましたが、重複してしまうし、221などのような各桁で数字が重複してしまうものができてしまうのでうまくいきません。 よろしくお願いします。

  • ランダム関数で任意の桁数のランダム数字を作りたい

    エクセル2000ユーザーです。ランダム関数を使い、重複を許さない5桁のランダム数字を1000個作りたいと思っています。randbetween関数を使おうと思ったのですが、2000では使えないのか、NAMEといったエラー表示がでます。5桁の中は同じ数字がでてきても構いません。例:11295、43634、70676・・・etc。 が、1000個の中では同じ数字が重複しないようにしたいです。 =RIGHT(RAND(),5) のように考えたのですが、他にいい方法はありますでしょうか? マクロやVBAは苦手なので、できれば関数でいいやり方があれば教えてください。

  • Excel2002 ランダムに並べ替える関数

    Excel2002で掛算九九の100マス計算を作っています。 マクロを使って、ボタンにマクロを登録し、九九の問題を作成したいのです。 1~10の数字をランダムに重複しないように、A1:J1に表示したいです。 A B C D E 1 9 7 8 1 2・・・ 2 2 3 8 4 1 5 4 でA1:J1の1~10の数字ををランダムに並び替えたいのですが、そういった関数はありますか? RANDBETWEEN関数を使ってみたんですが、重複する数字が返ってきてしまいます。 何か良い方法はありますか?

  • Excel特定の文字列を抽出する関数を教えてください。

    A列に***AAA/2桁の数字***と言う値があります。 *はランダムです。 2桁の数字もランダムです。 AAA/2桁の数字のみを抽出する関数を教えてください。 重複する値は、1つを残して削除したいです。 よろしくお願いします。

  • エクセルで

    B列に色々な3ケタの数字がランダムに入っていてるのですが、そのB列の数字が371の場合は直接、それ以外の数字の場合は買取とA列に入力されるようにしたいのですが、関数とか使ってできないでしょうか?よろしくお願い致します。WINDOWS97、excel97です。

  • EXCELで乱数表示に条件を加えたいのですが...

    1から10までの数をA1~A10のセルに重複なしでランダムに表示する際に, 今まで,RAND関数,RANK関数,RANDBETWEEN関数,sortedlistクラスなどを使っていました. そこに,A1には2はダメ!,A2には4はダメ! … というように,各セルで表示される数を制限 した下でランダム表示したいのですが,どのようにすればいいか思いつきません... 良い考えがあれば,是非教えて下さい.お願いします.

  • 【エクセル】ランダムで重複しない整数を出したい。

    Windows 7、エクセル2007です。 ランダムで重複しない整数を任意の範囲から一部のみ入力するにはどうしたら良いでしょうか? 1.任意の範囲「1~50」とか「1~100」とか「15~300」とかから、20個だけとか40個だけとか。 2.ランダムなので「2,6,3,4,8,1・・・」とかのn、n+1、n+2ではないランダムな整数。 3.重複しないこと。 上記1~3を満たしたやり方ってありますか? 出てこない数があっても良いんです。 例えば、1~10までの範囲でランダムに3個だけセルに入力したいとき。 A1に7、A2に4、A3に9というふうに。 それが1~300の範囲で50個の数字をランダムに重複しないように入力する。 A1に15、A2に163、A3に92、・・・A50に43。 残りの250個の数字は入力されないという感じです。 乱数だと重複します。 ランク(順位)と組み合わせると、連続(n、n+1、n+2)になってしまいます。 列はどこでも良いんですが、行は連続したいです。 A1~A50とか、A1~A300とか。 関数の組み合わせでできないでしょうか? また、マクロは分からないので、詳しく解説して頂けると助かります! 情報が不足する点がありましたら指摘して下さい。 追加します。

  • エクセルで「1~15」の乱数表を作りたい。

    エクセルで、「1」から「15」までの15種類の数字を使ってランダムの数列表を作りたいのですが、どのようにすればできますか? その際、各数字はそれぞれ1個ずつ、一つのセルに入れるものとします。重複しても構いません。 例えば「7」「2」「9」「13」「2」「4」「1」「9」・・・でもOKです。 また、同じ数字が連続するケースの発生もOKです。 例えば、「3」「8」「14」「6」「6」「5」「7」・・・でもOKです。2連続だけでなく、3連続もOKです。 要は「1~15の数字のランダムな出現による乱数表」が作成できればいいのです。 表の範囲は「A7~IV200」までです。 PCの初心者ですので、詳しく丁寧に教えて頂ければ有り難いです。 例えば次のように・・・。 1.・・・・・・・・・ 2.・・・・・・・・・・・・ 3.・・・・・・・・ 4.・・・・・・・・・・・・・・ 5.・・・・・・・・・ と、いう風に、順を追ってウィザード風に書いて頂ければ・・・と思います。 PCやエクセルや関数に詳しい方、宜しくお願いいたします。

  • エクセル関数(抽出)について

    宜しくお願い致します。 A列にランダムな数字が入力されている。(重複する数字はない) B列にランダムな数字が入力されている。(重複する数字がある) ここで、A列のセルの数字をB列の任意値分全部抽出したいのです。    A   B 1 815  9 2 330  8 3 209  6  4 110  9  5  24  9 6 782  5 7   3  9 これを以下のようにする方法を教えて下さい。 9 815 9 110 9  24 9   3 ※このA列の”9”もセルの中で指定したいのです。

  • エクセル関数(抽出)について

    宜しくお願い致します。 A列にランダムな数字が入力されている。(重複する数字はなく、空セルなし) B列にランダムな数字が入力されている。(重複する数字があり、空セルあり) ここで、B列に入力されているA列のセルの数字を全部B列降順に抽出したいのです。(以下のような場合です)    A   B 1  7  200 2  2  100 3  5  4  3  100  5  8   50 これを以下のようにする方法を教えて下さい。 200 7 100 2 100 3  50 8

専門家に質問してみよう