| 
    
     |  | 'では、こんなのでは? '先頭行は列見出しとします
 
 Option Explicit
 
 Public Sub Sample_2()
 
 'Listのデータ列数(B列)
 Const clngColumns As Long = 1
 'Keyと成る列位置(基準セルからの列Offsetで指定:B列 = 0)
 Const clngKey As Long = 0
 'Keyと成る文字列
 Const cstrKey As String = "orange"
 
 Dim i As Long
 Dim lngRows As Long
 Dim lngCount As Long
 Dim rngList As Range
 Dim lngNumb() As Long
 Dim vntKeys() As Variant
 Dim strProm As String
 
 Dim sngTime1 As Single
 Dim sngTime2 As Single
 
 sngTime2 = Timer
 
 'Listの先頭セル位置を基準とする(先頭列の列見出しのセル位置)
 Set rngList = ActiveSheet.Range("B1")
 
 'Listに対しての前処理
 With rngList
 '行数の取得
 lngRows = .Offset(Rows.Count - .Row, clngKey).End(xlUp).Row - .Row
 If lngRows <= 0 Then
 strProm = "データが有りません"
 GoTo Wayout
 End If
 'L列の値を配列として取得
 vntKeys = .Offset(1, clngKey).Resize(lngRows + 1).Value
 End With
 
 '削除用整列Keyを格納する配列を確保
 ReDim lngNumb(1 To lngRows, 1 To 1)
 
 'List最終行まで繰り返し
 For i = 1 To lngRows
 'L列の値が"Kg"でないなら
 If StrComp(vntKeys(i, 1), cstrKey, vbTextCompare) <> 0 Then
 'R列の値をEmptyに(削除行)
 lngNumb(i, 1) = 1
 '削除行をカウントする
 lngCount = lngCount + 1
 End If
 Next i
 
 '画面更新を停止
 Application.ScreenUpdating = False
 
 With rngList
 '削除行が有るなら
 If lngCount > 0 Then
 If MsgBox(lngCount & "件が該当します、削除しますか?", _
 vbYesNo + vbInformation) = vbYes Then
 'List最終列の後ろ列(R列)に削除Flagを出力
 .Offset(1, clngColumns).Resize(lngRows).Value = lngNumb
 'Listを削除Flag昇順、復帰Key昇順で整列
 DataSort .Offset(1).Resize(lngRows, clngColumns + 1), .Offset(1, clngColumns)
 '不要データを削除
 .Offset(lngRows - lngCount + 1).Resize(lngCount).EntireRow.Delete
 '復帰用Keyと削除Flagを消去
 .Offset(, clngColumns).EntireColumn.ClearContents
 strProm = lngCount & "件を削除しました"
 Else
 strProm = "削除を中止しました"
 End If
 Else
 strProm = "該当行は在りません"
 End If
 End With
 
 Wayout:
 
 '画面更新を再開
 Application.ScreenUpdating = True
 
 Set rngList = Nothing
 
 sngTime1 = Timer
 
 MsgBox strProm & vbLf & (sngTime1 - sngTime2), vbInformation
 
 End Sub
 
 Private Sub DataSort(rngScope As Range, _
 rngKey As Range, _
 Optional lngSortOrder As Long = xlAscending, _
 Optional lngOrientation As Long = xlTopToBottom)
 
 rngScope.Sort _
 Key1:=rngKey, Order1:=lngSortOrder, _
 Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
 Orientation:=lngOrientation, SortMethod:=xlStroke
 
 End Sub
 
 |  |