Excel gurus of the world – UNITE!

Kérdés: milyen automatizmussal állítható elő a fenti táblából a lenti? A felhasználó csak a darab oszlopot tölti ki, aminek függvényében dinamikusan elkészül egy összefoglaló táblázat. Apró kozmetikai kérdés még, hogy milyen módszerrel lehet a nullás értékű sorokat üresként szerepeltetni. (Eddig IF() funkcióval dolgoztam, de tök bénán: IF((expression=0);expression;” “) — na ez a full gagyi, mert az expression helyén ott van ugye a képlet — kétszer. Illetve ezt akartam továbbterjeszteni olyanra, hogy ha bármilyen hibás eredményre fut, ne jelenítse meg a cellát. Például negatív ár, zéró osztó etc. esetén. Lehet, hogy erre van valamilyen beépített függvény, még nem túrtam.)

Thanks!

21 hozzászólás

HaDes

erre való az Access
jó tom nem ez a volt a kérdés. stb stb

BubuR

0 kihagyására jó ha felveszel egy
General;;;
formátumot.

robi

használj Access-t, OracleXE-t, DB2 Express-C-t. De használj adatbázist. Meg tudok őrülni, h a Visicalc óta az emberek beleszerelmesedtek a táblázatkezelőbe, és mindenre azt akarják használni.

Vagy használj dabbleDB-t…

Jano

Ha a 2x szereplo expression zavar, akkor egy seged cellaba szamoltasd ki az expressiont es ezt a cellat tedd az expression helyere. Ez mashogy bena.

Egyebkent ha lehet valtozot hasznalni excelben es erteket adni akkor csinalhatnal valami olyamit, hogy ((ertek:=expression)0;ertek;”nulla”)

sku

=HA(D2>0;C2*D2;””)

ahol D2 az érték, C2 meg az ár

ez kiszámolja az értéket, a “” miatt semmit ír be a cellába. az összefoglalón még dolgozom, ez eddig alap.

tamas

nem vagyok ekszel guru, de szerintem dinamikusan valtozo meretu summary tablat (aggregatumot, view-t) csak valami VB makroval lehet generalni, ilyen egysoros kepletre nem tennem a fejem.

jfl

A hibás értékek kiszűrésére van egy beépített függvény: HIBÁS(érték)

jfl

Elég rég írtam már VBA dolgokat Excelhez, szóval biztos lehet hatékonyabban is, nálam ez működik:

Public Sub ArMasol()
    Sheets("Munka1").Select
    FirstRow = 2
    FinalRow = Range("A" & FirstRow).End(xlDown).Row
    EmptyRows = 7
    PasteCell = FinalRow + EmptyRows
    Application.ScreenUpdating = False
    For i = FirstRow To FinalRow
        Quantity = Range("C" & i).Value
        If Quantity > 0 & Not IsError(Range("D" & i).Value) Then
            Range("A" & i & ":D" & i).Copy
            Range("A" & PasteCell).Select
            PasteCell = PasteCell + 1
            ActiveSheet.Paste
        End If
    Next i
    Application.ScreenUpdating = True
    Application.CutCopyMode = False
    Range("A1").Select
End Sub

jfl

1. Az ActiveSheet.PasteSpecial az a WorkSheet objektumra vonatkozik, a Selection.PasteSpecial pedig a kiválasztott tartományra, a Range objektumra. A két metódusnak mások a paraméterei, gondolom ezért állt le hibával.

A Selection.Copy a kódodban nem szükséges, mert három sorral feljebb már megtörténik a vágólapra másolás, elég csak az irányított beillesztés. Igazából annyi is elég, hogy Selection.PasteSpecial Paste:=xlPasteValues, a többi paraméter megegyezik a default értékkel.

2. Not IsError(Range("D" & i & ":E" & i).Value

Ha nem egybefüggő tartományokat akarsz kiválasztani, akkor a Union metódussal össze lehet ezeket fűzni és úgy dolgozni tovább:

Set r1 = Range("A1:D1")
Set r2 = Range("A3:D3")
Set RangeCollection = Union(r1, r2)
RangeCollection.Select

DnP

nem eccerubb a “darab” oszlopra egy autoszurot radobni? es ott belokod neki, hogy a nem ures sorokat lasd? 🙂
szerintem…

tamas

btw nem tud valaki ilyen ms office vba (for dummies, in 21 days, vagy valami professzionalisabb) konyvet, howtot, tutorialt? help-bongeszestol a szor is felall a hatamon.

Zsombor

A legeslegegyszerűbb megoldás, ha egyszerűen egy index/match függvénnyel nagyságsorba rendezed a egész dinamikus táblázathelyet kijelölve, és az If feltételnek azt szabod, hogy csak a 0-nál nagyobb értékű valuekat cipelje át.
Ezt elkészíteni kb 1 perec, és bármekkora dinamikus táblázatot tud majd kezelni.
Waddujuszéj?

Till Zoltán

Tegyél egy alakzatot a rajz eszköztárról a munkalapra,
aztán jobb klikk rajta és makróhozzárendelés,
így az indítása is 1xű…

Bár lehet, hogy ezt irányított szűréssel oldottam volna meg…