Guest User

Untitled

a guest
Feb 22nd, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.85 KB | None | 0 0
  1. id field date
  2. 1 a 1
  3. 1 b 1
  4. 1 d 1
  5. 1 a 2
  6. 1 s 2
  7. 1 d 2
  8. 2 a 3
  9. 2 d 3
  10. 2 b 4
  11. 2 s 4
  12. 1 w 1
  13. 1 q 1
  14. 1 b 2
  15.  
  16. a
  17. d
  18.  
  19. b
  20. s
  21.  
  22. id field date
  23. 1 a 1
  24. 1 b 1
  25.  
  26. id field date
  27. 1 a 1
  28.  
  29. id field date
  30. 1 a 1
  31. 1 d 1
  32. 1 a 2
  33. 1 d 2
  34. 2 a 3
  35. 2 d 3
  36. 2 b 4
  37. 2 s 4
  38. 1 w 1
  39. 1 q 1
  40.  
  41. Sub Manp()
  42. Dim w1 As Range
  43. Dim w2 As Range
  44. Set w1 = Range("ww") 'named range of words to keep
  45. Set w2 = Range("xx") 'named range of words to remove
  46. O = Cells(Rows.Count, 1).End(xlUp).Row 'count number of records for specific id#
  47. Application.ScreenUpdating = False
  48.  
  49. For i = 1 To w1.Rows.Count 'subset based on common fields, one to keep, one to remove
  50. Application.StatusBar = i
  51. v = Range(w1(i), w2(i))
  52. For Each j In [pp]
  53. Sheets("Sheet1").Select
  54. Selection.AutoFilter Field:=2, Criteria1:=v, Operator:=xlFilterValues 'filter by key fields
  55. Sheets("Sheet1").Range("$A$1:$C$15").AutoFilter Field:=1, Criteria1:=j ' filter by id#
  56. N3 = Cells(Rows.Count, 1).End(xlUp).Row
  57. If N3 > 1 Then
  58. Range("C2:C" & O).Copy Destination:=Sheets("Sheet4").Range("J1")
  59. Sheets("Sheet4").Select
  60. Columns(10).RemoveDuplicates Columns:=Array(1)
  61. N2 = Cells(Rows.Count, 10).End(xlUp).Row
  62. If N2 = 1 Then
  63. ddd = Range("J1:J" & N2 + 1).Value
  64. Else
  65. ddd = Range("J1:J" & N2).Value ' have unique list of days
  66. End If
  67. Columns(10).Clear
  68. Sheets("Sheet1").Select
  69. For Each k In ddd ' filter on each day
  70. Sheets("Sheet1").Select
  71. If Sheets("sheet1").AutoFilterMode Then Sheets("sheet1").ShowAllData
  72. Selection.AutoFilter Field:=2, Criteria1:=v, Operator:=xlFilterValues 'filter by key fields
  73. Sheets("Sheet1").Range("$A$1:$C$15").AutoFilter Field:=1, Criteria1:=j ' filter by id#
  74. Sheets("Sheet1").Range("$A$1:$C$15").AutoFilter Field:=3, Criteria1:=k
  75. 'check contents of cells
  76. Set visRng = ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible) ' Select only rows within the used range that are visible.
  77. Dim r As Range
  78. Rowz = Sheets("Sheet1").AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1
  79. If Rowz > 1 Then
  80. r1 = 0
  81. r2 = 0
  82. For Each r In visRng.Rows ' Loop through each row in our visible range ...
  83. If Cells(r.Row, 2) = w1(i) Then r1 = r.Row ' check if cell value is a keeper
  84. If Cells(r.Row, 2) = w2(i) Then r2 = r.Row ' check if cell value is a discard wrt a keeper
  85. If r1 > 0 And r2 > 0 Then Rows(r2).Delete ' check if both keeper and discard are in same subset
  86. Next
  87. End If
  88. Next k
  89. End If
  90.  
  91.  
  92.  
  93. If Sheets("sheet1").AutoFilterMode Then Sheets("sheet1").ShowAllData
  94. Next j
  95.  
  96.  
  97. Next i
  98. Application.ScreenUpdating = True
  99. End Sub
  100.  
  101. On Error Resume Next
  102. Set visRng = ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)
  103. On Error GoTo 0
  104.  
  105. If Not visRng Is Nothing Then
  106.  
  107. Sub RemoveValues()
  108. Dim listKeep As Object, listNoDups As Object, list As Object, key As Variant, Target As Range
  109. Dim data As Variant, results As Variant
  110. Dim r As Long, r2 As Long
  111. Dim flag As Boolean
  112.  
  113. Set dicKeep = getRangeList("ww")
  114. Set dicNoDups = getRangeList("xx")
  115.  
  116. Set list = CreateObject("System.Collections.ArrayList")
  117.  
  118. With Worksheets("Sheet1")
  119. Set Target = .Range("A1", .Range("C" & .Rows.count).End(xlUp))
  120. End With
  121.  
  122. data = Target.Value
  123.  
  124. ReDim results(1 To UBound(data), 1 To UBound(data, 2))
  125.  
  126. For r = 1 To UBound(data)
  127. key = data(r, 1) & "|" & data(r, 2) & "|" & data(r, 3)
  128. flag = False
  129.  
  130. If Not list.Contains(data(r, 2)) Then
  131. flag = True
  132. ElseIf dicKeep.Contains(data(r, 2)) Then
  133. flag = True
  134. ElseIf Not dicNoDups.Contains(data(r, 2)) Then
  135. 'Does this even matter???
  136. End If
  137.  
  138.  
  139. If flag Then
  140. r2 = r2 + 1
  141. results(r2, 1) = data(r, 1)
  142. results(r2, 2) = data(r, 2)
  143. results(r2, 3) = data(r, 3)
  144. End If
  145.  
  146. If Not list.Contains(key) Then list.Add key
  147. Next
  148. Application.ScreenUpdating = False
  149. Application.Calculation = xlCalculationManual
  150.  
  151. Target.Value = results
  152.  
  153. Application.Calculation = xlCalculationAutomatic
  154. Application.ScreenUpdating = True
  155. End Sub
  156.  
  157. Function getRangeList(RangeName As String) As Object
  158. Dim list As Object, key As Variant
  159. Set list = CreateObject("System.Collections.ArrayList")
  160.  
  161. For Each key In Range(RangeName).Value
  162. list.Add key
  163. Next
  164.  
  165. Set getRangeList = list
  166. End Function
Add Comment
Please, Sign In to add comment