< návrat zpět

MS Excel


Téma: Průměrný datum makrem rss

Zaslal/a 19.9.2013 18:12

Dobrý den.
Prosím, potřebuji makrem zjistit průměrný datum. Více jsem stručně popsal v příloze, v makru je část, za kterou se mi nedaří se dostat. Moc děkuji. Vladimír Krist

Příloha: zip15331_prumer_vypocet.zip (18kB, staženo 26x)
Zaslat odpověď >

Strana:  1 2   další »
#015332
avatar
Udělal bych pomocí kontingenční tabulky.
Pokud jsou data pokaždé někde jinde tak bych je vždy naskládal do jiného listu tak abych je mohl používat v KT.
Příloha: zip15332_prumer_vypocet.zip (22kB, staženo 25x)
citovat
#015333
Opičák
A proč ne vzorcem, to je jednoduché.
Příloha: zip15333_prumer_vypocet.zip (16kB, staženo 25x)
citovat
#015338
Opičák
vlastní fcí - makrem
Příloha: zip15338_prumer_vypocet02.zip (25kB, staženo 25x)
citovat
#015339
avatar
Velice děkuji za pomoc oběma. Už jsem v obraze.Díky.citovat
icon #015340
eLCHa
@Opičák
Pokud jste schopni napsat
=SUMIF(stranky!B:B;A2;stranky!C:C)/COUNTIF(stranky!B:B;pracovni!A2)
v listu
proč totéž neuděláte v kódu? Použití cyklu může být značně zdlouhavé.

Když použiju struktury fce SUMIF
Function PRUMERIF(Oblast As Range, Kriterium, Optional Soucet As Range)
Set Oblast = Intersect(Oblast, Oblast.Parent.UsedRange)
If Soucet Is Nothing Then
Set Soucet = Oblast
Else
Set Soucet = Intersect(Soucet, Soucet.Parent.UsedRange)
End If

With Application.WorksheetFunction
If .CountIf(Oblast, Kriterium) = 0 Then
PRUMERIF = CVErr(xlErrDiv0)
Else
PRUMERIF = .SumIf(Oblast, Kriterium, Soucet) / .CountIf(Oblast, Kriterium)
End If
End With 'application.WorksheetFunction

Set Oblast = Nothing
Set Soucet = Nothing
End Function


Zápis
Set Oblast = Intersect(Oblast, Oblast.Parent.UsedRange)
slouží k omezení oblasti, pokud je zadáno
stranky!B:B
Některým fcím dělá 1000000 řádků problém, tímto jsem je omezil, takže tento zápis můžu bez problému použít
Zrovna v tomto případě by se asi nic nedělocitovat
icon #015350
eLCHa
A jen tak mimochodem mně tak napadlo kouknout se, jestli náhodou není a ejhle, ona je ;))

AVERAGEIFcitovat
#015352
Opičák
@ eLCHa

If Soucet Is Nothing Then
Set Soucet = Oblast
Else
Set Soucet = Intersect(Soucet, Soucet.Parent.UsedRange)
End If
Set Soucet = Intersect(Soucet, Soucet.Parent.UsedRange)


Rád čtu Vaše reakce a rád se poučím (jde to, ale dře to ) 3 3 3
tak tomu vůbec nerozumím.
Proč je tam IF THEN ELSE, když po podmínce je stejně
Set Soucet = Intersect(Soucet, Soucet.Parent.UsedRange)citovat
icon #015353
eLCHa
Protože jsem jelito
přesunul jsem to do podmínky a za podmínkou to nechal

Opravím v původním příspěvku

Btw - tím že je AverageIf by mělo (netestuji) fungovat jednodušší

Function PRUMERIF(Oblast As Range, Kriterium, Optional Soucet As Range)
Set Oblast = Intersect(Oblast, Oblast.Parent.UsedRange)
If Soucet Is Nothing Then
Set Soucet = Oblast
Else
Set Soucet = Intersect(Soucet,
Soucet.Parent.UsedRange)
End If

PRUMERIF = Application.WorksheetFunction.AverageIf(Oblast, Kriterium, Soucet)

Set Oblast = Nothing
Set Soucet = Nothing
End Function


Proměná Soucet by se teď měla přejmenovat na Prumer, ale to se mi nechce ;))

Nicméně tato vlastní fce tím úplně ztrácí smysl, že anocitovat
#015357
Opičák
@ eLCHa
ANO, souhlasím. Já jsem se hned v úvodu divil, proč makrem, ale zadavatel to tak toužil mít. Fci AVERAGEIF se přiznám, že jsem nkdy nepoužil (ke své škodě) a tak jsem o ní vlastně ani nevěděl. To je nejjednodušší řešení.
Je to samozřejmě řešitelné i KT, jak napsal cmuch, to bych uměl, ale v zadání byl ještě ten požadavek, aby bylo použito pojmenovaných oblastí, které mohou různě "cestovat" po listu. I tento důvod bych pochopil ale jak dostanu (je-li to možné) pojmenované oblasti do KT ? 4 4 4citovat
icon #015378
eLCHa

Opičák napsal/a:

Je to samozřejmě řešitelné i KT, jak napsal cmuch, to bych uměl, ale v zadání byl ještě ten požadavek, aby bylo použito pojmenovaných oblastí, které mohou různě "cestovat" po listu. I tento důvod bych pochopil ale jak dostanu (je-li to možné) pojmenované oblasti do KT ?

Ikdyž si nejsem jistý, jak to autor myslel tak:
Pravděpodobně nedostanete
Zkusil jsem
=S_CARNO;S_KONTRAKT;S_Datum
- přímo to nejde a ani přes další pojmenovanou oblast
Takže by se muselo vidět jak ten zdroj vypadá, ale pokud je to na listu vedle sebe, jen sloupce pokaždé jinde, tak ani nevidím důvod řešit to oblastmi
Musíte dodržet název sloupce a KT si už ta data najde, ať jsou v jakémkoliv sloupci (vyzkoušeno vložením sloupce)citovat

Strana:  1 2   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje