VBAを使う場合
今回はご自身で作成されたコードの提示がないのでサンプルコードの提示は控えさせていただきますが、以下のような処理手順で実現できると思います。
①変数iRowに1をセットしてループ処理開始
-iRowループ開始-
②iRow行のA列を取得し、結合行数を調べる (⇒ Cells(iRow, 1).MergeArea.Rows.Count で結合行数が取得できます)
・現在年度の開始行:iRow
・現在年度の終了行:iRow + 結合行数 -1
・次年度の開始行 :iRow + 結合行数
③現在年度の終了行から名前(C列)の値を取得します。
④iRowに次年度の開始行をセットします。
⑤iRowが最終行(8行目)を超えるまでループ継続
--iRowループここまで--
⑥処理終了
VBAを使わない場合
今回の場合、B列に年度ごとの連番が用意されています。
この行を利用すればExcel関数とフィルター機能だけでも実現可能です。
①まず先頭に見出し列を追加します。(D列を最大行の計算用として使用します)
Year No Name Max
2013 1 山田
2 田中
3 佐藤
2014 1 山田
2015 1 山田
2017 1 田中
2 山田
②次に、D2セルに以下の計算式を記述します。
=IF(C2="","",IF(VALUE(B3)>1,"","V"))
これは
・名前(C2)が空欄ならD2は空欄
・次行の連番(B3)が1以下ならD2に"V"をセット、それ以外ならD2は空欄
という式です。
③D2セルをコピーしてD3~D9セルに貼り付けます。
計算結果は以下のようになります。
Year No Name Max
2013 1 山田
2 田中
3 佐藤 V
2014 1 山田 V
2015 1 山田 V
2017 1 田中
2 山田 V
④見出し列にカーソルを置き、オートフィルターします。
⑤D列のフィルターで"V"だけ抽出すると目的の結果が得られます。
Year No Name Max
2013 3 佐藤 V
2014 1 山田 V
2015 1 山田 V
2017 2 山田 V
参考になれば幸いです。