エクセルVBAでRANDBETWEEN関数を使って8桁のパスワードを複数設定する方法

みなさん、こんにちはケンケンです。

 

エクセルを使ってパスワード管理をする方法をご紹介しています。

前回は、VBAを使って複数のファイルにパスワードを設定する方法を勉強しました。

 

今回は、VBAで乱数を発生させてパスワードを作成する方法をご紹介します。

 

 

RAND関数の欠点

以前にRAND関数をご紹介しました。

 

個人的にはこの関数には欠点があると思っています。

それは、何かあるごとに関数が再計算されてしまう、ということです。

これを止めるために、自動計算の設定を変えるか、計算結果をコピペするなどの対応が必要でした。

 

使い勝手が悪かったのです。

しかし、VBAで関数を使うと、一度処理したものは勝手に再計算しないのでコードに起こしておく方が楽だと思います。

その点も踏まえて乱数を発生させるときはVBAで処理することをおススメします。

 

VBAでRnd関数を使ってみよう

それでは、VBAで乱数を発生させパスワードを生成してみましょう。

VBAではRnd関数を使います。

 

Rnd()

0以上1未満の乱数を発生させます。

「Int((最大値ー最小値+1)*Rnd+最小値)」で最大値と最小値の間で乱数を発生されることができます。

 

コードを書く前に乱数を書き出すシートを以下のようにします。A列の2行目から10行目まで書き出します。

 

これを前提にコードを書きます。

VBEを起動(Alt+F11)し、標準モジュールに記述しましょう。

 

コードの解説をします。

①Randomizeステートメントと言います。

乱数系列を初期化するおまじないです。Rnd関数を使うときはセットで覚えてしまいましょう。

 

②シートの2~10行目に書き出すために変数cntを使いForNext構文で繰り返し処理をします。

Rnd関数で生じた乱数をA列に書き出します。

 

実行してみましょう。

 

RANDBETWEEN関数を使ってみよう

Rnd関数で乱数を書き出すことができたので、今度はRANDBETWEEN関数を使って乱数を書き出してみましょう。

RANDBETWEEN関数はワークシート関数なので、関数を使う際にWorksheetFunctionを使います。

これもおなじないのようなものですね。

 

RANDBETWEEN(最小値, 最大値)

最小値から最大値の間の乱数を発生させます。

 

それではこの関数を使って、先ほどのシートのB列に1~9999までの数値で乱数を書き出すコードを書きます。

実行し以下のようになれば成功です。

 

 

VBAで8桁のパスワードを作ってみよう

今回のメインである8桁のパスワードを作ってみましょう。

以前に8桁のパスワードを作ったときのデータを使います。

シートの構造は以下のようにします。

  1. A1セルに英数字の文字列を入力します。
  2. A2セルに「=LEN(A1)」と数式を入力しA1の文字数を数えておきます。
  3. シート名を「計算元」とします。

 

先ほどのシートにも名前を付けます。シート名は「計算結果」としました。

 

まずは一文字書き出してみよう

8桁のパスワードを作る前に、まずは一文字乱数を発生させて書き出してみましょう。

計算元シートのA1の文字列から一文字ランダムに抽出し、計算結果シートのC2セルに書き出します。

 

RandBetween関数で1~62の内ランダムで数字を抽出し、Mid関数で先ほど抽出した数字番目を1文字書き出します。

言葉にするとややこしいですが、コードをじっくり見て理解してください。

なお、Mid関数との組み合わせ方法は過去の記事を参考にしてください。

実行し成功すると以下のように書き出されます。

8桁のパスワードを一つ作ってみよう

一文字書き出せたら今度は、8桁になるようにコードを修正します。

 

急に長くなりましたが、ひとつずつ説明します。

まず、変数を3つ用意しました。

  • cntは繰り返し構文を使う際に使うカウント変数です。今回は8回繰り返すので1から8までを指定します。
  • passはMid関数で抜き出した1文字を格納する変数です。
  • pass8は変数passに格納された文字をつなぎ合わせるための変数です。

次に、ForNext構文ですが、

  1. Mid関数で抜き出した一文字を変数passに格納し
  2. さらに変数pass8に入っている文字列と変数passに入っている文字列をつなぎ合わせたものを
  3. 変数pass8に再度代入し、その処理を8回繰り返します。

これで8桁のパスワードが変数pass8に格納されることになります。

 

最後にpass8をシートに書き出すことでパスワード生成が完了します。

それでは実行してみましょう。

8桁のパスワードを複数作成してみよう

今度は、8桁のパスワードを複数作成します。

 

先ほどのコードを一つの塊として考えて、それをさらに繰り返せばよいですね。

コードを以下のように修正してみましょう。

①追加したのは、シート書き出し用の変数cnt8を用意したところです。

この変数を使ってForNext構文で回します。

 

②計算結果シートの2~10行目に書き出します。

 

③ここで、ひとつテクニックを使っていて「pass8=””」で変数を初期化しています。

こうしないと変数pass8にどんどん文字列が格納されてしまい、うまくいきません。

この部分を削除するとどうなるかはご自分で試してみてください。

それでは、実行します。

 

上記のような結果がでれば成功です。

 

まとめ

いかがでしたか。

今回は、VBAを使って8桁のパスワードを生成するまでできました。

次回は、ファイル作成とパスワード設定を同時に行えるようにしてシステムを完成させます。

お楽しみに。それではまた次回お会いしましょう。

 

【記事一覧】エクセルでパスワード管理を徹底する方法

エクセルでパスワード管理を徹底する方法【VBA・関数使用】

エクセル関数を使ってパスワード管理をする方法

RANDBETWEEN関数を使ってパスワードを作る方法【エクセル関数】

VBAで新規ファイルを作成しパスワードを設定する方法

VBAで複数のファイルを作成しそのファイルにパスワードを設定する方法

エクセルVBAでRANDBETWEEN関数を使って8桁のパスワードを複数設定する方法

エクセルVBAでファイル作成とパスワード設定を同時に行う方法