公開日:4/1/2023 更新日:4/2/2023
本記事のために、以下のようなサンプルデータを用意しました。
Postgresを使ってますが、DBはなんでも良いです。
複数レコードの情報を抽出したりするのに、wherer 句の中で in 句を使用することがあると思います。
select id, name, age
from test.users
where name in ('tanaka','yabe','motoki','matsui','sato','takeda','otani','iwakuma','fukaya')
;
その際に、値をシングルクオーテーションで囲みカンマで区切ったリストが必要になります。
抽出対象が増えるとリストを作るだけでも非常に面倒くさいです!
なので、私は以下の入力に対してマクロを実行すると一発でリストを作成してくれるマクロを用意しました。
入力値
tanaka
yabe
motoki
matsui
sato
takeda
otani
iwakuma
fukaya
出力値
('tanaka','yabe','motoki','matsui','sato','takeda','otani','iwakuma','fukaya')
※ ソースコードは後述で共有
以下のソースをコピーして利用下さい。ファイル名は、sqlListCreater.vbs で保存してローカルの適当な場所に配置して下さい。
sqlListCreater.vbs
Option Explicit
'----------------------------------------------------------
'定数
'----------------------------------------------------------
Dim startStr
startStr = "('"
Dim jointStr
jointStr = "','"
Dim endStr
endStr = "')"
'----------------------------------------------------------
'実行
'----------------------------------------------------------
Main
'----------------------------------------------------------
'主処理
'----------------------------------------------------------
Private Sub Main()
'選択範囲文字列
Dim selectedStr
selectedStr = Editor.GetSelectedString(0)
'パラメータを1行ごとに処理
Dim parameterLines
parameterLines = Split(selectedStr,vbCrLf)
Dim resultStr
resultStr = ""
Dim i
For i = 0 To Ubound(ParameterLines)
'各パラメータ行
Dim parameterLine
parameterLine = Trim(Replace(parameterLines(i),vbTab," "))
'パラメータが空行で無ければ処理
If parameterLine <> "" then
if i = 0 then
resultStr = parameterLine
Else
'文字列を結合
resultStr = resultStr & jointStr & parameterLine
End if
End if
Next
'文字列を連結
resultStr = startStr & resultStr & endStr
'エディタへ書き込み
Editor.InsText resultStr
'エディタの1行目に移動
Editor.Jump 1
End Sub
先ほどローカルに配置したスクリプトを簡単に呼び出せるようにサクラエディタにマクロを設定します。
設定(O) > 共通設定(C) > マクロ と進み マクロ一覧からローカルを参照して下さい。
名前(N)= sqlListCreater
File = sqlListCreater.vbs
を入力して 右に存在する 設定(A)を押下するとマクロに登録されます。
非常に簡単にマクロを作って設定することが出来ました。
アイデアさえあれば、いろいろ作業効率化可能なマクロが作れそうですね。