新規ブックの標準モジュールに
'============================================================
Option Explicit
'======================================================================
Sub main()
Dim rr As Range
Call サンプル作成
MsgBox "これから処理します"
With Range("b2", Cells(Rows.Count, "b").End(xlUp))
If .Row > 1 Then
With .Offset(0, 3)
.Formula = "=if(COUNTIF($B$2:B2,B2)<countif($b$2:$b$" _
& .Rows.Count + 1 & ",b2),1,"""")"
On Error Resume Next
Set rr = .SpecialCells(xlCellTypeFormulas, xlNumbers)
.Formula = ""
If Err.Number = 0 Then
rr.EntireRow.Delete
End If
End With
End If
End With
End Sub
'======================================================================
Sub main2()
Dim rr As Range
Call サンプル作成
MsgBox "これから処理します"
With Range("b2", Cells(Rows.Count, "b").End(xlUp))
If .Row > 1 Then
With .Offset(0, 3)
.Formula = "=if(and(row()<>" & .Rows.Count + 1 & ",b2=b3),1,"""")"
On Error Resume Next
Set rr = .SpecialCells(xlCellTypeFormulas, xlNumbers)
.Formula = ""
If Err.Number = 0 Then
rr.EntireRow.Delete
End If
End With
End If
End With
End Sub
'======================================================================
Sub サンプル作成()
With ActiveSheet.Range("a1:b21")
.Formula = Array("=row()-1", _
"=choose(int(rand()*5)+1,""国語""," & _
"""算数"",""理科"",""社会"",""英語"")")
.Value = .Value
.Range("a1:b1").Value = Array("番号", "科目")
End With
End Sub
mainとmain2の二つを用意しました。
mainは、同一科目の番号が大きいものを残します。
main2は、連続している同一科目の番号が大きいものを残します。
試してみてください。
お礼
回答ありがとうございます。 いつもこの手のパターンだとfor文などの回数文繰り返す処理を 考えてしまいます。 試しにやってみて結果を報告します。