SE必見!エクセルデータ比較マクロ2

前回紹介したデータ比較マクロをさらに進化させ、新旧データを並び替えしながら比較するマクロを作成しました。

最初に作成した単純な行比較マクロ

マクロ実行時の前提条件

[行比較マクロを行う前提条件]
 ①偶数行であること
 ②式ではなく値の比較を行う
 ③比較開始行の先頭のセルを選択
 ④比較したいレコードを上下に配置
  4行比較する場合は、更新前4行、更新後4行の順に配置
 ⑤比較開始列がどちらもnullの場合は正しく動作しない
 ⑥比較終了列がどちらもnullの場合は比較対象にならない

実行マクロ

前回作成したItemCheckを呼び出ししますので、事前に作成します。

Sub RowIns()
    '
    ' 行比較(並び替え)
    '
    Dim i As Integer
    Dim j As Integer
    Dim SttRow As Integer
    Dim SttCol As Integer
    Dim EndRow As Integer
    Dim RowHalfCnt As Integer
    Dim StatusCnt As Integer
    
    '画面更新の非表示
    Application.ScreenUpdating = False

    SttRow = Selection.Row
    SttCol = Selection.Column
    Selection.End(xlDown).Select
    EndRow = Selection.Row
    RowHalfCnt = (EndRow - SttRow + 1) / 2
    i = 0
    
    '実行前、実行後のデータを間に差し込む
    Do Until i = RowHalfCnt - 1
        '実行ステータスを表示
        Application.StatusBar = "実行中..." & Left(String(Int(i / (RowHalfCnt - 1) * 5), "■") & String(10, "□"), 10)
        Rows(SttRow + RowHalfCnt + i & ":" & SttRow + RowHalfCnt + i).Select
        Selection.Cut
        Rows(SttRow + i * 2 + 1 & ":" & SttRow + i * 2 + 1).Select
        Selection.Insert Shift:=xlDown
        
        i = i + 1
    Loop
    
    'ステータスの状態カウントを保持
    If RowHalfCnt - 1 = 0 Then
        StatusCnt = StatusCnt + 5
    Else
        StatusCnt = StatusCnt + Int(i / (RowHalfCnt - 1) * 5)
    End If
    
    Cells(SttRow, SttCol).Select
    
    i = 0
    j = 0
    '明細終了までデータ比較処理を実行
    Do Until i = RowHalfCnt
        '実行ステータスを表示
        Application.StatusBar = "実行中..." & Left(String(StatusCnt, "■") & String(Int(i / (RowHalfCnt) * 5), "■") & String(10, "□"), 10)
        j = j + 2
        Cells(SttRow + j + i, SttCol).Select
        'チェック処理
        Call ItemCheck("1")
    
        i = i + 1
    Loop
    
    Cells(SttRow, SttCol).Select
    
    '画面更新の非表示を解除
    Application.ScreenUpdating = True
    
    'ステータスバーの解放
    Application.StatusBar = False
End Sub

実行例

①比較開始行の先頭を選択
②1行目と3行目、2行目と4行目が比較され、行が入れ替わる

さいごに

最初に作成したItemCheckをうまく利用して、行の連続比較機能を作成することができました。
データの更新前後の状態を一発で視覚的に確認できるようになったため、作業効率が格段にアップしました。ステータスバーを追加したことで比較データ数が増えた場合に、進捗が確認できるようになりました。最初作成したステータスバーなしの頃は、いつ処理が終わるのかが全くわからなかったです。。今後の改善点としては、途中で処理を停止する機能の追加を考えています。

タイトルとURLをコピーしました