皆さんはExelマクロでパスワードを生成する方法はご存知でしょうか?
エクセルでパスワードが作れたら仕事上都合が良い場合もありますし、ネットに繋がっていない状態で安全にパスワードを作りたい方もいることでしょう。
マクロを使うと聞くと一見難しそうに思えますが、全くの素人でも書けるので大丈夫です。
また、この記事の最後には今回作成するエクセルデータのリンクも貼ってありますので、ダウンロードして直ぐに使い方は、そちらをご利用ください。
それ以外の方で最初から作りたいという人は、エクセルやマクロ(VBA)の使い方について初歩から丁寧に解説していますので、この記事を参考にしながら制作してみてください。
【パスワード生成】複雑で強力なパスワードの作り方と安全な管理方法について解説
皆さんは、パスワードを考える時に、組み合わせの複雑さや管理方法について考えたことはありますか? ほとんどの人は、同じパスワードを別々のサービスでも使い回していたり、覚えやすいようにと、何かのキーワード ...
続きを見る
パスワード生成に使うエクセルの作成
パスワードを自動生成するエクセルを作るにはマクロ(VBA)を書くこと以外にも先にやっておかなければならないことがいくつかあります。
と言うのも、マクロを動かすためには使っている環境によっては初めから動作しないようになっていたり、ファイルの拡張子を変更したり、それ以外にも様々な作業があるからです。
例えば、今回作成するパスワード自動生成のエクセルの拡張子は、皆さんが普段使っている「.xls」ではなく「.xlsm」の形になります。
この拡張子はエクセルでマクロを実行するために必要になる第一の設定です。
開発タブの表示
リボンのユーザー設定
先ほど少し触れたように今回作成するエクセルファイルの名前を「パスワード生成.xlsm」のマクロが実行できる拡張子で作成し、その後開発環境を整えるために「開発タブ」を表示させる必要があります。
開発タブの表示方法は「[ファイル]タブ > オプション > リボンのユーザー設定」と進み「開発」のボックスにチェックを入れ、「OK」を押すことで開発タブを表示させることができます。
マクロの有効化
[開発]タブ > コード > マクロのセキュリティ
マクロの設定
先ほどファイルの拡張子を「.xlsm」の形にしましたが、初期設定の場合これだけではマクロの実行ができませんので変更する必要があります。
マクロの有効化の方法は「[開発]タブ > コード > マクロのセキュリティ」と進み「VBA マクロを有効にする」を選択して「OK」を押すことで設定できます。
プルダウンメニューの配置
[データ]タブ > データツール > データの入力規則
データの入力規則 > [設定]タブ
生成されるパスワードの文字数を決めるためのプロダウンメニューを設置していきまので「2行A列」目のセルを選択しておきましょう。
プルダウンメニューを作成するには「[データ]タブ > データツール」と進み「データの入力規則」のボタンを押しましょう。
次に「[設定]タブ > 入力の種類」と進み「リスト」を選択して「元の値」の所を数値をカンマ区切りで1~20まで入力して、「OK」ボタンを押しましょう。
設定用シートの追加
設定用シート
パスワード生成に使う文字列を設定できるシートを作成することで、後から使わない文字を削除したり記号も含められるようにします。
なぜ別のシートに書くのかと言うと、利用者が誤って編集してしまうのを防ぐためです。
作成方法はSheet1の横の「+」ボタンを押してシートを追加します。
その時にSheet1の名前を「生成状況」、Sheet2の名前を「設定」としましょう。
その次に、設定のシートに移り「2行1列」目のセルに生成に使いたいも文字列を入力します。
開発プロジェクトにモジュールを追加
[開発]タブ > コード > Visual Basic
プログラムを記述するためにエディタを起動する必要があるので、「[開発]タブ > コード」と進み「Visual Basic」のボタンを押しましょう。
挿入 > 標準モジュール
モジュールの作成結果
エディタが起動しますので、[挿入]タブから「標準モジュール」を選択します。
選択すると「Module1」が作成されます。
プロパティ > オブジェクト名
次に「Module1」の名前を識別しやすいように「password_generate」に変更します。
名前の変更はプロパティウィンドウの「オブジェクト名」の入力を変えることで出来ます。
ボタンの作成
[開発]タブ > 挿入 > フォームコントロール > ボタン
「パスワード生成」のボタンを押した時にプログラムが動くために、ボタンを作成します。
ボタンの作成方法は「[開発]タブ > コントロール > 挿入 > フォームコントロール」と進み「ボタン」をクリックします。
マクロの登録
ボタンを作成したら「3行A列」目のセルに配置して、文言を「パスワード生成」に変更します。
次にボタンの上で右クリックをして、「マクロの登録」を選択します。
作成した標準モジュールを選択
マクロのウィンドウが出てきたら先ほど作成した「password_generate」モジュールを選択して「OK」を押しましょう。
これでボタンが押された時にマクロが実行されるようになりました。
パスワードを自動生成するマクロ(VBA)の書き方
ここからはパスワードを自動生成するためのマクロ(VBA)の書き方について説明します。
プログラムを書いたことのない人でも、20行程度のコードなので簡単に理解できるはずです。
また、今回作ったプログラムは簡易的なものなので、今後ご自身で使いやすいようにカスタマイズされると良いかもしれません。
ちなみに書いたプログラムは「[開発]タブ > コード > Visual Basic」と進んだところにあるエディタに書き込んでいきましょう。
まずは以下のプログラム全文をご覧ください。
Option Explicit Sub password_generate() 'パスワードに使われる文字列 Dim password_string As String password_string = Worksheets("設定").Range("A2").Value '生成されるパスワードの文字数 Dim password_length As Integer password_length = ActiveSheet.Range("A2").Value '生成されたパスワード Dim password_result As String 'ループ中にランダムに一文字取り出して連結 Dim count As Integer For count = 1 To password_length password_result = password_result & Mid(password_string, WorksheetFunction.RandBetween(1, Len(password_string)), 1) Next '生成結果を表示 ActiveSheet.Range("A5").Value = password_result End Sub
変数の定義
パスワード生成に使う変数を4つ定義していきますので以下のプログラムの「ここに記述」の所に書き込んでいきましょう。
Option Explicit Sub password_generate() 'ここに記述 End Sub
password_string (型:文字)
「password_string」変数には設定用シートの「2行A列」目のセルに記述されているパスワードに使われる文字を取得して代入しています。
Dim password_string As String password_string = WorkSheets("設定").Range("A2").Value
password_length (型:整数)
「password_length」変数には何文字のパスワードを作成するかの「数値 (整数)」が入ります。
値は「生成状況」のシートの中にある「2行A列」目のセルにあるプルダウンメニューから取得します。
Dim password_length As Integer password_length = ActiveSheet.Range("A2").Value
password_result (型:文字)
「password_result」変数には最終的に生成されたパスワードが代入されます。
Dim password_result As String
count (型:整数)
「count」は次に「For文」に使うループ回数をカウントする変数です。
Dim count As Integer
For文
For文は決められた回数処理を実行するための仕組みになります。
ここでは先ほど宣言した「count」変数に「1」を代入して、「password_length」の数になるまでループを実行し、パスワードを1文字ずつ決めていきます。
そして、決まった文字を「password_result = password_result & 決定した文字」の形で記述することで、最終的に連結した値(パスワード)を得ることができます。
また、文字を1文字決定する処理については、以下の「Len、RandBetween、MID」関数の使い方についてご覧ください。
For count = 1 to password_length password_result = password_result & 決定した文字 Next
Len関数
「Len」関数は引数に与えられた文字の長さ(数)を返す関数です。
今回の場合は引数に「password_string」を受け取っています。
Len(password_string)
RandBetween関数
「RandBetween」関数は第一引数と第二引数に与えられた値の間でランダムな整数を返す関数です。
今回の場合は第一引数に「1」を与え、第二引数には先ほどの「Len」関数で返された値が入ります。
WorksheetFunction.RandBetween(1, Len(password_string))
MID関数
「MID」関数は第一引数に与えられた文字から規定の範囲を切り出す関数です。
今回の場合は、第一引数に「password_string」、第二引数には先ほどの「RandBetween」関数、第三引数には「1」が与えられています。
これは「password_string」の文字から「RandBetween」関数が返した数値の位置から1文字返すという処理になります。
Mid(password_string, WorksheetFunction.RandBetween(1, Len(password_string)), 1)
パスワードを表示させる
「For文」の中で連結させた文字をパスワードとして「5行A列」目のセルに表示します。
これでパスワード自動生成のプログラムの完成です!
ActiveSheet.Range("A5").Value = password_result
まとめ
エクセルでパスワードを自動生成するための方法について解説してきましたが、いかがでしたか?
マクロ(VBA)を触ったことがない人にとっては少し分かりにくい点もあったかもしれませんが、一つ一つ順番に進めていけば必ず作ることができる内容になっていますので、諦めずにチャレンジしてみましょう。
また、今回解説したエクセル以外にも「パスワード生成ツール」と言う便利なサービスもありますので、強固なパスワードを手軽に作りたい方は試してみても良いかもしれません。
それでは皆さん、良いセキュリティライフを!