【サクラエディタ】マクロ:クリップボードの日付データを変換(yyyymmdd ←→ yyyy/mm/dd)

2023年3月24日金曜日

VBS サクラエディタ

日付を登録する作業で、ファイルやシステムによって日付表記が違う場合がよくありませんか?
例えば、2023年3月24日をあらわすとき、『2023/03/24』『2023/3/24』『20230324』『2023-03-24』『2023年3月24日』などいろいろ。
今回ご紹介するマクロは、コピーした年月日を『YYYYMMDD』から『YYYY/MM/DD』に直すときに作成したマクロです。
備忘録としての紹介ですが、もしどなたかの参考になれば幸いです。

◆この記事でわかること

  • クリップボードの内容を取得する方法
  • クリップボードの内容を変更する方法

■クリップボードの文字列の操作

◆日付区切りなし YYYYMMDD を YYYY/MM/DD に変換

YYYYMMDDをYYYY/MM/DDに変換するマクロのサンプルです。
'========================
' クリップボード内のyyyymmddをyyyy/mm/ddに変換。
'========================
Dim s

s = GetClipboard(0)    'クリップボードの内容を取得
s = Replace(s, vbCrLf, "")    '改行除去
s = Replace(s, vbLf, "")    '改行除去
s = Replace(s, vbCr, "")    '改行除去
s = Replace(s, vbTab, "")    '改行除去
s = Trim(s)    '空白除去

ymd = split(s, "/")
if UBound(ymd) = 2 and Len(s) = 10 then    '3分割(yyyy mm ss) & 10文字ならYYYY/MM/DDとみなす
	SetClipboard 0, ymd(0) + ymd(1) + ymd(2)    'クリップボードにセット
end if
'Paste    '結果を確認したいならペーストで張り付け

'結果: 2023/03/24 の場合は 20230324


マクロを実行すると、事前にコピーした『20230324』を『2023/03/24』に変換します。

◆日付区切りあり YYYY/MM/DD を YYYYMMDD に変換

先ほどの反対、YYYY/MM/DDをYYYYMMDDに変換するマクロのサンプルです。
'===============================
' クリップボード内のyyyymmddをyyyy/mm/ddに変更
'===============================
Dim s

s = GetClipboard(0)    'クリップボードの内容を取得
s = Replace(s, vbCrLf, "")    '改行除去
s = Replace(s, vbLf, "")    '改行除去
s = Replace(s, vbCr, "")    '改行除去
s = Replace(s, vbTab, "")    'タブ除去
s = Trim(s)    '空白除去

yyyy = left(s,4)
mm = mid(s,5,2)
dd = right(s,2)
SetClipboard 0, yyyy + "/" + mm + "/" + dd    'クリップボードにセット
'Paste    '結果を確認したいならペーストで貼り付け

'結果: 20230324 の場合は 2023/03/24


マクロを実行すると、事前にコピーした『2023/03/24』を『20230324』に変換します。

◆日付区切りのあり・なしを切り替える

2つの内容を合わせた、YYYYMMDDをYYYY/MM/DDに変換するマクロのサンプルです。

''========================
' クリップボード内のyyyy/mm/ddとyyyymmddをスイッチする。
'========================
Dim s

s = GetClipboard(0)    'クリップボードの内容を取得
s = Replace(s, vbCrLf, "")    '改行除去
s = Replace(s, vbLf, "")    '改行除去
s = Replace(s, vbCr, "")    '改行除去
s = Replace(s, vbTab, "")    'タブ除去
s = Trim(s)    '空白除去

ymd = split(s, "/")
if UBound(ymd) = 2 and Len(s) = 10 then    '3分割(yyyy mm ss) & 10文字ならYYYY/MM/DDとみなす
	SetClipboard 0, ymd(0) + ymd(1) + ymd(2)    'クリップボードにセット
	
elseif UBound(ymd) = 0 and len(s) = 8 then    '分割できず & 8文字ならYYYYMMDDとみなす
	SetClipboard 0, left(ymd(0),4) + "/" + mid(ymd(0),5,2) + "/" + right(ymd(0),2)    'クリップボードにセット
	
end if

マクロを実行すると、事前にコピーした『2023/03/24』は『20230324』になり、『20230324』は『2023/03/24』になります。

とても地味な機能ですが、大量に日付を変更していかないといけない場合は効果的です。
私の場合が実際使った場面は、社内システムAがYYYYMMDD表記で社内システムBの日付表示YYYY/MM/DDでした。
社内システムAからBへ内容をせっせと移していかないといけない作業が発生した際、日付の箇所だけコピペで済まなかった際に活躍しました。



補足説明

VBSの関数

関数名 関数の説明 引数 引数の説明 戻り値 戻り値の説明 使用例 実行結果
Trim 文字列の両端からスペースを削除する 文字列 スペースを削除する文字列 文字列 スペースを削除した文字列を返す str = " Hello World! "
result = Trim(str)
result: "Hello World!"
Left 文字列の左端から指定した数の文字を抽出する 文字列, 文字数 抽出する文字列と文字数 文字列 抽出した文字列を返す str = "Hello World!"
result = Left(str, 5)
result: "Hello"
Mid 文字列の指定した位置から指定した数の文字を抽出する 文字列, 開始位置, [文字数] 抽出する文字列、開始位置、文字数(省略可能) 文字列 抽出した文字列を返す str = "Hello World!"
result1 = Mid(str, 7)
result2 = Mid(str, 7, 5)
result1: "World!"
result2: "World"

サクラエディタ専用関数

関数名 関数の説明 引数 引数の説明 戻り値 戻り値の説明
GetClipboard クリップボードの文字列を取得します。 文字列 予約値。0を指定 文字列 クリップボード文字列
SetClipboard クリップボードに文字列を設定します。 数値(int型),文字列 1.0x00 通常コピー 0x01 矩形選択 0x02 ラインモード
2.設定する文字列
数値 0固定
Paste ペーストします。(Ctrl + V と同じ) - - - -

QooQ