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

  • bteebi

    veterán

    Sziasztok!

    Van egy viszonylag nagy táblázatom, és alatta ugyanaz, értékek nélkül. A felső táblázatban alapvetően számok vannak, de van néhány szöveges mező is. Fontos, hogy ezek a szöveges értékek ki legyenek szűrve. Az alsó táblázatba a felső táblázat adatait szeretném bizonyos szűrő feltételek mellett bemásolni. A szűrő feltétel az S130-as cellában lévő érték; ha attól nagyobb a cella értéke, akkor szűrésre kerül, a szűrt érték pedig "" (üres cella) lesz. A két táblázat formailag megegyezik, annyi, hogy 72 sornyi különbség van köztük.

    Ehhez még nem kellett volna makró, de a szűrő bonyolódása után már nem tudtam megoldani egyszerű képlettel. Ha az első (5.) oszlopban lévő szám nagyobb lenne a szűrőnél, de a mellette lévő (6.) oszlopban a szűrés után is van érték, akkor annak kell az 5. oszlopba kerülnie. A többi oszlopnál (6-11.) pedig, ha az alapérték szűrésre kerül, de a mellette lévő szomszédos oszlopok értékei nem, akkor annak a két szomszédos oszlopnak az átlagát kellene beilleszteni.

    Valószínűleg túl sok volt az argumentum, egyébként valami ilyesmi volt:

    =HA(VAGY(F5>=$S$130;SZÁM(F5)=HAMIS);HA(ÉS(SZÁM(E5)=IGAZ;SZÁM(G5)=IGAZ);ÁTLAG(E5;G5);HA(SZÁM(F5)=IGAZ;HA(F5<$S$130;F5;"");"")))

    Kicsit talán nehezen érthető a probléma, ezért feltettem egy képet:

    Tegyük fel, hogy a szűrő értéke 100, tehát az ennél nagyobb értékeket szeretném kiszűrni. Ebben az esetben a B2-es cella értéke ki lenne szűrve - a mellette, a C2-es cellában lévő szám azonban nem, ezért a C2 értékét kellene lemásolni 72 cellával lentebbre. A D3-as cella viszont üres, de a mellette lévők (C3 és E3), ezért a szűrés során a C3 és E3 átlagát kellene továbbvinni.

    Írtam rá egy makrót, de valamiért nem csinál semmit, pedig lefut. A makró a "proba" nevű laphoz van rendelve.

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim sor As Integer, oszlop As Integer

    If Target.Address = "$S$130" Then

    For sor = 77 To 139

    If Sheets("proba").Cells(sor - 72, 5) < Sheets("proba").Range("S130") Or WorksheetFunction.IsNumber(Sheets("proba").Cells(sor - 72, 5) = True) Then
    Sheets("proba").Cells(sor, 5) = Sheets("proba").Cells(sor - 72, 5)
    ElseIf WorksheetFunction.IsNumber(Sheets("proba").Cells(sor - 72, 5) = False) Then
    If WorksheetFunction.IsNumber(Sheets("proba").Cells(sor - 72, 6) = True) Then
    Sheets("proba").Cells(sor, 5) = Sheets("proba").Cells(sor - 72, 6)
    Else: Sheets("proba").Cells(sor, 5) = ""
    End If
    End If

    For oszlop = 6 To 11

    If Sheets("proba").Cells(sor - 72, oszlop) >= Sheets("proba").Range("S130") Or WorksheetFunction.IsNumber(Sheets("proba").Cells(sor - 72, oszlop) = False) Then
    If WorksheetFunction.IsNumber(Sheets("proba").Cells(sor - 72, oszlop - 1) = True) And WorksheetFunction.IsNumber(Sheets("proba").Cells(sor - 72, oszlop + 1) = True) Then
    Sheets("proba").Cells(sor, oszlop) = WorksheetFunction.Average(Sheets("proba").Cells(sor - 72, oszlop - 1), Sheets("proba").Cells(sor - 72, oszlop + 1))
    ElseIf Sheets("proba").Cells(sor - 72, oszlop) < Sheets("proba").Range("S130") And WorksheetFunction.IsNumber(Sheets("proba").Cells(sor - 72, oszlop) = True) Then
    Sheets("proba").Cells(sor, oszlop) = Sheets("proba").Cells(sor - 72, oszlop)
    Else: Cells(sor, oszlop) = ""
    End If
    End If
    Next oszlop
    Next sor
    End If
    End Sub

    Hol rontottam el? Előre is köszönöm a segítségeteket! :R

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