Keresés

Részletes keresés

SQLkerdes Creative Commons License 2010.07.17 0 0 12364
Megszokás...
A dupla negatív átváltja a TRUE/FALSE értékeket számmá. Én mindíg be szoktam rakni a képletekbe, mert lusta vagyok megjegyezni, hogy mikor kell meg mikor nem :-)
Előzmény: Redlac (12363)
Redlac Creative Commons License 2010.07.17 0 0 12363
Ez most már tényleg működik, köszönöm.

A tartomány elnevezéseket már használtam máskor is, itt most nem jutott eszembe.
A képlet elején a 2 kötőjel (--) miért van? Én nem tettem bele és működik.
Előzmény: SQLkerdes (12362)
SQLkerdes Creative Commons License 2010.07.17 0 0 12362
És még egy tanács. Megkönnyíti a formula olvasását (és megírását, ellenőrzését) ha nevet adsz a tartományoknak, amit használsz.

Pld.
Adat!$B$12:$B$2000 legyen Datum
Adat!$F$12:$F$2000 legyen Valami
Adat!$H$12:$H$2000 legyen ValamiMas

Ekkor a függvény a következőképp néz ki:

=SUM(--(YEAR(Datum)=2000*MONTH(Datum)>=7)* (MONTH(Datum)<=9*(Valami=M3)*(ValamiMas=H5)))
SQLkerdes Creative Commons License 2010.07.17 0 0 12361
És bár az először nem működött, most már igen (fene se érti...):

=SUMPRODUCT(--(YEAR(B13:B16)=2000* MONTH(B13:B16)>=7)*(MONTH(B13:B16)<=9*(F13:F16=M3)*(H13:H16=H5)))

Sima ENTER-rel lezárandó.
Vigyázz, nem azonos területekre hivatkozik mint a tied (13:16 vs 12:2000).
SQLkerdes Creative Commons License 2010.07.17 0 0 12360
Ez nekem működik:
=SUM(--(YEAR(B12:B2000)=2000*MONTH(B12:B2000)>=7)* (MONTH(B12:B2000)<=9*(F12:F2000=M3)*(H12:H2000=H5)))
CTRL+SHIFT+ENTER-rel lezárva.

Ez valszeg gyorsabb is mint a lenti, mert mindent csak egyszer kell kiszámolnia (kivéve a hónapot).


Előzmény: Redlac (12359)
Redlac Creative Commons License 2010.07.16 0 0 12359
=SZUM(SZORZATÖSSZEG((HÓNAP(Adat!$B$12:$B$2000)=7)*1; (ÉV(Adat!$B$12:$B$2000)=$C$1)*1; (Adat!$F$12:$F$2000=M3)*1;(Adat!$H$12:$H$2000=Adat!$H$5)*1); SZORZATÖSSZEG((HÓNAP(Adat!$B$12:$B$2000)=8)*1; (ÉV(Adat!$B$12:$B$2000)=$C$1)*1; (Adat!$F$12:$F$2000=M3)*1;(Adat!$H$12:$H$2000=Adat!$H$5)*1); SZORZATÖSSZEG((HÓNAP(Adat!$B$12:$B$2000)=9)*1; (ÉV(Adat!$B$12:$B$2000)=$C$1)*1; (Adat!$F$12:$F$2000=M3)*1;(Adat!$H$12:$H$2000=Adat!$H$5)*1))


Adott ez a valószínűleg hosszú képlet! Ez így működik, gyönyörűen adja az eredményt, de jó hülyén néz ki.

Negyedév adatait szerettem volna összegezni, de a hónapokat nem tudtam egyszerűbben meghatározni, pedig SQLkerdes segített, de az általa leírtak (11544-45) nem működnek.

SQLkerdes Creative Commons License 2010.07.16 0 0 12358
Nem.

Az Index fórum kedvenceim között láttam, hogy ebben a topikban a te hozzászólásod az utolsó, de amikor idejöttem, akkor nem láttam a hozzászólást magát.
Ilyenkor segít, ha ez ember posztol egy kommentet, az "előcsalogatja" a - valamilyen technikai okból - láthatatlan hozzászólást.

A te problémáddal az a baj, hogy:
- nem lehet előre megmondani max hány számla kombinációjából jön ki az elutalt összeg, viszont ilyet leprogramozni nem lehet. A megoldás amit én választottam az volt, hogy feltételeztem, hogy 6-nál nem nagyobb ez a szám. Minél nagyobb ez a szám, annál bonyibb megírni a kódot.
- továbbá, minél nagyobb a fenti szám, annál többször fog előjönni ugyanaz a "megoldás" különböző variációkban (100+400, 400+100, etc.).

Szóval nem egyszerű összerittyenteni egy ilyen kódot, ezért is van, hogy nem nagyon tolonganak a jelentkezők...
És nem fogok hazudni, most hogy amit eddig csináltam elszállt, nehéz újra nekiülni a másik gépen elszállt file-ok visszaállítása helyett :-(
Előzmény: madbazsi (12357)
madbazsi Creative Commons License 2010.07.16 0 0 12357
ez nickname? vagy mit jelent?
Előzmény: SQLkerdes (12355)
Törölt nick Creative Commons License 2010.07.16 0 0 12356
Köszönöm szépen a segítséget és a javaslatokat! Igen, valóban igaz, a FOR-ba nem jó információ meghatározó részt tenni, nem is szoktam, most valamiért a gyors próba után úgy maradt ;-) 
Előzmény: SQLkerdes (12350)
SQLkerdes Creative Commons License 2010.07.16 0 0 12355
asdf
Előzmény: SQLkerdes (12345)
madbazsi Creative Commons License 2010.07.16 0 0 12354

Hát rajtad kívül nem sok mindenki...

Te vagy az uccsó esélyem...azért én várok, hátha össze sikerül raknod!

Köszi

Előzmény: SQLkerdes (12345)
SQLkerdes Creative Commons License 2010.07.16 0 0 12353
Most tökre megtetszett az OFFSET-es megoldás.

Ez itt pld a ki nem szűrt sorok D oszlopát megfesti. Tuti ez a gyorsabb megoldás.


Sub Macro1()

Dim MyRange, WorkRange As Range

Set MyRange = Range(Range("A1"), Range("A" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible)

For Each WorkRange In MyRange

WorkRange.Offset(0, 3).Interior.ColorIndex = 20

Next

End Sub
Előzmény: SQLkerdes (12352)
SQLkerdes Creative Commons License 2010.07.16 0 0 12352
Ez a kód pld kiszinezi az autoszűrt cellákat az A oszlopban


Sub Macro1()

Dim myrange, workrange As Range

Set myrange = Range(Range("A1"), Range("A" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible)

For Each workrange In myrange
workrange.Interior.ColorIndex = 15
Next

End Sub

Kiszinezés helyett akár ki is olvashatod mindegyik cella sorának számát és ezt felhasználva már bármit csinálhatsz az adott sorban. Mondjuk úgy is tudsz bármit csinálni az adott sorban, hogy az OFFSET-et használod és a műveleti cellát a workrange cellától jobbra v. balra x darab cellával elmozgatod. Élek a gyanúperrel, hogy az OFFSET-es megoldás gyorsabb, mint a workrange cella sorának meghatározása és utána ez alapján műveletezés.
Előzmény: SQLkerdes (12351)
SQLkerdes Creative Commons License 2010.07.16 0 0 12351
Pld:
Csinálsz egy Range object-et ami csak bizonyos cellákat tartalmaz (mivel autoszűrve van a cucc, a te konkrét esetedben nyilván a látható cellák érdekelnek):

Set myrange = Range(Range("A1"), Range("A" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible)


(Ez pld. xl2007-ben gyakorlatilag a [HOME / FIND & SELECT / GO TO SPECIAL] VBA változata)

Ezután egy FOR Each Range in MyRange ... NEXT ciklusban megcsinálod amit akarsz.

Előnye akkor van ennek a megközelítésnek, ha nagyon sok sor van kiszűrve.
Vegyük a lenti példádat.
Ha van összesen 1 millió sorod amiből 20 db maradt meg az autoszűrés után, akkor a te lenti kódod mind az 1 millió sort végigjárja, kiértékeli, stb.

A fenti megoldás csak a 20 darab ténylegesen látható sorral fog törődni.
Előzmény: Törölt nick (12348)
SQLkerdes Creative Commons License 2010.07.16 0 0 12350
Ez is egy tök jó megoldás.
Csak egy javaslat: a FOR-ba ne tegyél információ kiolvasó részt.

Lent azt csináltad, hogy:
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row

Ha 10000 sor van a tábládban, akkor az excelnek 10000-szer kell meghatároznia a sorok számát, felugrani és megint sorszámot olvasni.

Egyszerűbb és erőforrás hatékonyabb ha a kód elején egy változóba kiolvasod az adott sor számát és utána csak hivatkozol a változóra.

Pld így:

iValtozo = Range("A" & Rows.Count).End(xlUp).Row
For i=2 to iValtozo
...

Így csak egyszer kell az xl-nek kiolvasni a sorok számát és sok sor esetében ez határozottan felgyorsíhatja a kód futását.


Előzmény: Törölt nick (12349)
Törölt nick Creative Commons License 2010.07.16 0 0 12349
Közben találtam egy megoldást, ide teszem, hátha még valakinek hasznos lehet:

Sub VégigASzűrtSorokon()
Dim i As Long

For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
If Range("A" & i).EntireRow.Hidden = False Then MsgBox "Kiválasztott sor: " & i
Next i

End Sub
Előzmény: Törölt nick (12348)
Törölt nick Creative Commons License 2010.07.16 0 0 12348

Köszi, de amint írtam, több ezer sorból van autoszűrővel kiválasztva több különböző szűrőbeállítással az eredmény (több különböző sor). Nekem tulajdonképpen a kiválasztott sorokon kellene végigmenni, mert egy következő művelethez ezen sorok különböző celláinak értékeire van szükségem. Ja, és az autószűrővel történt kiválasztást is makró végzi.

 

"Alternatívaként egy vektorváltozóba beteheted az autoszűrés eredményeként megmaradt számokat (Special Cells, Visible) és ezen szaladsz végig egy FOR NEXT ciklussal."

 

Erre tudnál példát mutatni?

Előzmény: SQLkerdes (12347)
SQLkerdes Creative Commons License 2010.07.16 0 0 12347
Én fordítva csinálnám.
Nyilván van valami feltételed az autoszűrőben, pld .value>0 (pozitív számok).
A ciklust megcsinálnám minden számra, de a cikluson belülre tennék egy IF-et ami kiértékeli a szűrési feltételt. Ha a feltétel igaz, megcsinálja amit kell, ha nem akkor bármi action nélkül kidob a Next-hez.

Alternatívaként egy vektorváltozóba beteheted az autoszűrés eredményeként megmaradt számokat (Special Cells, Visible) és ezen szaladsz végig egy FOR NEXT ciklussal.
Előzmény: Törölt nick (12346)
Törölt nick Creative Commons License 2010.07.16 0 0 12346

Sziasztok!

 

A kérdésem az lenne, hogyan lehet egy autoszűrővel szűrt állományon egy ciklussal végigmenni úgy, hogy csak a szűrt sorok értékeit szeretném vizsgálni. Pl. egy több ezer soros állományból a szűrés eredményeként látható a 2.; 12.; 35.; 50.; 135. sor és csak ezeket szertném vizsgálni.

SQLkerdes Creative Commons License 2010.07.15 0 0 12345
Már 3/4-ig készen volt a másik gépemen, de az most szállt el.
Sajnos most rövidtávon ezt nem fogom tudni befejezni.

Ha bárkinek aki erre jár van ideje rá, segítse már ki Madbazsi-t lécci!
Előzmény: madbazsi (12340)
Törölt nick Creative Commons License 2010.07.15 0 0 12344
Irányított szűrő
Előzmény: SQLkerdes (12343)
SQLkerdes Creative Commons License 2010.07.14 0 0 12343
Adat menü
Szűrők
Advanced filter (nem tom ez mi a magyar változatban).

Itt jelöld be a bal alsó sarokban lévő egyedi értékekre vonatkozó opciót.
Előzmény: bbjj (12341)
Törölt nick Creative Commons License 2010.07.14 0 0 12342
Szerintem, kimutatással lenne a legegyszerűbb
Előzmény: bbjj (12325)
bbjj Creative Commons License 2010.07.14 0 0 12341
Magyar Office2003
Előzmény: SQLkerdes (12327)
madbazsi Creative Commons License 2010.07.14 0 0 12340

Az NEM releváns. Csak így hoztam ki a dolgot, hogy a releváns adatokat láthasd!

Köszi szépen

Előzmény: SQLkerdes (12339)
SQLkerdes Creative Commons License 2010.07.14 0 0 12339
Ami az I oszlop előtt van, az releváns?
Előzmény: madbazsi (12338)
madbazsi Creative Commons License 2010.07.14 0 0 12338
ok...bocs a körülményeskedésért
Előzmény: SQLkerdes (12336)
SQLkerdes Creative Commons License 2010.07.14 0 0 12337
Vagy:
HÓNAP(Adat!$B$12:$B$2000)=>7 * HÓNAP(Adat!$B$12:$B$2000)<=9

Rengeteg variáció van...
Előzmény: SQLkerdes (12335)
SQLkerdes Creative Commons License 2010.07.14 0 0 12336
A Feltölt után még kell kattintani a Beilleszt (vagy mifene) linkre is!
Előzmény: madbazsi (12330)
SQLkerdes Creative Commons License 2010.07.14 0 0 12335
Akarom mondani:
ÉS( HÓNAP(Adat!$B$12:$B$2000)=>7; HÓNAP(Adat!$B$12:$B$2000)<=9)
Előzmény: SQLkerdes (12334)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!