2009年12月アーカイブ

ExcelのVBAを利用した、パスワード作成

以前に作ったものを、弊社の某お客様用に作り直したものです。

 

使用文字列を1群、2群、3群に分け、それぞれから最低何文字利用するか指定

できるようにしました。 

 

MakePw.jpg 

 

ダウンロードは、こちらからどうぞ。

■パスワード自動作成マクロのダウンロード (終了しました) 

 

レコードセットのデータをセルにコピーするには

『ExcelのVBAを利用して、PostgreSQLのデータを読み込む』 の

    Cells.CopyFromRecordset <レコードセット>

というコマンドが速くていいのですが、1行ずつ読み込んでいくやり方も掲載してお

きます。

 

    Cells.CopyFromRecordset adoRs

 

の部分を、ざっと次のように変更します。

 

    Dim intClmCnt As Integer    'テーブルの列数
    Dim lngRow As Long          'ワークシート上のデータ入力行
    Dim lngII As Long           'ループ用汎用カウンタ

    'フィールド名、データ型の取得
    intClmCnt = adoRs.Fields.Count
    For lngII = 0 To intClmCnt - 1
        'セルにフィールド名を代入
        Cells(1, lngII + 1).Value = adoRs.Fields(lngII).Name
        If adoRs.Fields(lngII).Type = 202 Then
            '文字列の列を文字列書式に
            Columns(lngII + 1).NumberFormatLocal = "@"
        End If
    Next lngII
   
    'データの取得
    lngRow = 2
    Do Until adoRs.EOF
        For lngII = 0 To intClmCnt - 1
            '余分な空白を除去しながらデータをセルに代入
            Cells(lngRow, lngII + 1).Value = Trim(adoRs.Fields(lngII).Value)
        Next lngII
        adoRs.MoveNext
        lngRow = lngRow + 1
    Loop

 

行数が急増しますが、こちらの方が、

 ・テーブルの列数の取得

 ・フィールド名の取得

 ・フィールドの種類の取得

 ・データの取得

等のレコードセットの扱い方が理解できるかと思います。

 

なお、ここではデータの取得を

    レコードセット.Fields(n).Value

という、フィールド番号で指定する方法でおこなっていますが、通常のケースでは

    レコードセット!フィールド名

という書き方の方が読みやすいコードになると思います。

 

一応、ファイルもおいておきます。

(ダウンロード・ご利用は、すべて自己責任にてお願いいたします)

■ExcelからSQLを発行して、PostgreSQLのデータを読み込む(PostgreSQL2.xls) 

 

PostgreSQL2.jpg

 

ExcelからSQLを発行して、PostgreSQLのデータを読み込むVBAプログラムです。

 

セルB1~B4にログイン情報、B6にSQL文を入力して[SQL実行]ボタンをクリック

すると、新しいシートにデータが読み込まれます。  

PostgreSQL1.jpg

 

接続にはADODBを利用しているので、PostgreSQLに接続するクライアントマシン

にはPgOleDBをインストールしておく必要があります。 また、プログラム作成時に

は参照設定で

  『OleDb 1.0 Type Library』

  『 Microsoft ActiveX Data Objects 2.8 Library』

にチェックを入れてください。

 

動作は最小限、コードはできるだけ単純にしています。 レコードセットから1行ず

つ代入することさえしていません。(レコードセットごと代入して済ませています)

コードはこれだけです。

 

Option Explicit

Sub subPgGetData()

    'コネクションの確立
    Dim adoCn As New ADODB.Connection
    On Error GoTo ErrLogin:
    With adoCn
        .Provider = "PostgreSQL OLE DB Provider"
        .Properties("Data Source") = Range("B1").Value
        .Properties("Location") = Range("B2").Value
        .Properties("User ID") = Range("B3").Value
        .Properties("Password") = Range("B4").Value
        .Open
    End With
    On Error GoTo 0
   
    'レコードセットの取得
    Dim adoRs As New ADODB.Recordset
    On Error GoTo ErrSql:
    adoRs.Open Range("B6").Value, adoCn, adOpenForwardOnly, adLockReadOnly
    On Error GoTo 0

    '新規BOOKのオープン
    Workbooks.Add
   
    'レコードセットをセルにコピー
    Cells.CopyFromRecordset adoRs

    'セル幅調整
    Cells.Columns.AutoFit

    'クローズ
    adoRs.Close: Set adoRs = Nothing
    adoCn.Close: Set adoCn = Nothing

Exit Sub

ErrLogin:
    MsgBox "ログインに失敗しました" & vbCrLf & Err.Number & vbCrLf & Err.Description
    Set adoCn = Nothing
    Exit Sub

ErrSql:
    MsgBox "SQLが実行できません" & vbCrLf & Err.Number & vbCrLf & Err.Description
    Set adoRs = Nothing
    adoCn.Close: Set adoCn = Nothing
    Exit Sub
   
End Sub

 

一応、ファイルもおいておきます。ダウンロードはこちらからどうぞ。

(ダウンロード・ご利用は、すべて自己責任にてお願いいたします)

■ExcelからSQLを発行して、PostgreSQLのデータを読み込む(PostgreSQL1.xls) 

 

(公開は終了しました)

 

 

参考までに、以前に作成したパスワードを作成するマクロを、ユーザー定義関数

にしてみました。

 

 =FumiMakePw(桁数,[使用文字列])

 

といった使い方をします。

 

[使用文字列]は省略可能で、省略すると英小文字のパスワードが作成されます。

 

下図のA列では、

 =FumiMakePw(10)

B列では、

 =FumiMakePw(10,"abcdefghijklmnopqrstuvwxyz0123456789")

という使い方をしています。

 

FncMakePw1.jpg

 

ただ、B列のような使い方をした場合、たまたま英字だけのパスワードになってしま

うこともあり得ます。 そこで、次のような関数も作成してみました。

 

 =FumiStirStr(文字列)

 

これは、文字列中の文字の順序をランダムに並べ替える関数です。

この関数を使って、C列では

 =FumiStirStr(FumiMakePw(5)&FumiMakePw(5,"0123456789"))

としています。

こうすることで、英字も数字も必ず5文字ずつからなるパスワードが作成できます。

 

そうそう、パスワードを作ったら、コピー&値貼り付けでFIXすることをを忘れずに。 ^^;)

 

 

ダウンロードは、こちらからどうぞ。(終了しました)

但し、ダウンロード・ご利用は、すべて自己責任にてお願いいたします

■パスワード作成ユーザー定義関数マクロのダウンロード(FncMakePw.xls) 

カテゴリ