iT邦幫忙

0

請問該怎麼寫-VBA-相同類的資料,依條件再去除

  • 分享至 

  • xImage

如下圖
我想把紅色的資料依條件做刪除,整理完後會變成黃色的資料那樣。
條件是,只要針對類別1來做處理,相同姓名的如果結束時間不超過08:03後的筆數(包含08:03)。就要刪除前二筆資料。第3筆後都要保留。如果是過08:03的,全數保留。
想用vba來完成,請問該怎麼實現呢?
https://ithelp.ithome.com.tw/upload/images/20220519/20145896tM3U0KM88Y.jpg

blanksoul12 iT邦研究生 5 級 ‧ 2022-05-19 16:52:46 檢舉
BBB 的18及19號的也留? 因為超過三筆?
blanksoul12 iT邦研究生 5 級 ‧ 2022-05-19 17:21:17 檢舉
7號的 EEE 算是第三筆還是第二筆?
BBB 的類別2算是第幾筆?
what0208 iT邦新手 5 級 ‧ 2022-05-19 17:42:34 檢舉
BBB 的18及19號的也留? 因為超過三筆?--->因為已經刪除5及6號的,一個人最多二次遲到的優惠。
7號的 EEE 算是第三筆還是第二筆?--->我用錯了,EEE應該是保留7號的資料才對,不是4號。
BBB 的類別2算是第幾筆?--->類別2的完全不用考慮絛件,但要保留資料。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
blanksoul12
iT邦研究生 5 級 ‧ 2022-05-19 17:47:54
最佳解答

自己改改

Sub cfz()

Set d = CreateObject("Scripting.Dictionary")

Arr = Range("a2:c" & [a1048576].End(xlUp).Row)
For i = 1 To UBound(Arr)
    d(Arr(i, 1)) = d(Arr(i, 1)) + 1
Next
k = d.keys
t = d.items

For Each info In k
    x = 1
    For i = 2 To [a1048576].End(xlUp).Row
        If Cells(i, "a") = info And Cells(i, "b") = 1 Then
            If x < 3 And TimeValue(Cells(i, "c")) > "8:03:00" Then
                [e1048576].End(xlUp).Offset(1, 0).Resize(1, 3) = Application.Index(Arr, i - 1)
            ElseIf TimeValue(Cells(i, "c")) > "8:03:00" Then
                [e1048576].End(xlUp).Offset(1, 0).Resize(1, 3) = Application.Index(Arr, i - 1)
            ElseIf x > 2 Then
                [e1048576].End(xlUp).Offset(1, 0).Resize(1, 3) = Application.Index(Arr, i - 1)
            Else
                x = x + 1
            End If
        ElseIf Cells(i, "a") = info And Cells(i, "b") = 2 Then
            [e1048576].End(xlUp).Offset(1, 0).Resize(1, 3) = Application.Index(Arr, i - 1)
        End If
        DoEvents
    Next
Next

End Sub
what0208 iT邦新手 5 級 ‧ 2022-05-20 09:00:38 檢舉

請問= info是指什麼?

what0208 iT邦新手 5 級 ‧ 2022-05-20 09:21:16 檢舉

你好,我先用小段來試判,但時間好像是無法判讀的。
If TimeValue(Cells(i, "C")) = "08:05:00 AM" Then
[e1048576].End(xlUp).Offset(1, 0).Resize(1, 3) = 1
End If

what0208 iT邦新手 5 級 ‧ 2022-05-23 08:52:06 檢舉

改成取字串來判斷,就可以用了,謝謝你。

0
海綿寶寶
iT邦大神 1 級 ‧ 2022-05-19 17:00:55

寫好了

原始資料
https://ithelp.ithome.com.tw/upload/images/20220520/20001787CuX1lLkVRa.png

執行 VBA
https://ithelp.ithome.com.tw/upload/images/20220520/200017877UnoduWSlc.png

執行結果
https://ithelp.ithome.com.tw/upload/images/20220520/20001787AzqSGrgLgI.png

看更多先前的回應...收起先前的回應...
what0208 iT邦新手 5 級 ‧ 2022-05-19 17:44:14 檢舉

是打卡資料,因為每個人有二次的遲到(08:03前)機會。所以要清除前二次的遲到。

我還是覺得怪怪的
如果用刪除的方式
那麼要算有上班還是沒上班 (BB 05,06 兩天)

沒關係
不用回覆我

what0208 iT邦新手 5 級 ‧ 2022-05-20 09:01:47 檢舉

算有上班,但是要分析報表用的。

VBA 寫好了
請看站內簡訊(右上角那個圖示)

what0208 iT邦新手 5 級 ‧ 2022-05-23 08:51:05 檢舉

謝謝你們,我整調了一下blanksoul12提供的,好像可以用了。

我要發表回答

立即登入回答