Sub FilterByAllowedNames()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim allowedList As Object
Dim nama As String
' === Daftar nama yang ingin dipertahankan ===
' (Tambahkan / edit di sini sesuai kebutuhan)
Dim allowedArray As Variant
allowedArray = Array( _
"CCCM-AWDA-NEW-KRANGGAN", "CCCM-wa-non_official-succesfee", "CCCM-fif-c0", "CCCM-FIF-WA", "CCCM-FIF-filtering-WA", _
"CCCM-Data-warehouse", "CCCM-Fif-teleaudit", "CCCM-ovrs-kranggan", "CCCM-MTF_autodial", _
"CCCM-Roleplay", "CCCM-ovrs-project", "CCCM-Ovrs-Semarang", "Fifauto-kr", _
"CCCM-Bop-warehouse", "CCCM-Fif-PV", "CCCM-Webcam-pkp", "CCCM-Pingcall_Success-Fee", _
"HO-Teleinterview", "CCCM-Autodial-C1", "CCCM-Maybank", "CCCM-Myrep_API", "CCCM-MyRep_DB", _
"CCCM-Myrep_pabx", "CCCM-MyRep_APPS", "CCCM-multicampaign", "CCCM-jogja2", _
"CCCM-autodial-semarang2", "CCCM-autodial-semarang", "CCCM-autodial-jogja1", _
"CCCM-Symmetric_DS", "CCCM-Openvpn1", "CCCM-openvpn-router", "CCCM-Fif-Dashboard", _
"CCCM-Autodial-smg3", "CCCM-MUF", "CCCM-wa-official-muf", "CCCM-bcaf-auto", _
"CCCM-FIF-WA-OFFICIAL", "CCCM-mtf-balnol", "CCCM-apps_mtf-cs-onebox", "CCCM-Mtf-cs-inbound", _
"CCCM-BTPN-fileserver", "CCCM-BTPN-app-mobile", "CCCM-wa-non_official-fif-tele", "CCCM-BTPN-app-web", _
"CCCM-BTPN-reporting", "HO-BS-NSP", "CCCM-Danastra", "CCCM-reminder-app1", _
"CCCM-fif-reminder-db_pbx", "CCCM-fif-telesales-autodial", "CCCM-adira", "CCCM-btpn-icoll", _
"CCCM-wa-astrapay", "CCCM-wa-bfi", "CCCM-Amartha", "CCCM-fif-teleremedial-waofficial", _
"CCCM-MulticlientV3", "CCCM-btpn-scheduller", "CCCM-bcaf-va", "CCCM-reminder-app2", _
"CCCM-Openvpn1", "CCCM-Openvpn-YGK", "CCCM-Openvpn-SMG2", "CCCM-Reminder-Autodial", "CCCM-LKS", _
"CCCM-PPTP-cloud-mikrotik", "CCCM-Tiketing", "CCCM-wa-call-fif-c2c-app3-smg", "CCCM-wa-call-fif-c2c-app2-smg", _
"CCCM-wa-call-fif-c2c-app1-smg", "CCCM-wa-call-fif-c2c-jgj2", "CCCM-wa-call-fif-c2c-jgj1", "CCCM-wa-call-fif-c2c-kr", _
"CCCM-wa-fif-pv", "CCCM-Tiketing", "CCCM-fifdc-bali-app", "CCCM-fifdc-bali-asterisk" _
)
' Buat dictionary untuk pengecekan cepat
Set allowedList = CreateObject("Scripting.Dictionary")
For i = LBound(allowedArray) To UBound(allowedArray)
allowedList(Trim(LCase(allowedArray(i)))) = True
Next i
Set ws = ActiveSheet
Const colS As Long = 19 ' Kolom S
lastRow = ws.Cells(ws.Rows.Count, colS).End(xlUp).Row
' Loop dari bawah agar aman saat menghapus baris
For i = lastRow To 2 Step -1
nama = Trim(LCase(ws.Cells(i, colS).Value))
' Jika nama tidak ada di daftar ? hapus baris
If Not allowedList.exists(nama) Then
ws.Rows(i).Delete
End If
Next i
MsgBox "Selesai! Hanya data yang ada dalam daftar yang tersisa.", vbInformation
End Sub