2017-06-28 1 views
0

Ich versuche, eine neue Spalte zu erstellen, die mehrere Werte in einer einzigen Spalte konsolidiert. Der folgende Code hat keine Probleme, eine neue Spalte genau dort zu erstellen, wo ich sie brauche.VBA - Hinzufügen neuer Spalte dann COPY Zellen und dann SUM Zellen

Innerhalb jeder neu erstellten Spalte möchte ich jedoch, dass mein Code die vorherigen 5 Zellen in derselben Zeile summiert. Es funktioniert zur Zeit, ist aber statisch (Die neue Spalte ist G im folgenden Beispiel und addiert B: F). Ich denke, ich brauche eine Art Offset-Funktion, die es ermöglicht, den Bereich, den es summiert, dynamisch zu machen (Vorherige 5 Spalten), da es das gesamte Blatt durchläuft.

Außerdem würde ich es lieben, die Header-Informationen aus den Zeilen 1-9 aus der Spalte links von der neuen Spalte in die neue Spalte zu kopieren und das Wort "Combo" in Zeile 10 der neuen Spalte zu platzieren .

Amt 2013

Jede mögliche Hilfe bei diesem Unterfangen wäre toll. Dank

Dim currentColumn As Integer 
Dim columnHeading As String 

For currentColumn = Sheets("SLTData").UsedRange.Columns.Count To 2 Step -1 

columnHeading = Sheets("SLTData").UsedRange.Cells(10, currentColumn).Value 

'CHECK WHETHER TO KEEP THE COLUMN 
Select Case columnHeading 
    Case "PD.G0100", "PD.G0500", "PD.G0800", "PD.G0900", "PD.G1000", "PD.G0300", "PD.G0400", "PD.G0150", "PD.G0600" 
     'Do nothing 
    Case Else 

     If InStr(1, _ 
      Sheets("SLTData").UsedRange.Cells(10, currentColumn).Value, _ 
      "Homer", vbBinaryCompare) = 0 Then 


      Sheets("SLTData").Columns(currentColumn).Insert 
       For i = 11 To Cells(Rows.Count, "B").End(xlUp).Row 
       Range("G" & i) = WorksheetFunction.Sum(Range("B" & i), Range("C" & i), Range("D" & i), Range("E" & i), Range("F" & i)) 
       Next i 
     End If 
End Select 
Next 
+0

Wenn 'currentColumn'' 2' ist, wollen Sie immer noch die fünf Spalten links davon addieren (dh Spalte 'A', Spalte' 0', Spalte "-A", Spalte "-B" und Spalte "-C", von denen nur die Spalte "A" gültig ist)? Beachten Sie, dass sich 'Range',' Cells' und 'Rows' in Ihrem Code auf das' ActiveSheet' beziehen, das 'Sheets (" SLTData ")' sein kann oder auch nicht. (Sie sollten immer Referenzen auf "Range", "Cells", "Rows", etc. qualifizieren) – YowE3K

Antwort

1

Statt Range("G" & i) Verwendung Cells(row, column) (beide Reihen- und Spalten sind integer). Um die 5 verbleibenden Zellen zusammenzufassen: Cells(row, column) = WorksheetFunction.Sum(Range(Cells(row, column-5), Cells(row, column-1)))

+0

FANTASTISCH! Danke! – nikedude

Verwandte Themen