Keresés

Új hozzászólás Aktív témák

  • Fferi50

    Topikgazda

    válasz Declare #32697 üzenetére

    Szia!

    Az alábbi makrót okoskodtam össze, feltétel, hogy minden S. Titel előtt a G oszlopban legyen Titel:

    Sub osszeado()
    Dim kezdrng As Range, vegrng As Range, ws1 As Worksheet, celrng As Range, elsocim As String, gewerkrng As Range
    Set ws1 = ActiveSheet
    'megkeressük az első S. Titel cellát:
    Set vegrng = ws1.Columns("G").Find(what:="S. Titel", LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlNext, after:=Range("G1"))
    elsocim = vegrng.Address 'megjegyezzük a címét, mert itt kell leállítani
    Do While Not vegrng Is Nothing
    'megkeressük a kezdő sort
    Set kezdrng = ws1.Columns("G").Find(what:="Titel", LookIn:=xlValues, lookat:=xlWhole, after:=vegrng, searchdirection:=xlPrevious)
    If kezdrng.Row < vegrng.Row Then 'ha kisebb mint az S. Titel helye, akkor összeadjuk
    vegrng.Offset(0, -1).Formula = "=Sum(" & kezdrng.Offset(1, -1).Address & ":" & vegrng.Offset(-1, -1).Address & ")"
    End If
    'következő S. Titel
    Set vegrng = ws1.Columns("G").Find(what:="S. Titel", LookIn:=xlValues, lookat:=xlWhole, after:=vegrng, searchdirection:=xlNext)
    If vegrng.Address = elsocim Then Exit Do 'ha visszaértünk az elsőhöz, kilépünk
    Loop
    'megkeressük az első S. Gewerk cellát:
    Set vegrng = ws1.Columns("G").Find(what:="S. Gewerk", LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlNext, after:=Range("G1"))
    elsocim = vegrng.Address: Set gewerkrng = Range("G1") 'megjegyezzük a helyét és a lehetséges első cellát
    Do While Not vegrng Is Nothing
    'megkeressük az első S. Titelt a Gewerkben
    Set kezdrng = ws1.Columns("G").Find(what:="S. Titel", LookIn:=xlValues, lookat:=xlWhole, after:=vegrng, searchdirection:=xlPrevious)
    Set celrng = kezdrng
    Do While Not kezdrng Is Nothing
    If kezdrng.Row > gewerkrng.Row Then ' ha benne van a tartományban
    If kezdrng.Row < vegrng.Row Then ' és oda tartozik, akkor bevesszük az összesítésbe
    Set celrng = Union(kezdrng, celrng)
    Else
    vegrng.Offset(0, -1).Formula = "=Sum(" & celrng.Offset(0, -1).Address & ")" 'ha nincs benne, akkor beírjuk az összesítő képletet
    Exit Do
    End If
    Else
    vegrng.Offset(0, -1).Formula = "=Sum(" & celrng.Offset(0, -1).Address & ")" ' ha már az előző Gewerkhez visszaértünk, akkor beírjuk az összesítő képletet
    Exit Do
    End If
    'megkeressük a következő S. Titel cellát:
    Set kezdrng = ws1.Columns("G").Find(what:="S. Titel", LookIn:=xlValues, lookat:=xlWhole, after:=kezdrng, searchdirection:=xlPrevious)
    Loop
    Set gewerkrng = vegrng ' a Gewerk területet változtatjuk
    'megkeressük a következő S. Gewerk cellát:
    Set vegrng = ws1.Columns("G").Find(what:="S. Gewerk", LookIn:=xlValues, lookat:=xlWhole, after:=vegrng, searchdirection:=xlNext)
    If vegrng.Address = elsocim Then Exit Do 'ha visszaértünk az első találathoz, akkor végeztünk
    Loop
    MsgBox "A képleteket beírtam!", vbInformation
    End Sub

    Először összesíti az S. Titel cellákhoz az adatot, majd az S Gewerk cellákét csinálja meg.

    Remélem, jól fog működni, ha gond lenne, írj lsz.

    Üdv.

Új hozzászólás Aktív témák