【衍生題】請問一下EXCEL 函式的檢查重項問題,謝謝。

【衍生題】請問一下EXCEL函式的檢查重項問題,謝謝。請參考前題:QID=1515050403022SUBJECT:請問一下EXCEL 函式的檢查重項問題,謝謝。【需求】重項E欄都是>1,單項都是1,只要保留1的品項,其他都刪除,項次重新計算。請設一般的按鈕。請在<測試地區內測試>。如有不夠詳盡於討論時補充之,感恩。http://www.funp.net/28546200%E9%87%8D%E9%A0%85%E6%...

已更新項目:

感謝,沒意見就要準備結案囉,感恩~~~

3 個解答

評分
  • 6 年前
    最佳解答

    不考量是否有使用函數計算次數

    直接保留第一筆資料若有重複則刪除

    請自行在測試地區工作表 設一個按鈕 將下列 COPY 試試

    Private Sub CommandButton4_Click()

    Dim YY As Object, Y%, S$

    Set YY = CreateObject("Scripting.Dictionary")

    2015-05-08 15:07:14 補充:

    For Y = 2 To [B65536].End(xlUp).Row

    S = Range("C" & Y)

    If YY.Exists(S) Then Range("D" & Y) = "" Else Range("D" & Y) = 1: YY(S) = S

    Next: S = "": YY.RemoveAll: Set YY = Nothing: Y = 0

    Application.ScreenUpdating = False

    2015-05-08 15:07:57 補充:

    Columns(4).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

    Range("B2:B" & [B65536].End(xlUp).Row) = "=ROW(A1)"

    Application.ScreenUpdating = True

    End Sub

    2015-05-08 17:29:06 補充:

    請版大撥空上傳__意見6__的檔案.

    2015-05-08 17:35:54 補充:

    意見009:

    假如整個欄次[A到G欄]都放到WORK之中

    問題指的是__A欄到G欄_所有欄位資料逐一比對

    假設比對A/B/C欄位_作法:

    S = Range("A" & Y) & Range("B" & Y) & Range("C" & Y)

    其他不變.

    以上___

    2015-05-09 09:25:58 補充:

    需求:刪除重複資料 但保留一筆資料 作法:使用Dictionary當第一筆資料將欄位D設定=1 其他=""將設定=空值資料使用.SpecialCells(xlCellTypeBlanks).EntireRow.Delete刪除

    Private Sub CommandButton4_Click()

    Dim YY As Object, Y%, S$

    Set YY = CreateObject("Scripting.Dictionary")

    For Y = 2 To [B65536].End(xlUp).Row

    S = Range("C" & Y)

    If YY.Exists(S) Then Range("D" & Y) ="" Else Range("D" & Y) = 1: YY(S) = S

    Next: S = "": YY.RemoveAll: Set YY = Nothing: Y = 0

    Application.ScreenUpdating = False

    Columns(4).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

    Range("B2:B" & [B65536].End(xlUp).Row) ="=ROW(A1)"

    Application.ScreenUpdating = True

    End Sub

  • iam_1_001 研究生

    好棒喔,初步測試都很順利,刷一下就完成了,再來仔細核對細項,謝謝喔。

    2015-05-08 15:51:38 補充:

    經核對細項也都正確無誤,

    因為還要套入大的程式之中,等我套入完成就請上來發表讓大家分享喔,感恩。

    2015-05-08 16:20:30 補充:

    請問一下

    我剛剛套入大檔案中,有幾個重況請指點一下,感恩喔:

    這次總項次有2893項,重項值是1的有2705項,>1以上的是188。

    但是跑出來第一列的表頭被第一項侵佔了,按鈕也不見了。

    總項次也不正確。

    我將我的大檔的KEY簡述一下喔:

    項次在B欄沒問題

    C欄是KEY沒問題

    重項值是F欄

    資料有A至G欄

    我改的地方如下

    2015-05-08 16:21:53 補充:

    If YY.Exists(S) Then Range("F" & Y) = "" Else Range("F" & Y) = 1: YY(S) = S

    Columns(6).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

    2015-05-08 16:26:09 補充:

    但是跑出來第一列的表頭被第一項侵佔了,按鈕也不見了。

    這個找出問題了

    F1的表頭沒加,是空白。

    加上就好了,

    其他幫忙看一下。

    2015-05-08 16:42:12 補充:

    我在猜應該是總欄次的問題,

    因為我的是到G欄,

    假如是如此我就要注意欄次問題,

    可是萬一這個檔有很多欄呢?

    可能就不能使用囉,

    因為有看到您的 VBA 寫得相當省記憶體的,

    速度很快的,

    Set YY = CreateObject("Scripting.Dictionary")

    假如整個欄次[A到G欄]都放到WORK之中,

    會不會很費事呢?

    2015-05-08 18:19:04 補充:

    謝謝

    可能是我檔案問題,我先來清一下或是換到您回答的檔案再試試看,

    以前也是常遇到檔案的不乾淨,造成電腦誤判,謝謝。

    不行的話再UPLOAD檔案看看囉。

    感恩~

    2015-05-08 18:34:55 補充:

    果然是資料問題,把下方所有空白全部清內容就正確了。

    感謝喔,假如大家沒意見恭請上台發表囉。

    建議:可否針對關鍵部分提示一下,這樣大家要套入自己的檔案會比較方便,

    感謝喔。

    再請問一下:

    您這個VBA是不是會把所有的各欄資料都寫進去,

    比如我這題的發問是到D欄,而我的大檔是到G欄,

    VBA會把各列原本的各欄寫進去就對了,

    感謝喔。

    2015-05-09 06:45:55 補充:

    已知道整個邏輯了,感恩,恭請上台發表囉,謝謝。

    2015-05-09 09:56:55 補充:

    2015-05-09 09:56:21 補充

    感謝,沒意見就要準備結案囉,感恩~~~

  • 6 年前

    網上看了這家,因為我公司的硬碟隨身碟故障,微軟的張經理都找過他們,把他們送去內湖救不出來的,都給救出來

    http://mypaper.pchome.com.tw/twdatahelp/

    http://blog.xuite.net/stellate94533/blog/

    ★☆♠♤♣♧♥

還有問題?馬上發問,尋求解答。