2016-11-07 3 views
1

Grundsätzlich möchte ich ein Makro erstellen, das die SUM-Spalte für diese zusammenhängende ID zusammenführt, die identisch sind. In Bedingte Formatierung wäre so etwas wie: = OR (A1 = A2, A2 = A3) für die Spalte C.VBA: Zellen mit derselben ID-Nummer verschmelzen

ID QTY SUM > ID QTY SUM 
001 1 1 > 001 1  1 
002 2 5 > 002 2  5 
002 3 5 > 002 3  
003 4 4 > 003 4  4 

See Example

Ich glaube, es sollte wirklich einfach sein.

Vielen Dank!

+0

was hast du probiert? Probiere etwas aus und poste es zurück, wenn du nicht weiterkommst. Wir sind kein Code-Writing-Service, aber wir sind hier, um Ihnen zu helfen, wenn Sie nicht weiterkommen und Hilfe brauchen. – Sorceri

Antwort

0

Dies sollte die Aufgabe erledigen.

Option Explicit 

Private Sub MergeCells() 
' Disable screen updates (such as warnings, etc.) 
Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

Dim rngMerge As Range, rngCell As Range, mergeVal As Range 
Dim i As Integer 
Dim wks As Worksheet 

Set wks = ThisWorkbook.Sheets("Sheet1") ' Change Sheet1 to your worksheet 

i = wks.Range("A2").End(xlDown).Row 
Set rngMerge = wks.Range("A2:A" & i) ' Find last row in column A 

With wks 
' Loop through Column A 
For Each rngCell In rngMerge 
    ' If Cell value is equal to the cell value below and the cell is not empty then 
    If rngCell.Value = rngCell.Offset(1, 0).Value And IsEmpty(rngCell) = False Then 
     ' Define the range to be merged 
     ' Be aware that warnings telling you that the 2 cells contain 2 differen values will be ignored 
     ' If you have 2 different sums in column C, then it will use the first of those 
     Set mergeVal = wks.Range(rngCell.Offset(0, 2), rngCell.Offset(1, 2)) 
     With mergeVal 
     .Merge 
     .HorizontalAlignment = xlCenter 
     .VerticalAlignment = xlCenter 
     End With 
    End If 
Next 
End With 

Application.DisplayAlerts = True 
Application.ScreenUpdating = True 
End Sub 
+0

Großartig, es funktioniert gut auf meinem Code! Vielen Dank Niclas. – Senzar

0

Bisher habe ich den folgenden Code wurde mit:

Sub MergeSum() 
    Set Rng = ActiveSheet.Range("A1:A5") 
    Dim nIndex As Long 
    Dim iCntr As Long 
    For iCntr = 1 To 5 
    If Cells(iCntr, 1) <> "" Then 
    nIndex = WorksheetFunction.Match(Cells(iCntr, 1), Rng, 0) 
    If iCntr <> nIndex Then 
    Let Obj = "C" & nIndex & ":" & "C" & iCntr 
    Range(Obj).Select 
    Application.DisplayAlerts = False 
    Selection.Merge 
    Application.DisplayAlerts = True 
    End If 
    End If 
    Next 
End Sub 

Aber dieser Code hat eine Einschränkung, es funktioniert nur mit Aszendent IDs.

Verwandte Themen