返回列表 上一主題 發帖

VBA做篩選

VBA做篩選

因資料有上千筆…
可否能用VBA做篩選..有參考本網站之篩選範例..還是做不太出來..
問題一、
篩選C欄、D欄、E欄位做為準則
排列順序,且在G欄能否標示一下『重覆請查核』
問題二、
可否加註顏色做為比對依據
問題三、
SHEET1為資料區
篩選出來可否在COPY到SHEET2

請大大協助一下…感恩

檢查重覆.rar (3.33 KB)

篩選C欄、D欄、E欄位做為準則
C欄、D欄、E欄位是AND嗎
ss

TOP

回復 2# sunnyso


    說錯...
是做排序篩選..因筆數有上千筆...要從表單中抓出重覆

TOP

回復  sunnyso
    說錯...
是做排序篩選..因筆數有上千筆...要從表單中抓出重覆
sillykin 發表於 2013/8/31 13:34

[排序篩選..  抓出重覆 ]  請定義: 哪裡的重覆
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

謝謝G大出手協助..
B欄姓名1(不用管此欄位值)
比對C欄、E欄
C欄姓名2(重覆)
E欄序號(重覆)

TOP

回復 6# sillykin
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Rng(1 To 3) As Range, i As Integer, E As Range
  4.     With Sheets("Sheet1")          ' "Sheet1" 工作表名稱
  5.         .Cells.Interior.ColorIndex = xlNone
  6.         Set Rng(1) = .Range("A:F").SpecialCells(xlCellTypeConstants)                              '資料庫
  7.         .Range("G:G") = ""
  8.         Set Rng(3) = Rng(1).Rows(1)
  9.         For i = 3 To 5                                      'C欄、D欄、E欄位做為準則
  10.             .Cells(1, .Columns.Count) = Rng(1).Cells(1, i)  '欄位做為準則
  11.             Rng(1).Columns(i).AdvancedFilter xlFilterCopy, , .Cells(1, .Columns.Count), True       '篩選不重複的資料
  12.             Set Rng(2) = .Range(.Cells(2, .Columns.Count), .Cells(2, .Columns.Count).End(xlDown))  '篩選出的資料範圍
  13.             For Each E In Rng(2)
  14.                 If Application.CountIf(Rng(1).Columns(i), E) > 1 Then                              ' 資料在資料庫裡的資料數大於1
  15.                     With Rng(1).Columns(i).Cells
  16.                         .Replace E, "=XXX", xlWhole                                                '更改為錯誤值
  17.                         With .SpecialCells(xlCellTypeFormulas, xlErrors)                           '錯誤值的特殊範圍裡
  18.                             .Value = E                                                             '置回原來的資料
  19.                             Set Rng(3) = Union(Rng(3), .Cells)                                     '加入範圍
  20.                             .Interior.Color = vbYellow
  21.                             .Offset(, Rng(1).Columns.Count + 1 - i) = "重覆請查核"
  22.                         End With
  23.                     End With
  24.                 End If
  25.             Next
  26.         Next
  27.         .Cells(1, .Columns.Count).EntireColumn = ""
  28.         Set Rng(3) = Application.Intersect(.Cells, Rng(3).EntireRow)  '整合為整列
  29.     End With
  30.     With Sheets("Sheet2")
  31.         .Cells.Clear
  32.         Rng(3).Copy .Range("A1")
  33.         .Cells.Interior.ColorIndex = xlNone
  34.         .Cells.EntireColumn.AutoFit
  35.     End With
  36. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 7# GBKEE
請教您:
此處您安排  .Replace E, "=XXX", xlWhole  的作用何在?
它又與 With .SpecialCells(xlCellTypeFormulas, xlErrors) 之間
有何關聯?
謝謝您!

TOP

回復 8# c_c_lai
.Replace E, "=XXX", xlWhole  的作用何在?  將資料庫要搜尋的字串一次變為無效的公式(錯誤值)
With .SpecialCells(xlCellTypeFormulas, xlErrors) ->範圍中的特殊儲存(錯誤值)
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 10# GBKEE


    .Cells(1, .Columns.Count).EntireColumn = ""
        Set Rng(3) = Application.Intersect(.Cells, Rng(3).EntireRow)  '整合為整列

請問g大版主..上面這二條的意思是什麼..有點看不太懂...

TOP

回復 11# sillykin
Rng(3)在程式中執行一直是不連續的區塊(欄數位置不一樣),無法用Copy 的方法
Set Rng(3) = Application.Intersect(.Cells, Rng(3).EntireRow)  '整合為整列(欄數位置一樣)可一起Copy 複製到其他地方
  1. EntireRow 屬性
  2. 請參閱套用至範例特定傳回 Range 物件,該物件代表包含指定範圍的整個列 (或若干列)。唯讀
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 【生命在呼吸間】佛陀說:「生命在呼吸間。」人無法管住自己的生命,更無法擋住死期,讓自己永住人間。既然生命去來這麼無常,我們更應該好好地愛惜它、利用它、充實它,讓這無常、寶貴的生命,散發它真善美的光輝,映照出生命真正的價值。
返回列表 上一主題