LoginSignup
0
0

休日に入った予定を平日にシフトするマクロ

Posted at

VBAマクロの詳細解説 休日に入った予定を平日にシフトする

この記事では、Excel VBAを使用して特定の条件に基づいてセルの値をシフトするマクロ ShiftValueForHolidays のコードを詳しく解説します。このマクロは、特定の日(休日など)に予定されていたタスクやイベントを翌日にシフトするのに便利です。それでは、各部分の機能と役割を一つ一つ見ていきましょう。

マクロの概要

このマクロは、アクティブシートの特定の列をチェックし、条件に合致する場合、その行のデータを次の行にシフトします。主に以下の処理を行います:

  1. アクティブシートの取得
  2. 最終行と最終列の特定
  3. 条件に基づくデータのシフト処理
  4. エラーハンドリング

コードの詳細解説

変数の定義
Dim ws As Worksheet
Dim lastRow As Long, lastCol As Long
Dim i As Long, j As Long
  • ws: 処理を行うワークシートオブジェクト。
  • lastRow, lastCol: データが存在する範囲の最終行と最終列。
  • i, j: ループ処理で使用するカウンタ変数。
ワークシートの設定
Set ws = ActiveSheet

アクティブなワークシートを ws に設定します。

最終行と列の取得
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
lastCol = 32
  • lastRow: 列Aの最後の行を取得します。xlUp は下から上への検索を示し、空白ではない最後のセルを見つけます。
  • lastCol: 32列目までのデータを処理対象とします(これは月日を示す場合が多いです)。
条件に基づくデータのシフト
For i = ActiveCell.Row() To lastRow
    If ws.Cells(i, 3).Value = 2 Or ws.Cells(i, 3).Value = 3 Then
        For j = ActiveCell.Column() To lastCol
            If Not IsEmpty(ws.Cells(i, j).Value) Then
                colLastRow = ws.Cells(ws.Rows.Count, j).End(xlUp).Row
                If colLastRow > i Then
                    ws.Range(ws.Cells(i, j), ws.Cells(colLastRow, j)).Copy
                    ws.Cells(i + 1, j).PasteSpecial Paste:=xlPasteValues
                    ws.Cells(i, j).ClearContents
                    Application.CutCopyMode = False
                End If
            End If
        Next j
    End If
    Application.StatusBar = "Processing row: " & i & " of " & lastRow
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Next i
  • このループは、アクティブセルの行から最後の行まで繰り返されます。
  • 第3列の値が2または3の場合(休日or祝日)、その行のデータを次の行にシフトします。
  • IsEmpty 関数を使用して空白でないセルを確認し、データをコピーして1行下にペーストし、元のセルの内容をクリアします。
エラーハンドリング
ErrorHandler:
    MsgBox "Error " & Err.Number & ": " & Err.Description & " in " & VBE.ActiveCodePane.CodeModule

.Name, vbCritical
    Application.StatusBar = False

エラーが発生した場合、エラー番号と説明をメッセージボックスで表示し、ステータスバーの表示をリセットします。

まとめ

このマクロは、特定の条件に基づいてExcelのセルの値を効率的にシフトさせることができる便利なツールです。カスタマイズによってさまざまなシナリオに適用可能で、日々の作業を自動化するための基盤を提供します。エラーハンドリングもしっかりと行い、予期せぬ問題にも対処できるようにしています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0