2017-03-04 91 views
0

我真的被困在这种形式的代码。 我想创建一个命令按钮,使用户可以简化报告并合并所有类似的项目并删除重复项。这将用于购买请求。我已经附加形式的照片在这里 - > FormVBA代码添加重复项并删除

enter image description here

我需要的按钮,找到C列的重复和F列求和汇总,然后用删除重复离开原来的背后总数量在QTY菜单中。这是可能的并且仍然保持在同一张纸上,还是将它复制到新纸上会更好?

+0

哪里是你的代码粘贴在? – 0m3r

+0

@AsleyGoodwin你确定它是列C?似乎搜索重复项的关键应该是或列A –

+0

是,列C.该顺序基于框架部件号。列A只是一个参考列 –

回答

2

如果键是列C,这个宏应该做你想做的事,把它附加到按钮上。为了使它很容易多变的键列,我所定义的键为一个常数,它现在设置为3(列C):

Sub ProcessForm() 
    Dim wholeRange As Range, i As Long, ar 
    Const key As Long = 3 ' <-- column C is key. Set to 1 if col A 
    With Worksheets("Order") 
     Set wholeRange = .Range("A5:G" & .Cells(.Rows.Count, key).End(xlUp).row) 
    End With 
    With wholeRange 
     ar = .Columns(key).value 
     For i = 1 To UBound(ar) 
      ar(i, 1) = WorksheetFunction.SumIfs(.Columns(6), .Columns(key), ar(i, 1)) 
     Next 
     .Columns(6).value = ar 
     .RemoveDuplicates key 
    End With 
End Sub 
+0

再次感谢A.S.H.Like我之前说A列只是一个参考列,可能会因其用处而被淘汰。我也做到了这一点,所以按钮被密码保护,所以只有某些人可以激活此代码。 –

+0

@AshleyGoodwin我明白了。建议的方法确实使用'C'作为关键,我只是为最终的变化做了灵活的处理,但这不是强制性的。 –

+0

但无论如何,我的意思是它作为一般建议,使用*“描述”*字段作为关键字是不寻常的。 –

0

没有看到你的代码,它很难说你坚持什么,但这里是如何寻找重复和总结的价值简单的例子

我使用WorksheetFunction.Match Method (Excel)

Option Explicit 
Sub Example() 
' // Declare Variables 
    Dim DupRow As Variant 
    Dim i As Long 
    Dim LastRow As Long 
    Dim Sht As Worksheet 

    Set Sht = ThisWorkbook.Sheets("Sheet1") 

    With Sht 
     LastRow = .Cells(Rows.Count, "C").End(xlUp).Row 

     For i = LastRow To 2 Step -1 
'    // Columns 3 (C) DupRow 
      DupRow = Application.Match(Cells(i, 3).Value, Range(Cells(1, 3), Cells(i - 1, 3)), 0) 

      If Not IsError(DupRow) Then 
'    // Columns 6 (F) sum Match 
       Cells(i, 6).Value = Cells(i, 6).Value + Cells(DupRow, 6).Value 
       Rows(DupRow).Delete ' Delete DupRow 

      End If 
     Next i 
    End With 

End Sub 
0
Sub main() 
    Dim cell As Range 

    With Worksheets("Order") 
     With .Range("C5", .Cells(.Rows.Count, 3).End(xlUp)) 
      For Each cell in .Cells 
       cell.Offset(,3).Value = WorksheetFunction.SumIf(.Cells, cell, .Offset(,3)) 
      Next 
      .Offset(, -2).Resize(, 7).RemoveDuplicates Columns:=Array(3), Header:=xlNo 
     End With 
    End With 
End Sub