2017-03-10 2 views
0

Ich habe Blätter wie in "Picture1" unten, wo die mehreren Spalten pro Monat Jahr wiederholt werden und ich möchte alle Werte in der Spalte "Kosten übrig" summieren aber basierend auf der Wert des Monatsjahres in der darüber liegenden verbundenen Zelle.EXCEL Summenwerte in der letzten Spalte unter einem zusammengeführten Header

Wenn ich zum Beispiel in Zelle A1 Februar 2017 eintrage, möchte ich die Werte in der Spalte "Kosten übrig" unter der verbundenen Zelle vom Februar 2017 summieren, die wie im Bild unter den Werten in ES11: ES105 und if ist Ich trat März 2017 in Zelle A1 Ich brauche die Formel zu Summe FA11: FA105

das Problem ist, dass ich nicht in der Lage, die letzte Spalte unter jedem Monat noch in der Lage zu finden, was die letzte Zeile in der Lage ist scheinen kann die Monatstabelle.

können Sie über den besten Weg beraten, um zu erreichen, was ich brauche. da ich neu bei VBA bin und keine Kombination von Excel-Formeln finden konnte, um dieses Ziel zu erreichen.

Picture1

fand ich einen Code und ich zwickte es die erste Zelle in der gewünschten Spalte zu bekommen, so weit der Code:

Sub Select_Range() 
Dim Fm As Range, Av As Range, rng As Range, rngEnd As Range 
Dim s As String, x 

s = "February 2017 (IN/OUT)" 
Set Fm = Rows(8).Find(s, LookIn:=xlValues) 

If Not Fm Is Nothing Then 
    Set Av = Fm.MergeArea 

    Set rng = Av.Offset(3).Resize(, Av.Columns.Count) 
    Set rngEnd = rng.Cells(rng.Rows.Count, rng.Columns.Count) 
    rngEnd.Select 
End If 

End Sub

alles was ich brauche jetzt ist herauszufinden, wie man die letzte Reihennummer bekommt und der Rest sollte einfach sein.

Ich glaube, ich bin in der Nähe

Antwort

0

Ich schrieb eine Lösung der Trick auch Fähigkeiten meine VBA zu tun arm sind jetzt die Erinnerung gerade ist, den Wert von s durch einen Parameter und gibt den Wert von x und rufen Sie diesen Code als normalen Excel-Funktion zu liefern

Sub Sum_Specific_Month() 
Dim FoundR As Range, Av As Range, StartR As Range, SumR As Range 
Dim s As String, x 
Dim lRow As Long 

s = "February 2017 (IN/OUT)" 
Set FoundR = Rows(8).Find(s, LookIn:=xlValues) 

If Not FoundR Is Nothing Then 
    Set Av = FoundR.MergeArea 

    Set StartR = Av.Offset(3).Resize(, Av.Columns.Count) 
    Set StartR = StartR.Cells(StartR.Rows.Count, StartR.Columns.Count) 
    Set SumR = Range(StartR, StartR.End(xlDown)) 
    x = Application.WorksheetFunction.Sum(SumR) 
    Range("EN3").Value = x 

End If 

End Sub

+0

Um Ihnen helfen zu können, müssen Sie zunächst einige Dinge klären. Wo soll x zurückgegeben werden? – dimitris

+0

Danke @dimitris Ich habe dies als Funktion kein Sub und habe als Rückgabewert der Funktion x zurückgegeben –

-1

Sie können ein wenig Tabelle wie folgt machen:

Month - Column 
--------------- 
February - "ES" 
March - "FA" 

Dann verwenden Sie VLOOKUP die Spalte zu bekommen den Monat nach und nach der indirekten Funktion in die SUM um den Bereich zu setzen

Habe ich mich klar gemacht?

+0

Ja klar aber das Problem ist, dass wenn ich eine Spalte zwischen der Spalte „Menge“ und Spalte „Total exit“ eingefügt und das geschieht häufig dann würde ES in sonst –

+0

etwas ändern ich sehe, Sie können also eine Formel oder VBA-Funktion verwenden um die Spalte "Cost remaining" zu finden, wo immer es ist –

+0

Correctlucky ich löste es und veröffentlichte die Lösung als vba Sub hier aber am Ende für meine Zwecke habe ich es in eine Funktion –

0

Hoffe das hilft.

Sub locate_column_n_row() 
    Dim nextMonth As Range 
    Dim thisMonthColumn As Long 
    Dim thisMonthRow As Long 


    'Use Find function to locate the next month. 
    'To find the desired column for February, you must search for March. 
    'In your example this will return Range("ET8"): 
    Set nextMonth = Rows(8).Find("March 2017", LookIn:=xlValues, lookat:=xlPart) 
    'Now find the desired column of the previous month. In your example subtract by 4: 
    thisMonthColumn = nextMonth.Column - 4 

    'The following expression returns the row of the last-cell-that-has-a-value in a given column. 
    thisMonthRow = Cells(Rows.Count, thisMonthColumn).End(xlUp).Row 
    'I think this will locate the last row in the month table, 
    'on condition that every other cell under this (in this column), doesn't have any values. 
End Sub 
+0

Vielen Dank, was Sie geschrieben haben, ist sehr hilfreich, ich bin es zu meinem Ende zwickend werde ich posten, wie ich die Summe finde, wenn ich fertig bin –

+0

Gern geschehen. Wenn Ihnen die bereitgestellten Informationen gefallen, können Sie dies als Antwort akzeptieren. – dimitris

Verwandte Themen