2017-03-04 1 views
0

Ich bin wirklich auf einen Code für dieses Formular fest. Ich möchte eine Befehlsschaltfläche erstellen, die es dem Benutzer ermöglicht, den Bericht zu vereinfachen und alle ähnlichen Elemente zu kombinieren und die Duplikate zu entfernen. Dies wird eine Kaufanfrage verwendet. Ich habe ein Foto von der Form hier angebracht -> FormVBA-Code zum Hinzufügen von Duplikaten und entfernen

enter image description here

ich den Knopf muß Duplikate in der Spalte C zu finden und die Summen aus der Spalte F summiert und dann Duplikate entfernen mit einem dem Original zu hinterlassen Gesamtsumme im QTY-Menü. Ist das möglich und bleibt es trotzdem auf dem gleichen Blatt oder wäre es besser, es zu einem neuen Blatt zu duplizieren?

+0

wo Ihr den Code steckt? – 0m3r

+0

@AsleyGoodwin sind Sie sicher, dass es Spalte C ist? es scheint, dass der Schlüssel für die Suche nach Duplikaten sein sollte oder Spalte A –

+0

Ja, Spalte C. Die Reihenfolge basiert auf der Rahmenteile Nummer. Spalte A ist nur eine Referenzspalte –

Antwort

2

Wenn die Schlüssel ist Spalte C, sollte dieses Makro tun, was Sie wollen, an die Schaltfläche anhängen. leicht für die Schlüsselspalte es veränderbar zu machen, definiert ich den Schlüssel als Konstante und setzen Sie ihn auf 3 für jetzt (Spalte 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

Danke nochmal A.S.H.Wie ich sagte, vor Spalte A ist nur eine Referenzspalte und könnte auf Grund ihrer Nützlichkeit eliminiert werden. Ich habe es auch so gemacht, dass der Button passwortgeschützt war, also können nur bestimmte Leute diesen Code aktivieren. –

+0

@AshleyGoodwin Ich sehe. Die vorgeschlagene Methode verwendet 'C' als Schlüssel, ich habe es nur für eventuelle Änderungen flexibel gemacht, aber das ist nicht obligatorisch. –

+0

Aber wie auch immer, ich meine es als einen Rat im Allgemeinen, es ist ungewöhnlich, ein * "Description" * - Feld als Schlüssel zu verwenden. –

0

Ohne den Code seiner schwer zu sehen, zu sagen, was Ihr angesteckt, aber hier ist schnell Beispiel dafür, wie Duplikate suchen und Summe den Wert

Ich verwende 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 
Verwandte Themen