
Excel VBAで固定残業代の時間を隣の列に表示する方法
この説明は、ChatGPTで作成しています。
今回は、Excel VBAを使って、選択したセルの中から「h」(時間を表す記号)が含まれるテキストを探し、そのテキストを隣のセルに表示する方法をご紹介します。この方法を使えば、固定残業代の時間を示す「1h」や「12h」のようなテキストを自動的に抽出して隣のセルにコピーすることができます。
プロシージャの概要
以下のVBAコードを実行することで、選択したセルの内容をチェックし、時間を示すテキストを隣のセルに表示することができます。
Sub 固定残業代の時間だけを隣列にだすよ()
Application.ScreenUpdating = False
Dim reg As Object
Set reg = CreateObject("VBScript.RegExp") 'オブジェクト作成
Dim myRng As Range
Dim txt As String
Dim match As Object
Dim i As Long
With reg
.Pattern = "\d{1,2}h"
.IgnoreCase = True
.Global = True
End With
On Error Resume Next
For Each myRng In Selection
txt = myRng.Value
Set match = reg.Execute(txt)
If match.Count > 0 Then
myRng.Offset(0, 1).Value = match(0).Value ' マッチしたテキストを隣の列に出力
End If
Next myRng
Application.ScreenUpdating = True
End Sub
仕組みの説明
画面の更新を停止:
Application.ScreenUpdating = False
この部分は、処理中の画面のチラツキを防ぐために画面の更新を一時停止します。
2.正規表現オブジェクトの作成:
Dim reg As Object
Set reg = CreateObject("VBScript.RegExp")
ここでは、正規表現を使うためのオブジェクトを作成しています。正規表現とは、特定のパターンに一致する文字列を検索するための方法です。
3.正規表現のパターン設定:
With reg
.Pattern = "\d{1,2}h"
.IgnoreCase = True
.Global = True
End With
ここでは、「1桁または2桁の数字の後に 'h' が続く」パターンを設定しています。たとえば、「1h」や「12h」がこれに該当します。
4.エラー処理の設定:
On Error Resume Next
万が一エラーが発生しても処理を続けるための設定です。
5.セルの内容を確認して隣のセルに出力:
For Each myRng In Selection
txt = myRng.Value
Set match = reg.Execute(txt)
If match.Count > 0 Then
myRng.Offset(0, 1).Value = match(0).Value
End If
Next myRng
選択したセルのそれぞれに対して、セルの内容(txt)から正規表現に一致するテキストを探します。そして、一致したテキストがあれば、それを隣のセルにコピーします。
6.画面の更新を再開:
Application.ScreenUpdating = True
最後に、画面の更新を再開します。
Excel VBAを使えば、普段の業務を自動化して効率化することができます。今回の例のように、特定のパターンを見つけて別のセルにコピーする処理も簡単に行うことができます。ぜひ挑戦してみてください。
参考リンク
Excel VBA リファレンス | Microsoft Learn
この記事のYouTube動画
キーワード
#excel #できること #vba #固定残業代 #時間抽出 #隣のセル #テキスト検索 #正規表現 #セル操作 #データ処理 #自動化 #マクロ #VBA入門 #オブジェクト作成 #正規表現パターン #選択範囲 #エラー処理 #文字列操作 #画面更新 #オフセット