返回列表 上一主題 發帖

[發問] 如何對特定欄進行篩選和替代資料

回復 1# luke
  1. Option Explicit
  2. Dim D As Object, DRng As Range
  3. Sub 篩選()
  4.     資料篩選
  5.     With Sheet1.Range("L1")
  6.         .CurrentRegion = ""
  7.         If D.Count = 0 Then Exit Sub
  8.         .Resize(D.Count, 3) = Application.Transpose(Application.Transpose(D.ITEMS))
  9.         .CurrentRegion.Sort .Cells(1)
  10.     End With
  11. End Sub
  12. Sub 替代()
  13.     Dim Rng As Range, R As Range, E As Range, C As Range
  14.     資料篩選
  15.     Application.ScreenUpdating = False
  16.     With Sheet1
  17.         .Range("C:C").Value = .Range("C:C").Value  '去除"'"字串'L1 多一個
  18.         Set Rng = .Range("L1").CurrentRegion
  19.         For Each R In Rng.Columns(2).Cells   'M欄的儲存格
  20.             If DRng.Find(R.Offset(, 1), lookat:=xlWhole) Is Nothing And Application.CountIf(.[B:B], R.Offset(, 1)) > 0 Then
  21.                 'N欄資料中, 有與B欄非黃底儲存格的資料相同時就停止執行VBA->    'N欄的字串在[篩選資料的儲存格]中比對不到, 且[B:B]中有此字串
  22.                 With .Range("B:B")
  23.                     .Replace R.Offset(, 1), "=XXX", xlWhole
  24.                     With .SpecialCells(xlCellTypeFormulas, xlErrors)
  25.                          .Value = R.Offset(, 1)
  26.                          .Select
  27.                     End With
  28.                 End With
  29.                 MsgBox R.Offset(, 1) & " 有重複值."
  30.                 End
  31.             End If
  32.             With .Range("C:C")
  33.                 .Replace R.Value, "=XXX", xlWhole
  34.                 With .SpecialCells(xlCellTypeFormulas, xlErrors)
  35.                     .Value = R
  36.                     For Each E In .Areas
  37.                         For Each C In E.Cells
  38.                             If C.Offset(, -1) = R.Offset(, -1) Then C.Offset(, -1) = R.Offset(, 1)
  39.                         Next
  40.                     Next
  41.                 End With
  42.             End With
  43.         Next
  44.     End With
  45.     Application.ScreenUpdating = True
  46. End Sub
  47. Private Sub 資料篩選()
  48.     Dim R As Range
  49.     Set D = CreateObject("SCRIPTING.DICTIONARY")
  50.     With Sheet1
  51.         For Each R In .Range("B1", .Cells(.Rows.Count, "B").End(xlUp))
  52.             If R <> "" And R.Cells(1, 2) <> "" Then
  53.                 D(R & R.Cells(1, 2)) = Array(R, R.Cells(1, 2), R)    '存入字典物件: 篩選的資料
  54.                 If DRng Is Nothing Then                              '篩選資料的儲存格
  55.                     Set DRng = R
  56.                 Else
  57.                     Set DRng = Union(R, DRng)
  58.                 End If
  59.             End If
  60.         Next
  61.    End With
  62. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 3# luke
在附檔上的字串 L1 實際上是 'L1  ->文字格式   
用這行除去 '  在2003版本可除去,但2007版本為何無法除去尚請有2007試試看
  1. .Range("C:C").Value = .Range("C:C").Value  '去除"'"字串'L1 多一個
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 受人點水之恩,須當湧泉以報。
返回列表 上一主題