• ベストアンサー

エクセルで英字と数字を組み合わせたランダムなシリアル番号を作りたいのですが。

5桁から7桁くらいで、英字と数字を組み合わせたランダムな文字列を生成する関数、もしくは数式の記述の仕方を調べています。13pr6y などの文字列がとりあえず1000必要になった場合、どうすればいいでしょうか。よろしくお願いします。

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

  • ベストアンサー
  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

一番簡単にランダムの文字を打ち出すなら =CHAR(RAND()*93+33) この例ではASCIIコードで33-126までを出力します。使いたくない文字があるなら下記URLを参考に数値を適当に変更。 http://www.mars.dti.ne.jp/~torao/program/appendix/ascii.html 桁数を増やしたかったら「&」でつなげるだけ。 =CHAR(RAND()*93+33) & CHAR(RAND()*93+33)... まぁ全部ランダムで記述するとユニークになるとは限らないということが問題になる訳で。その為どこかの桁は連番にでもする必要があるわけで、例えば行数でも取得させれば良いのではないかなと。 もし行数でやるなら単純に ROW() で行数は取得できますが、桁数を揃えたいのなら行数が1-9、10-99、100-999のケースなどでif文をネストする必要があります。

allalone
質問者

お礼

すごくわかりやすく助けになるご説明、ありがとうございます。早速コードを見ているのですが、数字と英字、英大文字と英小文字との間に、使いたくない文字があります。それらを除外した数式の記述方法がわかりません。WEB上にこの類の情報は少なく、どうしても教えていただきたいのですが。

その他の回答 (1)

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.2

1番ですが。 まぁこれ以上は発想の転換というか、細かく分けてそれっぽくみせる工夫をすれば良いのではないかなと。 例えば ・1桁目はa-zの中でランダム出力として CHAR(RAND()*25+97) ・2桁目は行数を4桁数値で表した3桁目として IF(LEN(ROW())=4,LEFT(ROW(),2),IF(LEN(ROW())=3,LEFT(ROW(),1),IF(LEN(ROW())=2,LEFT(ROW(),1),0))) ・3桁目は1-9の中でランダムとして CHAR(RAND()*9+48) ・4桁目はA-Zの中でランダム出力として CHAR(RAND()*25+65) ・5桁目は行数を4桁数値で表した4桁目として RIGHT(ROW(),1) ・・・以下こんな感じで続くと。

allalone
質問者

お礼

休日にこのようにご回答をいただき心底感謝しています。問題は完全に解決しました。さらに今後にも活かせるものを得た気がします。(1700回以上もの回答をされているんですね!)popesyu様、ありがとうございました。