以前に作ったものを、弊社の某お客様用に作り直したものです。
使用文字列を1群、2群、3群に分け、それぞれから最低何文字利用するか指定
できるようにしました。
ダウンロードは、こちらからどうぞ。
■パスワード自動作成マクロのダウンロード (終了しました)
以前に作ったものを、弊社の某お客様用に作り直したものです。
使用文字列を1群、2群、3群に分け、それぞれから最低何文字利用するか指定
できるようにしました。
ダウンロードは、こちらからどうぞ。
■パスワード自動作成マクロのダウンロード (終了しました)
レコードセットのデータをセルにコピーするには
『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)
ExcelからSQLを発行して、PostgreSQLのデータを読み込むVBAプログラムです。
セルB1~B4にログイン情報、B6にSQL文を入力して[SQL実行]ボタンをクリック
すると、新しいシートにデータが読み込まれます。
接続には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
一応、ファイルもおいておきます。ダウンロードはこちらからどうぞ。
(ダウンロード・ご利用は、すべて自己責任にてお願いいたします)
(公開は終了しました)
参考までに、以前に作成したパスワードを作成するマクロを、ユーザー定義関数
にしてみました。
=FumiMakePw(桁数,[使用文字列])
といった使い方をします。
[使用文字列]は省略可能で、省略すると英小文字のパスワードが作成されます。
下図のA列では、
=FumiMakePw(10)
B列では、
=FumiMakePw(10,"abcdefghijklmnopqrstuvwxyz0123456789")
という使い方をしています。
ただ、B列のような使い方をした場合、たまたま英字だけのパスワードになってしま
うこともあり得ます。 そこで、次のような関数も作成してみました。
=FumiStirStr(文字列)
これは、文字列中の文字の順序をランダムに並べ替える関数です。
この関数を使って、C列では
=FumiStirStr(FumiMakePw(5)&FumiMakePw(5,"0123456789"))
としています。
こうすることで、英字も数字も必ず5文字ずつからなるパスワードが作成できます。
そうそう、パスワードを作ったら、コピー&値貼り付けでFIXすることをを忘れずに。 ^^;)
ダウンロードは、こちらからどうぞ。(終了しました)
但し、ダウンロード・ご利用は、すべて自己責任にてお願いいたします。