Excel。ファイル添付時用に強固なパスワードを使って作りたいけどどうしたらいい?
<RANDBETWEEN関数・IF+OR+AND+CHAR関数・CONCAT関数>
ファイルを添付してメールなどで送信する場合、パスワードを付けて送信することが多々あります。
その場合のパスワードを同じにするのも、ちょっとどうかと思いますし、かといって、「Squt!kYmx9」のようなパスワードを、その都度、自分で考えるというのも、大変です。
そこで、Excelをつかって、パスワードを生成するシートをつくっていきます。
Excel VBAでマクロをつくってもいいのですが、作ることまでもなく、関数で対応できます。
考え方として、適当な文字を10個組み合わせたいわけですね。
なお、今回は重複OKとします。
直接ランダムな文字を表示させる方法はExcelにはありません。
まずは、使えそうな関数を考えみることにします。
文字は、文字コードという数値をもっていますから、数値から文字に変換する関数が、CHAR関数です。
その数値をランダムで表示することができるのが、RANDBETWEEN関数です。
この2つの関数があれば、どうにかなりそうですね。
ただし、注意しないといけないのが、文字が文字コードに綺麗に割り振られていない点です。
文字コードの48が「0」で57が「9」
文字コードの65が「A」で90が「Z」
文字コードの97が「a」で122が「z」
というように割り振られています。
そのため、ランダムの数値を48~122という単純な条件で算出するだけではダメということになるわけです。
58~64を除くなど、除外する必要があるわけです。
それを踏まえたうえで、次のようなランダムパスワードを作成するためのシートを作りました。
E1のパスワードは、4行目に算出したランダムな文字を結合させています。
E1に設定した数式は、
=CONCAT(A4:J4)
CONCAT関数は、文字結合することが出来る関数です。
CONCATENATE関数だと、範囲選択では文字結合することができません。
セルごとに「,(カンマ)」で区切る必要があるので、新しく登場したCONCAT関数を使うほうが便利です。
A3には、ランダムで数値を算出する関数。RANDBETWEEN関数をつかって、48~122の間の乱数を算出しています。
=RANDBETWEEN(48,122)
本当ならば、文字コードがない数値を算出させないようにしたいのですが、一筋縄ではいきませんので、単純に48~122の間の数値を表示させるようにしています。
逆にA4の数式は、文字コードに該当するようにしてあげる必要があります。
A4の数式は、
=IF(OR(AND(A3>=48,A3<=57),AND(A3>=65,A3<=90),AND(A3>=97,A3<=122)),CHAR(A3),"!")
数式が長くなっていますが、
文字コードの48が「0」で57が「9」
文字コードの65が「A」で90が「Z」
文字コードの97が「a」で122が「z」
に対応させるために、OR関数とAND関数をミックスしてつかっています。別にAND関数のみでも大丈夫です。
文字コード以外の数値だったら、「!」(感嘆符:エクスクラメーション)を表示するようにしております。
あとは、A3:A4を範囲選択して、まとめて、オートフィルで数式をコピーしていきます。
パスワードの文字数が10文字なので、それにあわせて数式をコピーします。
これで、ランダムパスワードを作成することができます。
あとは、運用上の注意で、RANDBETWEEN関数は、セルに文字を入力するなど、アクションをしてしまうと、値が変わってしまうので、ランダムパスワードを作成したら、すぐに、値のコピーをつかって、管理する必要があります。