部署名が変わるごとに空白行を挿入するには?

Question 75.2 Previous Next
先日はありがとうございました。 「既存の名簿から社員だけを抽出して新しい名簿を作成するには?」のページでご回答いただきました件、あんなに簡単に出来るとは思いませんでした。よく理解できましたので、使わせていただいています。       在籍名簿シート

ところで、それと同じ名簿(右図)の「所属Ⅲ」で部署ごとに並び替えて、部署の名前が変わるごとに1行ずつ行を追加するというマクロを作成しているのですが、後半部分のマクロをどうすればよいのか、どうしても 分かりません。

大変申し訳ありませんが、教えていただけないでしょうか。
どうか、よろしくお願いします。
Answer   Copyright (C) 2005.8.30 永井善王
これについては、類似例として「 データの間に一行ずつ空白行を挿入するには? 」のページがありますから、まず、それを理解していただきたいので、そのページで紹介されているマクロを転載し、分かりやすくするために下記のとおり日本語表記に変えました。
Sub test()
Dim 行 As Long
Const 列 = 1                                    '最終行を判断するための列

    For 行 = Cells(Rows.Count, 列).End(xlUp).Row To 2 Step -1
        Rows(行).Insert
    Next 行
End Sub
このマクロと本件との相違点は、無条件で挿入するか、部署名が変わったら挿入するかですね。
以下に、修正したマクロをお示しし、各行のコードを解説しておきましたので、各コードの意味と、どこをどのように修正したのかをコツコツと理解してください。
Sub test()
10  Dim 行 As Long
20  Const 列 = 7                                '所属Ⅲの列

30  For 行 = Cells(Rows.Count, 列).End(xlUp).Row To 3 Step -1
40      If Cells(行, 列) <> Cells(行 - 1, 列) Then
50          Rows(行).Insert
60      End If
70  Next 行
End Sub
10行目 … 行番号を示すためのカウンタ変数です。
20行目 … 所属Ⅲの列名 G の数字表記で、最終行の判断もこの列で行います。 この列に空白セルがある
     と、期待どおり動作しない場合があります。
30行目 … 行カウンタの初期値、最終値、加算する値を指定して、Next文までのステートメントを繰り返
     し処理します。
40行目 … もし、G列の行カウンタが示す行のセルの値と、その1行上のセルの値が異なる場合は、次のコ
     ード(50行目)から End If節(60行目)までのコードを実行します。
     そうでない場合は、End If節の次のコード(70行目)へ進みます。
50行目 … 行カウンタが示す位置に1行挿入します。
60行目 … If文の終わりを示す End If節
     です。
70行目 … For...Next文の終わりを示すNext
     文で単に
Next と記述することも
     出来ます。

実際にマクロを実行してみると理解しやすいかもしれませんから、試してみて、結果をご連絡ください。

 

Excel VBA Macro