|
こんなかな?
ActiveSheetの該当条件データ行を削除しますので
必ずBuckUpを取ってから試して下さい
Option Explicit
Public Sub RowsDelete()
'Listの列数
Const clngColumns As Long = 14
'日付の有る列位置(Listの左端からの列Offset値)
Const clngDate As Long = 0
'不良率の有る列位置(Listの左端からの列Offset値)
Const clngReject As Long = 13
Dim i As Long
Dim rngList As Range
Dim lngResult() As Long
Dim lngRows As Long
Dim lngCount As Long
Dim vntDate As Variant
Dim strProm As String
'Listの左上隅を基準とする(列見出しがある物とします)
Set rngList = ActiveSheet.Cells(1, "A")
With rngList
lngRows = .Offset(65536 - .Row).End(xlUp).Row - .Row
If lngRows <= 1 Then
strProm = "データが有りません"
GoTo Wayout
End If
'Listを日付降順の不良率降順に整列
.Offset(1).Resize(lngRows, clngColumns).Sort _
Key1:=.Offset(1, clngDate), Order1:=xlDescending, _
Key2:=.Offset(1, clngReject), Order2:=xlDescending, _
Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, SortMethod:=xlStroke
'日付を配列に取得
vntDate = .Offset(1, clngDate).Resize(lngRows).Value
End With
'整列Key用配列を確保
ReDim lngResult(1 To lngRows, 1 To 1)
lngCount = 1
For i = 2 To lngRows
'日付が違ったら、整列Key用配列に1を代入
If vntDate(i - 1, 1) = vntDate(i, 1) Then
lngResult(i, 1) = 1
Else
lngCount = lngCount + 1
End If
Next i
Application.ScreenUpdating = False
With rngList
.EntireColumn.Insert
.Offset(1, -1).Resize(lngRows).Value = lngResult
'Listを整列Key昇順に整列
.Offset(1, -1).Resize(lngRows, clngColumns + 1).Sort _
Key1:=.Offset(1, -1), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, SortMethod:=xlStroke
'必要外の行削除
.Offset(lngCount + 1).Resize(lngRows - lngCount).EntireRow.Delete
.Offset(1, -1).EntireColumn.Delete
End With
Application.ScreenUpdating = True
strProm = "処理が完了しました"
Wayout:
Set rngList = Nothing
Beep
MsgBox strProm
End Sub
|
|