Keresés

Részletes keresés
Így működik

Bővebben az új keresőről

Jimmy the Hand 2010. aug. 11. Creative Commons License 12544
Nézegettem a neveket, van köztük néhány furcsaság. Pl:
Ajándék
Ariel
Arzén
Bács
Erős
Főnix
stb.

Ezek némelyike simán benne lehet a cég tevékenységi körében...
Előzmény: SQLkerdes (12534)
Delila_1 2010. aug. 11. Creative Commons License 12543
Hú de gyors voltál!

Letöltöttem Jimmyét, így már elfogadható az arány.
Előzmény: SQLkerdes (12542)
SQLkerdes 2010. aug. 11. Creative Commons License 12542
Perelj be! :-)
Előzmény: Delila_1 (12540)
SQLkerdes 2010. aug. 11. Creative Commons License 12541
A kód azt csinálja, hogy az aktuális sheet A1:A36 tartományából szedi fel a karaktereket és az B1:B42840 tartományba dobálja a kombinációkat. Ismétlődés nem jáccik, szóval AAA, v. ABB -szerű kombinációk nem lesznek.


Sub karakterlanc()

Dim a, b, c
Dim sKarlanc As String
Dim lSor As Long

lSor = 1
For a = 1 To 36
For b = 1 To 36
If b <> a Then
For c = 1 To 36
If Not (((c = a) + (b = c))) Then
sKarlanc = Cells(a, 1) & Cells(b, 1) & Cells(c, 1)
Cells(lSor, 2).Value = sKarlanc
lSor = lSor + 1
End If
Next c
End If
Next b
Next a
MsgBox lSor & " kombináció kiírva"
End Sub
Delila_1 2010. aug. 11. Creative Commons License 12540
Én is meglepődtem.

Ez diszkrimináció! :)
Előzmény: Jimmy the Hand (12527)
SQLkerdes 2010. aug. 11. Creative Commons License 12539
A standard angol karakterkészlet 26 karakterből áll:

A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z

Mi az ami innen hiányzik, de neked kéne?
Előzmény: RHD_Eremite (12536)
SQLkerdes 2010. aug. 11. Creative Commons License 12538
Ja, még egy kérdés.
Ismétlődés játszik? Pld. AAA, BBB, CCC helyes megoldások?

Mondjuk (36*35*34=) 42840 kombináció csak akkor van, ha nincs ismétlődés, de azért erősítsd meg.
Előzmény: SQLkerdes (12537)
SQLkerdes 2010. aug. 11. Creative Commons License 12537
Az elemeket add meg pontosan, vagy egy módot ahogy generálni lehet őket, pld. ASCI (x)-től (y)-ig.

Számít, hogy kis v. nagy betű?
Előzmény: RHD_Eremite (12536)
RHD_Eremite 2010. aug. 11. Creative Commons License 12536

Nem jelszófeltörés a cél, bár bennem is felmerült, hogy valami kész brute-force megoldás segíthet, mivel a generálás része nagyon hasonló.

A stringek 3 karakteresek kell legyenek, 36 különböző elem variációjából szülhető összes.

 

Példaként

Elemek: A; B; C;....stb

Kombináció lista, amire szükségem van:

 

3 karakteres stringek:

 

ABC

BCA

CAB

ACB

CBA

BAC

 

Azért gondoltam Excelre, mert ha össze tudja számolni és ki tudja írni, hogy összesen hány eleme lesz a listámnak, akkor miért nem tudná kiírni magukat az elemeket is, nem igaz? Egyrészt ezt gond nélkül tudom használni a melóhelyemen, másrészt minden más megoldás bonyolultabbnak tűnik nekem(tömbökkel és egymásba ágyazott ciklusokkal valamelyik nyelven nekilátni), hacsak nincs kifejezetten ilyen célra írt freeware progi. Ha Excelben nem oldható meg és nem találok rá más progit akkor szerintem TurboPascal lesz a vége (VBasichez nem konyítok annyit se).

 

 

Előzmény: SQLkerdes (12535)
SQLkerdes 2010. aug. 11. Creative Commons License 12535
Mire használnád?
Mert ha pld valami password-del zárolt excel file-t akarsz password nélkül kinyitni, akkor arra vannak kész kódok...
Előzmény: RHD_Eremite (12531)
SQLkerdes 2010. aug. 11. Creative Commons License 12534
Köszönöm!
Előzmény: Jimmy the Hand (12528)
SQLkerdes 2010. aug. 11. Creative Commons License 12533
A cél karakterlánc hány karakter hosszú kell legyen?
36 különböző karakterről van szó?
Előzmény: RHD_Eremite (12531)
SQLkerdes 2010. aug. 11. Creative Commons License 12532
Van valahol egy üres cella a táblában és ezt az üres cellát gondolja az excel a tábla végének.
Meg még gondolom lehet ezer egyéb ok is...
Előzmény: natalyel (12530)
RHD_Eremite 2010. aug. 11. Creative Commons License 12531

Sziasztok!

 

Az alábbiakban lenne szükségem segítségre, könnyen elképzelhetőnek tartom, hogy nagyon egyszerű a megoldás, de még nem sikerült rá/ki-találnom.

 

36 karakter összes lehetséges variációját szeretném egy listában tudni

 

A "VARIÁCIÓK" függvény alapján 42840 db ilyen listaelemem van, de kevés ha tudom a variációk számát, minden egyes elemet látni szeretnék.

 

Köszönöm szépen a segítséget előre is!

 

Üdv

 

natalyel 2010. aug. 11. Creative Commons License 12530
üdv.
Miért van az, hogy office2007 Excel, sima szűréssel egy táblázatból azarok szűrni, az első találatig el is tünteti az összes sort, de az első találat utáni további sorokat már nem szűri ki?

Köszi előre is
Jimmy the Hand 2010. aug. 11. Creative Commons License 12529
Upsz... Bent maradtak a makrók... Azok nem kellenek oda.
Előzmény: Jimmy the Hand (12528)
Jimmy the Hand 2010. aug. 11. Creative Commons License 12528
Kombináltam Delila táblázatát azzal, amit itt találtam.
Eredmény.
Most már a Dzseniferek sem maradnak ki.
Jimmy the Hand 2010. aug. 11. Creative Commons License 12527
Wow!

Nem is gondoltam, hogy ennyivel több férfinév van...
(És szegény Dzseniferekkel mi lesz? :))
Előzmény: Delila_1 (12523)
SQLkerdes 2010. aug. 10. Creative Commons License 12526
Mér, te nem lenni amígó?

Bocsánat :-)
Valahogy a nickedet nem névként értelmeztem...
Előzmény: Delila_1 (12525)
Delila_1 2010. aug. 10. Creative Commons License 12525
Amigo?!

Szívesen. :)
Előzmény: SQLkerdes (12524)
SQLkerdes 2010. aug. 10. Creative Commons License 12524
Múcsosz grásziász, amígó!

:-)

Utónévből sose elég...
Előzmény: Delila_1 (12523)
Delila_1 2010. aug. 10. Creative Commons License 12523
SQL

Ímé 2300 anyakönyvezhető utónév.
http://data.hu/get/2851148/Utonevek_2300.xls.html
SQLkerdes 2010. aug. 10. Creative Commons License 12522
És természetesen köszi a gondolatébresztő ötleteket, ezzel kellett volna kezdenem :-)
Előzmény: Jimmy the Hand (12520)
SQLkerdes 2010. aug. 10. Creative Commons License 12521
Jól érted, egy kiegészítéssel. Név akár rengeteg is lehet egy rekordban, mert van olyan cég, aminek egy tulajdonosa volt és maradt is egész életében, meg van olyan cég is, aminek 20 tulajdonosa volt, és mind a 20 eladta más 20 embernek.

Szóval az, ha több találat van névre abszolút nem problémás eset.

De egyébként a gondolatmenet jó, és a Find valszeg tényleg jobb mint az instr...

A speciális nevek speciális okból nem jelentenek problémát szóval azokkal hálistennek nem kell foglalkoznom, de ez felhasználási adottság, nem programozási.
Előzmény: Jimmy the Hand (12520)
Jimmy the Hand 2010. aug. 10. Creative Commons License 12520
Eddig azt hittem, hogy egy konkrét oszlop celláiról kell eldönteni, hogy nevek vannak-e bennük, vagy sem. Most így értem:

Van egy táblázatod, amelyben minden sor egy rekord, és minden rekordban van egy név. Ezt a nevet kell kinyerni a táblázatból. De az a probléma, hogy egy adott soron belül nem tudod, hogy melyik oszlopban van a név. A név oszlopa akár sorról sorra változhat.

Ez eddig jó?
Ha igen, akkor én így fognék hozzá:

1) Van egy másik táblázat, amiben a lehetséges keresztnevek vannak felsorolva. (Erre a továbbiakban szótár néven hivatkozom.)
2) A szótárat (amellett, hogy benne van az összes lehetséges keresztnév, nemcsak a leggyakoribb 400) kiegészíteném spéci írásmódú nevekkel (Judith, Cynthia, stb.) és "-né"-kkel (Jakabné, Zoltánné, stb.)
3) Ciklussal végigmennék a sor összes celláján (kivéve, amelyikről biztosan tudom, hogy nem név van benne)
4) Az aktuális cella összes szavára rákeresnék a szótárban .Find metódussal. Ha akármelyik szót megtalálja, akkor az a cella nevet tartalmaz. Ebből a szempontból érdektelen, hogy a keresztnév hányadik szó a sztringben.
5) Kérdéses illetve bizonytalan esetnek az minősülne, ha az adott sor több cellájában is talál nevet, vagy pedig egyikben sem.


Alternatív megoldási lehetőség: kicsit megmogyorózni az extract készítőit, hogy normális, strukturált kivonatot adjanak. Nem hiszem el, hogy nem lehetséges.
Előzmény: SQLkerdes (12519)
SQLkerdes 2010. aug. 10. Creative Commons License 12519
Ennél sajnos bonyolultabb az ügy (vagy félreértem amit írsz).

Szóval ez egy cégbírósági adatbázis, amiből néha neveket, néha címeket kell kiemelni. A címekkel nem foglalkozom itt, mert az könnyű.

A probléma, hogy az adatbázisból származó extract-nak nincs hagyományos értelemben vett szerkezete, az egyes adatokat | választja el, ennyi.

Szóval van itt minden, TEÁOR szám, adószám, cgjszám, szöveges nem-név adatok, stb., meg a számomra fontos név adatok is. Mivel pld tevékenység-kódból lehet akármennyi, nem tudom kiszámolni, hogy hol lesznek a nevek a letöltött adatok között. Annyi fajta adat van/lehetséges, hogy az az érzésem, a negatív azonosítás több időt vesz el, mint az INSTR, de azért ránézek majd.

A nevek számos formátumban előfordulhatnak, de a formátumoktól függetlenül egy cellába kerülnek:
- Gipsz Jakabné (Kovács Klára) [ahol Kovács Klára az anyja neve] - ez mind 1 cella.
- Gipsz Jakab Zsoltné Kiss Márta Ajsa,
- Gipsz-Kiss Márta Ajsa (vagy a még rosszabb Gipsz Kiss Márta Ajsa),
- stb.

Szóval a .FIND szerintem nem műxik, mert ahhoz meg kell határozni, hogy egy cella tartalmának melyik része a keresztnév és ezt nem tudom algoritmizálni, néha az utolsó "szó" néha az utolsó kettő... Szóval a "-né"-t egyszerűbbnek tűnik keresni, mint "normálformára" hozni a férj nevét. Hatékonyabbnak tűnik az a gondolatmenet, hogy ha egy karakterlánc utolsó két karaktere "né", akkor az név.

A felhasználói felülvizsgálat jó ötlet!
Előzmény: Jimmy the Hand (12518)
Jimmy the Hand 2010. aug. 10. Creative Commons License 12518
"sajnos nincsenek neveknek fenntartott oszlopok, valszeg minden cellát ki kell majd értékeljek, hogy nevet tartalmaz-e"

Én a keresztnevek adatbázisának oszlopára gondoltam. Amikor az INSTR függvényt emlegetted, nekem az ugrott be, hogy ciklussal akarod megoldani a keresést. Pl. van egy sztringed, és fogod a 400-2000 keresztnevet tartalmazó adatbázist, és egyenként végignézed az összes celláját, hogy vajon a sztringed egyezik-e valamelyik névvel.

Ehhez képest javasoltam, hogy inkább használd a keresztnevek adatbázisán a .Find keresést, vagy esetleg valami intelligens SQL lekérdezést. A processzor kevésbé fog így leizzadni.

Még egy-két tipp:
- figyelni kell arra, hogy ha valaki pl. "Kovács Endréné", és a végéről a "né"-t leválasztod, akkor "Endré" -t kapsz, ami a keresztnevek szótárában valószínűleg nem lesz benne (mert ott "Endre" lesz).
Ezt én úgy oldanám meg, hogy a szótárat kiegészíteném az összes lehetséges "né"-vel. Pl. Andrásné, Antalné, Barnabásné, stb... (A modern szeleket figyelembe véve akár olyanokkal is, hogy Annáné, Anikóné, Borbáláné, stb...)
És így nem kellene vesződni azzal, hogy levágni a végét, újra rákeresni, stb.

- Érdemes lenne a szótárat kiegészíteni spéci írásmódú nevekkel, pl. Judith, Edith, stb.

- Azt mondtad, az adatok egy adatbázisból jönnek. Gondolom, ez valami nyilvántartás, ami olyan adatokat tartalmaz, mint lakcím, telefonszám, stb. Adott esetben könnyebb lehet a negatív azonosítás, tehát igazolni, hogy a kérdéses sztring NEM telefonszám, NEM lakcím és NEM forgalmi rendszám.

- A bizonytalan vagy nem azonosítható adatokat érdemes lehet kitenni egy kis táblázatba, felhasználói felülvizsgálatra.
Előzmény: SQLkerdes (12517)
SQLkerdes 2010. aug. 10. Creative Commons License 12517
Delila, köszi a fájlt! Óriási előnye, hogy nem tartalmazza mind a kb 2000 anyakönyvezhető nevet, csak kb 400-at, gondolom a leggyakoribbakat.

Jimmy, sajnos nincsenek neveknek fenntartott oszlopok, valszeg minden cellát ki kell majd értékeljek, hogy nevet tartalmaz-e :-(
A szétszedés is jó ötlet, most hogy rágódom rajta valszeg azt fogom csinálni, hogy:
- cellatartalmat szétszedem szóközök mentén
- utolsó szót megnézem, hogy keresztnév-e
- ha nem akkor megnézem, hogy jobbról az utolsó két betű "né"-e (inkább ezt előbb, és az előzőt utána)
- ha a név legalább három szó, akkor lehet, hogy a fentiek sikertelensége esetén (valakinek két keresztneve van, de az "utolsó" valami egzotikus, pld ézsua) megnézem a jobbról a második szót is, hátha az keresztnév.

Brute force-szal azért gondolom leizzasztja majd a processort...
Előzmény: Jimmy the Hand (12516)
Jimmy the Hand 2010. aug. 9. Creative Commons License 12516
A brute force módszernél jobbat nem tudok, de szerintem jobb lenne, ha a karakterláncot szavakra bontanád, és e szavakra, vagy a szavak első n-2 karakterére keresnél rá a nevek alkotta oszlopban. Egyrészt gyorsabb így, másrészt arra is kell gondolni, hogy ha valaki "Edelényben kapál", az két keresztnév, de mégse név.
Előzmény: SQLkerdes (12512)
Jimmy the Hand 2010. aug. 9. Creative Commons License 12515
Bocs, butaságot kérdeztem....
Előzmény: Jimmy the Hand (12514)
Jimmy the Hand 2010. aug. 9. Creative Commons License 12514
Mit kezdesz azzal, hogy Gipsz Jakabné?
Előzmény: SQLkerdes (12512)
Delila_1 2010. aug. 9. Creative Commons License 12513
Feltöltöttem ide: http://data.hu/get/2848215/Magyar_keresztnevek.xls.html
Előzmény: SQLkerdes (12512)
SQLkerdes 2010. aug. 9. Creative Commons License 12512
Sziasztok,

Tud valaki olyan forrást, ahonnan a magyar keresztnevek listáját valamilyen excel által ehető formában megszerezhetném?

Illetve ha valakinek van valamilyen praktikus ötlete a lenti problémára, nagyra értékelném, ha az arcomba vágná!
Írnom kéne egy kis kódot, ami meghatározza, hogy egy karakterlánc (amit egy adatbázisból szedek ki) név-e. Speciális okokból a nevek egy nagy részénél a név után ott lesz az anyja neve is zárójelek között, így ezek esetében a zárójel jelenléte ügydöntő (más, nem név tipusú adatok nem fognak zárójelet tartalmazni).
Viszont lesznek esetek, amikor bár név az adott karakterlánc, de mégsem lesz ott a zárójeles anyja neve. Egyéb ötlet híján arra gondoltam, hogy brute force módon egy INSTR függvénnyel megnézem, hogy a karakterlánc tartalmazza-e a magyar keresztnevek valamelyikét.

Van valakinek valami jobb ötlete a probléma megoldására?
Jimmy the Hand 2010. aug. 9. Creative Commons License 12511
Nincs mit. Örültem a kérdésednek. Ritka csemege az, amikor a kérdező maga is profi, és egyrészt jól tud kérdezni, másrészt kevés szóból is megérti a választ.
Előzmény: HHjj (12510)
HHjj 2010. aug. 9. Creative Commons License 12510

Kedves Jimmy!

 

Köszönöm még egyszer, beépítettem a meglehetősen komplikált környezetbe, működik, tökéletes.

Előzmény: Jimmy the Hand (12481)
Delila_1 2010. aug. 8. Creative Commons License 12509

Eddig nem vettem észre ezt a védelmi lehetőséget (nem is volt rá szükségem), de miután Jimmy megadta, hol állítható be, egyszerű makrórögzítésekkel ezeket kaptam:

 

Sub Rögzítés1()
    'Védelem
    ActiveSheet.Protection.AllowEditRanges.Add Title:="Tartomány1", Range:= _
        Columns("A:A"), Password:="MegyoG"
    ActiveSheet.Protection.AllowEditRanges.Add Title:="Tartomány2", Range:= _
        Columns("C:C"), Password:="Józsi"
End Sub

.

 

Sub Rögzítés2()
    'Védelem feloldása
    ActiveSheet.Protection.AllowEditRanges(1).Delete
    ActiveSheet.Protection.AllowEditRanges(2).Delete
End Sub

Előzmény: MegyoG (12508)
MegyoG 2010. aug. 8. Creative Commons License 12508

Azt ismerem és tudom hogy kell beéllítani, csak mindezt vba kóddal szeretném ha lehet ilyet.:)

Meg ezeknek a feloldása.

 

Jimmy the Hand 2010. aug. 8. Creative Commons License 12507
Van egy olyan, hogy Eszközök -> Védelem -> Tartomány módosításának engedélyezése. Itt nézzél szét.
Előzmény: MegyoG (12506)
MegyoG 2010. aug. 8. Creative Commons License 12506

Szia!

 

Hallottam már erről az "on change" eseményről de nem találkoztam vele semmilyen példaprogramba.

Annyira nem ismerem, és nem tudom hogy használjam.

Ha ebbe tudnál segíteni az jó lenne.:)

 

Előzmény: szkripnyik (12505)
szkripnyik 2010. aug. 7. Creative Commons License 12505
Ötlet:
Az On_change eseményre kéne építeni.

Ha változtatott cella az adott tartományban van, akkor INBOX függvénnyel bekérni a jelszót.
Előzmény: MegyoG (12504)
MegyoG 2010. aug. 7. Creative Commons License 12504

Helloka!

 

Azt hiszem sikerült, csak nem az amit igazából szerettem volna az nem :(

Az összes celláról levettem a zárolást és csak egy adott tartományra tettem vissza.

Beírtam a kódot és írásvédetté tette azt a tartományt amit zároltra állítottam.

Ez így szép és jó csak én jelszóvédetté szerettem volna tenni a módosítását az adott celláknak.(Mármint ha ínék bele azonnal a jelszót kérné)

Ha van erre ötlet szeretettel várom.

 

És nagyon köszönöm az eddigieket is:)

 

Előzmény: boraka (12503)
boraka 2010. aug. 7. Creative Commons License 12503

Szia!

 

1. Állítsd be az adott tartományra  a cellák zárolását: Cellaformázás -> Védelem. (Alapból az egész munkalapon zárolva vannak a cellák!)

 

2. Futtasd az alábbi kódokat

 

Sub LapvédelemBE()

  Sheets("Munka1").Protect Password:="12345", DrawingObjects:=True, Contents:=True, Scenarios:=True 
End Sub


Sub LapvédelemKI()

    Sheets("Munka1").Unprotect Password:="12345"
End Sub 

Előzmény: MegyoG (12500)
bejgleee 2010. aug. 6. Creative Commons License 12502
Köszi a segítséget!!!
Makróval tényleg egyszerűbb lenn, de sok esetben le van tiltva.
Nem egyszer fordult elő, hogy panaszkodnak, mert "nem csinál semmit".

Átrágom magam azon írtál! :-)
Köszi!
Előzmény: SQLkerdes (12497)
MegyoG 2010. aug. 6. Creative Commons License 12501

Sziasztok!

Abban szeretnék segítséget kérni hogy hogyan tudnám vba kóddal megoldani a tartomány védelmet.

Egy excel táblán szeretném levédeni az "A" és "C oszlopot.

Előre is köszi.

 

Puszi:)

MegyoG 2010. aug. 6. Creative Commons License 12500

Sziasztok!

 

Még új vagyok itt, szeretnék segítséget kérni abba hogy hogy tudnám megoldani

vba kóddal az excel táblámba a tartomány védelmet.

PL:az "A" és a "C" oszlopot szeretném jelszóval védeni.

Előre is köszönöm.

 

Puszi:)

gabszak 2010. aug. 6. Creative Commons License 12499
jól letrimmeli a szóközöket... köszi!
Előzmény: Jimmy the Hand (12487)
SQLkerdes 2010. aug. 6. Creative Commons License 12498
Most megnéztem és az én táblám vége egyezik a te példa-megoldásoddal (egy számot még ki is hagytál, a 2 háromszor fordul elő).

És most elárulod, hogy ez milyen valós életbeli probléma excel vetülete?
Előzmény: bejgleee (12484)
SQLkerdes 2010. aug. 6. Creative Commons License 12497
FIGYELMEZTETÉS: lehet, hogy a te excel-edben a függvényekben található vesszők helyett pontosvesszőket kell használni!
SQLkerdes 2010. aug. 6. Creative Commons License 12496
Ez egyébként tipikusan az a probléma, amit makróban sokkal egyszerűbb megcsinálni :-)
SQLkerdes 2010. aug. 6. Creative Commons License 12495
Harmadik segédtábla:
- az Z6:AC15 tartományba kerül (4 oszlop, mert az adatzona-nak 4 sora van, 10 sor, mert 10 szám előfordulását keresed)
- VIGYÁZZ, az első oszlop képlete más mint a többié!

Szóval, az első oszlop első cellájába (Z6) a következő képlet kerül:
=IF(S6="","",S6)
SIMA ENTERREL kell a függvényt lezárni.

Ezt sima copy-paste-tel másold be a Z oszlop többi üres releváns cellájába (Z7:Z15)

A többi oszlop cellája:
Az AA6 cella tartalma a következő legyen:
=IF(T6="","",T6-S6)
Sima ENTER-rel kell lezárni.

Azt a képletet ebből a cellából sima copy-paste-tel másold át az AA:AC releváns celláiba.

Ha minden igaz kész vagy.
SQLkerdes 2010. aug. 6. Creative Commons License 12494
Bocsánat, elrontottam, szóval a képlet helyesen:
=IFERROR(SMALL(IF($H6:$Q6<0,"",$H6:$Q6),COLUMN(A1)),"")

(A dollárjelek máshol vannak)
Előzmény: SQLkerdes (12493)
SQLkerdes 2010. aug. 6. Creative Commons License 12493
Második segédtábla:
- az S6:V15 tartományt foglalja el (4 oszlop, mert 4 sora van az adatzona-nak, 10 sor, mert 10 számot keresel. Azért az S-ben kezdődik, mert csak :-)

Az első cellába (S6) a következő képlet kerül:
=IFERROR(SMALL(IF($H$6:$Q$6<0,"",$H$6:$Q$6),COLUMN(A1)),"")

Szintén Control-Shift-Enterrel lezárni, {} közé kerül a képlet ha jól csináltad.

Ezt a cellát most másold át sima copy-paste-tel az S6:V15 tartomány üres celláiba.

Most azt látod, hogy a negatív számok eltűntek és az első segédtábla számai egymás mellé kerültek.
SQLkerdes 2010. aug. 6. Creative Commons License 12492
A lenti képletet, sima Copy-Paste-tel másold át a segédtábla minden cellájába.
Most a H6:K15 tartományban számokat látsz, a te példád alapján:
H6:K6: 0 1 -1 -1
H7:K7: 0 1 2 -1
H8:k8: -1 1 -1 3
...
H15:K15: -1 -1 -1 -1 (10-es szám egyik sorban sincs)

ezzel kész az első segédtábla
Előzmény: SQLkerdes (12491)
SQLkerdes 2010. aug. 6. Creative Commons License 12491
Tudnivalók:
- a te lenti példádat használtam úgy hogy egy sheet bal felső sarkában vannak a számok: A1:F4
- ezt a tartományt elneveztem 'adatzona'-nak. így csak a Name Manager-ben kell majd az adatzona hivatkozasi tartományát megváltoztatnod, ha a saját adataidra akarod használni a cuccot
- a segédtábla úgy épül fel, hogy az eredmények a H6 cellától kezdődnek,
- a segédtábla fejléce (5-ös sor) tartalmazza számként az egyes sorok számát, tehát H5=1, I5=2, J5=3, K5=4 (a példádban négy sora volt a forrás adatmátrixnak)
- a segédtábla oldalsó fejléce (G oszlop) tartalmazza a számokat, amiket keresünk, vagyis G6=1, g7=2, g8=3, ... g15=10 (azt mondtad 10 számjegyed van).

Miután mind a forrás-, mind a segédtáblázatodat így felállítottad, a H6 cellába (1-es számjegy előfordulása az első sorban) a következő kerül:
=IFERROR(MATCH($G6,OFFSET(adatzona,H$5-1,0,1),0)/MATCH($G6,OFFSET(adatzona,H$5-1,0,1),0),0) *ROW(OFFSET(adatzona,H$5-1,0,1))-1

Ezt a képletet Control-Shift-Enterrel zárd le! Ha jól csináltad akkor a képlet a szerkesztőlécben ilyen zárójelek közé kerül: {}
SQLkerdes 2010. aug. 6. Creative Commons License 12490
Na, szóval.

A problémát az jelenti, hogy az eredmény-mátrixod egyes oszlopai más pozíciót jelölnek más más sorban.
Érthetően a példád alapján:
1-es számjegy eredményei: 0 1 (ahol az eredmény első számjegye (0) az első sor eredményét, a második számjegye (1) a második szor eredményét jelenti)
3-as számjegy eredményei: 1 2 (ahol az eredmény első számjegye (1) a második sort jelenti, a második számjegye a negyediket.

Szóval egy lehetséges megoldás (több fázisos megoldás):
1.) Első segédtábla, valahol elrejtve a táblázatodban: Annak kiszámolása, hogy van-e egy adott sorban találat az adott számra, ha van, akkor az eredmény a sor száma mínusz egy, ha nincs akkor egy azt nyilvánvalóan jelölő eredmény (én a mínusz 1-et választottam.
2.) Második segédtábla, a fenti segédtáblából csak a releváns (pozitív v. nulla) eredmények, egymás után felsorolva (vagyis ha két releváns szám között van egy mínusz 1, akkor azt ki kell hagyni
3.) Harmadik segédtábla, a második segédtábla adatainak különbsége.

Megoldás segédtáblánként külön hozzászólásként.
Előzmény: bejgleee (12484)
bejgleee 2010. aug. 6. Creative Commons License 12489
:-)
Hálás vagyok!
Előzmény: SQLkerdes (12488)
SQLkerdes 2010. aug. 6. Creative Commons License 12488
Van ötletem és dolgozom rajta...
Előzmény: bejgleee (12484)
Jimmy the Hand 2010. aug. 6. Creative Commons License 12487
a magyar neve: TRIM
:)
Előzmény: SQLkerdes (12486)
SQLkerdes 2010. aug. 6. Creative Commons License 12486
Erre való a TRIM függvény.
Szóval A1=b1 helyett TRIM(A1)=TRIM(B1)

Nem tom mi a magyar neve neki, de a gúgli tuti megmondja.
Előzmény: gabszak (12485)
gabszak 2010. aug. 6. Creative Commons License 12485
bocs, mégvalami. azt ki tudom valahogyan küszöbölni, hogy ne figyeljen a véletlenül beütött szóközökre? tehát vegye ugyanannak az " x"-et és az "x"-et.
Előzmény: E.Istvan (12480)
bejgleee 2010. aug. 6. Creative Commons License 12484
Sziasztok!
Leegyszerűsítve a problémám:
Van 10 számjegyem. Legyen 1..10.
Ezeknek a számoknak soronként különböző előfordulásai vannak:
2 4 5 6 9 1
4 8 2 1 3 7
5 2 8 9 6 4
3 4 5 9 7 6
egy sorban egy szám csak egyszer szerepel.
A feladat, hogy megszámoljam a számjegyek előfordulásának távolságát.
Eredmény: az első oszlopban a számjegy, a következőkben pedig a a távolságok (az előző előforduláshoz képest)
1. 0 1
2. 0 1
3. 1 2
4. 0 1 1 1
5. 0 2 1
6. 0 2 1
7. 1 2
8. 1 1
9. 0 2 1
Tehát az 1-es szám szerepel az első sorban, és az első sorhoz képest még a következőben
Az 5-ös szám például szerepel az első, harmadik, negyedik sorban. Így az 5-ős távolságai egymástól: 0-2-1.
Van ötletetek?
Bejglee
gabszak 2010. aug. 6. Creative Commons License 12483

ööö... köszi. ez mondjuk megfordulhatott volna a fejemben. azt hittem van erre külön "gomb". kösz még1x

Előzmény: E.Istvan (12480)
HHjj 2010. aug. 6. Creative Commons License 12482
Jimmy!

Nagyon köszönöm. Szárazon olvasva jónak tűnik. Be kell illesztenem egy bonyolultabb környezetbe. Jövő héten visszajelzek.
Előzmény: Jimmy the Hand (12481)
Jimmy the Hand 2010. aug. 6. Creative Commons License 12481
Hát, van itt egy elképzelés. Nem a legszebb, eddig nincs jobb ötletem.

Standard kódmodulra:

Public WS As Worksheet

Sub main()
Ciklus MostKezdjük:=True
End Sub


Public Sub Ciklus(MostKezdjük As Boolean)
Static wsi As Long

If MostKezdjük Then wsi = 0
wsi = wsi + 1
If wsi > ThisWorkbook.Worksheets.Count Then Exit Sub
Set WS = ThisWorkbook.Worksheets(wsi)

MsgBox WS.Name & " - üzenet 1"
MsgBox "üzenet 2"
UserForm1.Show
End Sub

UserForm moduljára:

Private Sub CommandButton1_Click()
MsgBox WS.Name & " - üzenet 3"
MsgBox "üzenet 4"
Unload Me
Ciklus False
End Sub


Ha a ciklusod után még van valami futtatandó, akkor azt külön Sub-ba kellene tenni, és a
If wsi > ThisWorkbook.Worksheets.Count Then Exit Sub
helyett
If wsi > ThisWorkbook.Worksheets.Count Then Még_valami
mintájára indítani.
De lehet még cizellálni ezen, az alapötlet a statikus változó használata volt.
Előzmény: HHjj (12478)
E.Istvan 2010. aug. 6. Creative Commons License 12480

Ha jól értem a feladatot, két oszlopban (mondjuk A és B) adatok vannak. Ha A oszlopban és B oszlopban egymás mellett ugyan az van akkor legyen formázva.

Egyedi formázás képlettel:

=$A1=$B1

ha az üreseket nem akarod formázni:

=ÉS($A1=$B1;NEM(ÜRES($A1));NEM(ÜRES($B1)))

Előzmény: gabszak (12479)
gabszak 2010. aug. 5. Creative Commons License 12479
üdv!
a feltételes formázással kapcsolatban szeretném a nagyérdemű segítségét kérni.
azt szeretném, ha két oszlopban csak akkor emelné ki az azonos tartalmú a cellákat, ha azok ugyanabban a sorban vannak, vagyis szűkíteni kellene valahogy az ismétlődő értékek beállítást egy adott tartományról soronkénti figyelembevételre. remélem érthető...
előre is köszi a segítséget!
HHjj 2010. aug. 5. Creative Commons License 12478
Kedves Jimmy!

Köszönöm, erre én is gondoltam, de sajnos nem jó, mert mint azt a kiegészítésben írtam, az egész egy loop-ban fut. Tehát, ha a javaslatodnak megfelelően járok el, akkor az utasitas3-t és utasitas4 nem fut le, de a loop következő iterációjában lévő utasitas1-t és utasitas2 igen, majd a program megint meg akarja mutatni a formomat, ami még a user lassúsága miatt nem is unload-olódott.
Előzmény: Jimmy the Hand (12477)
Jimmy the Hand 2010. aug. 5. Creative Commons License 12477
Ha jól sejtem, akkor az utasitas3-t és utasitas4-et az OKButton_Click eseménykezelőből kellene meghívni. Erre gondoltál?
Előzmény: HHjj (12475)
HHjj 2010. aug. 5. Creative Commons License 12476

Pontosítok az előzőhöz, az egész cucc ciklusban fut:

 

For each mysheet in Workseets()

  utasitas1

  utasitas2

  UserForm1.show

  utasitas3

  utasitas4

next mysheet

HHjj 2010. aug. 5. Creative Commons License 12475

Segítséget kérek.

 

Egy hosszabb program közepén meghívnék egy userformot. Meg szeretném engedni, hogy a userform megjelenése után a felhasználó kijelölhessen cellákat vagy range-et az activesheet-en, majd a userformra OK gombjára kattintva folytatódjon a végrehajtás, de a UserForm.Show utasítás utáni parancsok (utasitas3, utasitas4,...) csak akkor hajtódjanak végre, amikor az OKButton_Click trigger lefutott.

 

Ha modálisként nyitom meg a userformot, akkor a felhasználó nem tud kijelölni. Ha nem modálisnak nyitom meg, akkor viszont folytatódik a végrehajtás a userform "mögött" az utasitas3, utasitas4 végrehajtásával.

 

Mi itt a megoldás?

 

Formálisan így néz ki a kód:

 

utasitas1

utasitas2

UserForm.Show Modal (vagy Modeless)

utasitas3

utasitas4

 

Köszönettel:

HHjj

Jimmy the Hand 2010. aug. 3. Creative Commons License 12474
Ide:
jimmythehand (kukkacc) mailbox (ponty) hu
Előzmény: madbazsi (12473)
madbazsi 2010. aug. 3. Creative Commons License 12473

nos nem piros lett, hanem fehér, de az excelben látom (ahol nincs rácsozás az lenne fehérre festve).

Meg tudnád nézni?

Hova küldjem?

Előzmény: Jimmy the Hand (12472)
Jimmy the Hand 2010. aug. 3. Creative Commons License 12472
A "bibi" üzenet akkor jön, ha nem talál meg egy olyan számot a bemenő adatok listájában, amelyet előzőleg kiválasztott, mint a keresett összeg egyik komponensét. Tehát pl. a program megállapítja, hogy a felsorolt értékek közül a 7 + 8 + 1 kombinációjával lehet a 16-ot előállítani, utána sorban megkeresi a korábban már egyszer megtalált értékeket, kiszínezés céljából, de most az egyiket nem találja... Ennek nem volna szabad bekövetkeznie, szóval gőzöm sincs, mi lehet a baj.

Ha esetleg el tudnád küldeni a tesztadataidat, meg tudnám nézni, miért akad el.

A színezésnél mindent össze kell adni, amit kiszínez. Itt az lehet a gond, hogy ha túl sok találat van, és mindegyik más színű, akkor akadhat köztük olyan, amit az automatikus háttérrel azonos színre "fest". Így aztán ez a szám nem tűnik ki a többi közül.

Módosítsd a makrót úgy, hogy
hit.Interior.ColorIndex = ix + 2

helyett

hit.Interior.ColorIndex = 2

legyen. Így minden találat azonos (azt hiszem, piros) színű lesz, nem bújik el egy sem.
Előzmény: madbazsi (12471)
madbazsi 2010. aug. 3. Creative Commons License 12471

Ma volt egy másik próbám 141 sorral.

100e kombináció - kb 5 másodperc - utána jött az üzenet "heurék" utána "bibi".

A "bibi"nél a makróban a Stop-ot mutatta, gondolom ezzel fejezi be.

Viszont rengeteg szép szivárványos szín jeleölte nekem a kombinációkat, viszont, ha azokat összeadtam nem jött ki.

Egy színhez tartozzó számokat kell csak vennem, vagy mindent, amit kijelölt össze kellene adnom?

Köszi

Előzmény: Jimmy the Hand (12464)
Delila_1 2010. aug. 3. Creative Commons License 12470
Van a mátrixod, pl. A1:C5 tartományban.

Amelyik cellában kezdeni akarod a vektort, beírod: =A1. Ezt lemásolod 4 cellán át (összesen 5 cellában lesz a képlet). Alá beírod: =B1, szintén lemásolod, végül alá =C1, másolod.

Vagy:
Nézd meg a transzponálás függvényt. Ahhoz ki kell jelölnöd annyi cellát egymás alatt, amilyen széles a mátrixod, jelen esetben ez 3. Beírod: =transzponálás(A1:C1), majd Ctrl+enterrel viszed be a kijelölt 3 cellába.
Az alatta lévő 3 cellát újra kijelölöd, =transzponálás(A2:C2), Ctrl+enter. És így tovább A5:C5-ig.

Mindkét esetben érdemes az újonnan létrehozott vektort kijelölni, másolni, majd értékként ugyanoda beilleszteni, de csak abban az esetben, ha az eredeti mátrix változásait nem kell követnie a vektor értékeinek.
Előzmény: bandikaa (12469)
bandikaa 2010. aug. 2. Creative Commons License 12469
ez viszont ON:

Hogyan lehet megoldani, hogy az excel egy mátrixból egy db oszlopot csináljon?
bandikaa 2010. aug. 2. Creative Commons License 12468
tárgytalan... a space jóbarát :P
bandikaa 2010. aug. 2. Creative Commons License 12467
ja, A2 = 3,
B2 null
C1 =1, de ez nem játszik.
Előzmény: bandikaa (12466)
bandikaa 2010. aug. 2. Creative Commons License 12466
Sziasztok, excelnek hogyan lehet megadni egy logikai vizsgálat eredményeként a NULL-t? :)

=HA(KÖZÉP($B2;$C$1;2)="";"";ÖSSZEFŰZ($A2;":";KÖZÉP($B2;$C$1;2)))

Ennek az eredménye "3:" pedig ""-nak azaz nullnak kellene lennie.
madbazsi 2010. aug. 2. Creative Commons License 12465

Sajnos, nem vártam végig a végeredményt!

De az vettem észre, hogy sorbarendezés nélkül olyan 41e-nél áll meg alul a számkombináció variációk számlálója, sorrendezés nélkül 122e környékére futott fel.

Sajnos sehogy nem tudom szürni a 170 sort. Van amikor a hülye partner 4 hónapnyinál régebbbi számlát utal, van mikor már kifizeti az augusztus 31-ével lejárókat!

A futtatásom most 12:45-töl fut, és csak fehér képernyöm van!Nem tudom majd talán szakaszosan veszem majd - hátha pl. az elsö 50 sorban meglenne - ha nem majd bövítem.

A makrót természetesen módosítottam , ahoyg javasoltad/kérted, tehát remélem már csak pár pillanat és könyvelhetem a tételt... :-))

Előzmény: Jimmy the Hand (12464)
Jimmy the Hand 2010. aug. 2. Creative Commons License 12464
"Kérdésem volna: az normális, hogy ha növekvö sorrendbe tettem a tételeket (170 db) akkor lényegesen nagyobb kombináció eshetöséget adott meg (kb 120 ezer), mintha nem lett volna sorrendbe (41 e)?"

Ezt nem teljesen értem.
Ha növekvő sorba rendezed a tételeket, akkor nagyobb lépésszám alatt jut el ugyanahhoz az eredményhez? Ha így van, az nem normális. A makró automatikusan nagyság (pontosabban kicsiség) szerinti sorrendben veszi elő az adatokat, erre való a KICSI() munkalapfüggvény (Application.WorksheetFunction.Small). Tehát elvileg az adatok rendezettsége nem kellene, hogy befolyásolja a futást. Ha mégis ez történik, akkor talán elfelejtetted a makróban módosítani a bemeneti tartományt A3:A29-ről A3:A172-re. (?)

"de az normális, hogy az excel nem reagál semmire? és olyan mintha összeomlott volna?"

Ez normális, nekem is így csinálta. De ellenőrzésképpen a program futását bármikor meg lehet szakítani. Ehhez aktiváld az Excel ablakot (kattints rá a tálcán, aztán várj, amíg felülre kerül), aztán nyomj egy Ctrl+Break-et. Ekkor feljön az ablak, hogy kód megszakítva, és akarod-e folytatni, vagy kilépni, stb.
Ha folytatod, akkor egy ideig megint megy a lépésszámok kiíratása alul az állapotsorba. Ha a Debug funkciót választod, akkor F8-cal tudod léptetni a kódvégrehajtást, és közben a Locals ablakban tudod ellenőrizni a változók aktuális értékét. F5-tel lehet továbbküldeni a futást.

"èn türelmes vagyok és várok akár 3 órát is..."

Nem akarlak elkeseríteni, de 170 adat az nagyon sok. Nekem a korábban megadott 27 adatoddal ment a futás 75 percig. A futási idő az adatok számával exponenciálisan nő. 170 adattal a Naprendszer pusztulásáig sem végezne a gépem.

Nagyon érdemes lenne fontolóra venned a korábbi javaslatomat, hogy amennyire csak lehet, csökkentsd le az adatok számát. Akárhogyan. Ha pl. emlékszel rá, hogy a május 6. környékén nem volt 5000 Ft-nál nagyobb értékű kiszállítás, akkor dobd ki az összes 5000 fölötti tételt, amíg a május 6-i utalást próbálod visszafejteni.

Egy másik ötlet: ha több utalásod van, kezdd mindig a legkisebb végösszegűvel. Annak kerestesd meg az összetevőit, és ha megvan, azokat a tételeket rögtön töröld ki a listából, mielőtt a következő utalással próbálkozol.

Később megpróbálom felgyorsítani a programot, de most nincs rá időm.
Az alapötlet az, hogy beolvasni a cellaadatokat tömbbe. Tömbökkel, azt hiszem, sokkal gyorsabbak a műveletek, mint munkalapcellákkal. Ha valaki profi ráér megcsinálni ezt a módosítást, tegye meg kérem.

Ha nem világos, amiket leírtam, esetleg küldd el emilben az adataidat, persze előbb minden privát információt törölj belőle.
Előzmény: madbazsi (12463)
madbazsi 2010. aug. 2. Creative Commons License 12463

Nos, megcsináltam - félig,meddig- az elsö tesztet.

Kérdésem volna: az normális, hogy ha növekvö sorrendbe tettem a tételeket (170 db) akkor lényegesen nagyobb kombináció eshetöséget adott meg (kb 120 ezer), mintha nem lett volna sorrendbe (41 e)?

A bajom az, hogy tényleg sokat fut, de az normális, hogy az excel nem reagál semmire? és olyan mintha összeomlott volna?

èn türelmes vagyok és várok akár 3 órát is, de így rendben vannak a dolgok?

Köszi

Előzmény: Jimmy the Hand (12461)
Jimmy the Hand 2010. júl. 28. Creative Commons License 12461
Nincs mit, és gratulálok :)
Azért a mézeshetek alatt inkább ne ezzel foglalkozz ;)
Előzmény: madbazsi (12460)
madbazsi 2010. júl. 28. Creative Commons License 12460

Bocsánat! Házasodtam a hétvégén, aztán nem nagyon érdekelt, hogy hogy fizetnek a francia vevök!

Nagy vagy JTH! Csak végigfutottam a dolgokat, még nem próbáltam ki, de ma is jött két fizetés, amin ezt a dolgot kipróbálom.

Most csak azért írok, hogy nagyon köszi, hogy törödtél az esetemmel!

Előzmény: SQLkerdes (12427)
Jimmy the Hand 2010. júl. 28. Creative Commons License 12459
Én az utóbbira tippelek. Nyáron a programok is lassabban futnak. Főleg ilyen kánikulás időszakban, amikor nem lehet életben maradni légkondi nélkül. Elég, ha bekapcsolsz két légkondit, azok már annyira leszívják az elektromos hálózatot, hogy a számítógépnek alig marad táp, és tökre lecsökken az órajele.
:o)
Egyszer olyat is láttam, hogy a hálózatból olyan kevés áram csordogált, hogy a konnektor csak egy autóakkumulátorral sorba kötve tudta fedezni a PC energiaigényét.
;o)
Előzmény: SQLkerdes (12458)
SQLkerdes 2010. júl. 28. Creative Commons License 12458
Úgy látszik, hogy madbazsi inkább felhívta az ügyfelet, hogy magyarázzák el neki miért annyit utaltak amennyit.

Vagy még most is fut a kód neki :-)
Előzmény: SQLkerdes (12427)
Jimmy the Hand 2010. júl. 28. Creative Commons License 12457
Lehet, hogy erre szükséged lesz:

http://activex.microsoft.com/controls/vb6/msinet.cab

Win7 alatt nem működik, de XP alatt OK.
Előzmény: BBnn (12456)
BBnn 2010. júl. 27. Creative Commons License 12456
A hibakezelési rész értelmét vesztette. Most már pontosak a letöltési link címek.
Előzmény: BBnn (12452)
Jimmy the Hand 2010. júl. 27. Creative Commons License 12455
Próbáld ezt átalakítani:

Function DownloadFile(ByVal URL As String, ByVal FN As String) As String
Dim i As Inet, Adatok() As Byte
Dim j As Long, s As String

Set i = New Inet
With i
.protocol = icHTTP
.URL = URL
Adatok() = .OpenURL(.URL, icByteArray)
End With
Set i = Nothing
If UBound(Adatok) = -1 Then
DownloadFile = "nincs meg a szerver"
Else
For j = LBound(Adatok) To Application.WorksheetFunction.Min(UBound(Adatok), 1000)
s = s & Chr(Adatok(j))
Next
If InStr(s, "404 Not Found") > 0 Then
DownloadFile = "nincs meg a fájl"
Else
Open FN For Binary Access Write As #1
Put #1, , Adatok()
Close #1
DownloadFile = "OK."
End If
End If

End Function

Sub DownThemAll()
Dim Rng As Range, c As Range
Set Rng = ActiveSheet.Range("A1:A3")
For Each c In Rng
Application.Cursor = xlWait
c.Offset(, 2) = DownloadFile(c.Value, c.Offset(, 1).Value)
Application.Cursor = xlDefault
Next
End Sub
Előzmény: BBnn (12452)
Jimmy the Hand 2010. júl. 27. Creative Commons License 12454
Van egy ötletem, de nem biztos, hogy működni fog.

Function CF_Color(Target As Range) As Long
Dim Bln(1 To 3) As Boolean, i As Long

On Error Resume Next
For i = 1 To 3
Bln(i) = Evaluate(Target.FormatConditions(i).Formula1)
Next
On Error GoTo 0
If Bln(1) Then
CF_Color = Target.FormatConditions(1).Interior.Color
ElseIf Bln(2) Then
CF_Color = Target.FormatConditions(2).Interior.Color
ElseIf Bln(3) Then
CF_Color = Target.FormatConditions(3).Interior.Color
Else
CF_Color = Target.Interior.Color
End If
End Function

Na most, ez egy olyan kód, ami kiértékeli a feltételes formázás képletét.
Eleve tehát csak akkor működhet, ha a feltételes formázás képlet típusú.
A másik problémám, hogy a FormatConditions(i).Formula1 kifejezés a magyar Excelben magyar nyelvű képleteket ad vissza, amivel az Evaluate nem tud mit kezdeni, tehát hibára fut.
Gyanítom, hogy angol Excelben működni fog, de momentán nincs ilyen a közelemben, és ezért nem tudom letesztelni.

Előzmény: SQLkerdes (12447)
boraka 2010. júl. 27. Creative Commons License 12453
Nézz be ide, itt is pont erről volt szó.
Előzmény: SQLkerdes (12447)
BBnn 2010. júl. 27. Creative Commons License 12452
Az excel-ben egy táblán le van kérdezve az oldal.
/ Adatok / Külső adatok importálása / Web lekérdezés /

A linkből külön munkalapon kiszedve a cím, stb.
Az elérés html.

Ha a linkre kattintok (pl. RTF, vagy PDF, vagy valami más állomány) akkor azt beszeretné tölteni az adott programba.
A kiterjesztés nem egyértelmű.
Tehát
1. próbálkozás: "http://xxxxx/xxxx/xxxxx/yyyyy."+"rtf" ha nem létezik, akkor
2. próbálkozás: "http://xxxxx/xxxx/xxxxx/yyyyy."+"pdf" ha nem létezik, akkor
3. próbálkozás: ...
A lehetőségek végesek.

Hibás cím esetén feldob egy hibaüzenetet, de az egér kattintáson kívül nem találtam megoldást.

Nekem a "mentés másként" funkciót kéne elővarázsolnom lehetőleg az adott program nélkül és ne manuálisan, mert kicsit sokat kéne ismételni.

Az állományok nyilvánosan elérhetőek. A weboldal másoló progik nem oldják meg a problémát, mert át kéne nevezni az állományokat és adatbázisba bejegyezni ha letöltésre került.

Az oldal linkjei tartalmazzák a szükséges neveket, csak az állományok fizikai nevei semmitmondóak.

Előzmény: SQLkerdes (12444)
Törölt nick 2010. júl. 26. Creative Commons License 12451
elnézést. a kódot a makrórögzítő generálta új munkafüzet létrehozásakor és mentésekor
Előzmény: Törölt nick (12450)
Törölt nick 2010. júl. 26. Creative Commons License 12449
Makrórögzítő:

Workbooks.Add
ChDir "C:\UsersRendszergazda\Desktop"
ActiveWorkbook.SaveAs Filename:= _
"C:\Users\Rendszergazda\Desktop\Munkafüzet2.xlsx", FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
Előzmény: Törölt nick (12448)
SQLkerdes 2010. júl. 26. Creative Commons License 12447
Azt meg tudja valaki mondani, hogy hogy tudom VBA-ban kiolvasni, hogy egy cella Conditional Formatting-ban igazra értékelődött-e?

Van egy listám, ott Conditional Formattinggal bizonyos ismérvek szerint kiértékeltem az elemeket és amikre a feltételem igaz azoknak a hátterét sárgára változtattam.

Gondoltam ravasz leszek és VBA-ból kiolvasom a háttérszín kódját (Range.Interior.Color), de - kellemetlen meglepetés - a Conditional Formatting nem változtatja meg a hátérszínt (már úgy értem, hogy kód szinten, mert a képernyőn persze).

Tudom, a kiértékelést amit a CF csinál, meg tudnám csinálni a VBA-ban is, de az időtrabló dolog, meg az xl már egyszer megcsinálta, mér dolgozzon kétszer. És valamit kétszer csinálni dupla hibalehetőség (és itt nem az excelben nem bízom, hanem magamban, van néhány kacifántos CF-em).
SQLkerdes 2010. júl. 26. Creative Commons License 12446
Teljesen jogos felvetés, én azt gondoltam, hogy a hibakezelés azt jelenti, hogy ne álljon le a kód, hanem ugorjon a következő linkre.
Előzmény: Jimmy the Hand (12445)
Jimmy the Hand 2010. júl. 26. Creative Commons License 12445
Ha tudod (akarod, stb.) azzal is kiegészíthetnéd, hogy hogyan képzeled el ezt:
"Ha nem létezik, akkor a hibát lekezelni, s egy másik állományt kéne keresnie."

Hol keressen? A HTTP szerveren?
Egyáltalán, HTTP vagy FTP a forrás?
Előzmény: BBnn (12443)
SQLkerdes 2010. júl. 26. Creative Commons License 12444
Ha tudsz (akarsz, stb.) rakj már be lécci egy működő linket, hogy legyen elképzelésünk arról, milyen állományt akarsz megnyitni.

Mert nem mindegy, hogy egy weben keresztül elérhető excel tábláról van szó, vagy egy weblapról kéne webquery-vel adatokat leszedni (volt itt korábban valaki aki pld. a www.valasztas.hu oldalról akart leszedni választóköri adatokat, de azok nem excel formátumban voltak, hanem html-ben).
Előzmény: BBnn (12443)
BBnn 2010. júl. 25. Creative Commons License 12443
Előre köszi, ha valaki tudna segíteni.

Egy excel táblában több ezer hiperhivatkozás van internetes oldalon lévő állományokra.

A linkre rákattintva az állományt betölti, vagy hibaüzenetet ad, hogy nemlétezik.

Olyan megoldást keresek, amit makróból lehetne futtatni, és betöltés helyett a mentés másként funkciót hajtaná végre, természetesen az adott táblázatba előre megadva, hogy hova, milyen néven mentse az állományt.

Ha nem létezik, akkor a hibát lekezelni, s egy másik állományt kéne keresnie.

Ha végzett egy sorral, akkor lépni a következő sorra.
SQLkerdes 2010. júl. 25. Creative Commons License 12442
Köszi, átnézem!
Előzmény: Delila_1 (12441)
Delila_1 2010. júl. 25. Creative Commons License 12441
http://msdn.microsoft.com/en-us/library/aa272310(v=office.11).aspx
http://msdn.microsoft.com/en-us/library/bb149081(v=office.12).aspx
Előzmény: SQLkerdes (12440)
SQLkerdes 2010. júl. 25. Creative Commons License 12440
Tuti nem 2007-es újdonság, mármint a választható elemek kipippantása...
Nem teljesen értem, hogy 2003-ason mér nem sikerül, bár nyilván nem ez a vindózos programok legnagyobb misztériuma.

Ha már az object model-nél tartunk, van valakinek valamilyen javaslata arra, hogy mit érdemes használni az object modell tanulmányozására? Mert az ami pld. az excel helpjében van - az én véleményem szerint - nem túl jól értelmezhető.

Ha valakinek van könyv v. web javaslata, ne tartsa magában!
Előzmény: Jimmy the Hand (12437)
Delila_1 2010. júl. 25. Creative Commons License 12439
2003-ban az autoszűrő egyéni kategóriájában be lehet állítani max 2 feltételt.
Előzmény: Jimmy the Hand (12437)
Jimmy the Hand 2010. júl. 24. Creative Commons License 12438
Ja, xl2007 lehet, mert nálam a Filter objektumnak nincs Count property-je. Attól tartok, így nem tudok válaszolni a kérdésre.
Előzmény: Jimmy the Hand (12437)
Jimmy the Hand 2010. júl. 24. Creative Commons License 12437
Aztat meg hogyan csinálod, hogy "az autofilter legördülőmenüjében - az oszlop tetején - beklikkelem azt, hogy 1, meg azt hogy 2 meg azt hogy 3"?
Nekem sehogy sem sikerül egynél több elemet kiválasztani a listából. Ez valami xl2007-es trükk?
Előzmény: SQLkerdes (12434)
Delila_1 2010. júl. 24. Creative Commons License 12436
Írj be egy hibakezeléssel egy Criteria2-t.
Előzmény: SQLkerdes (12434)
Delila_1 2010. júl. 24. Creative Commons License 12435
Igen, egy oszlopban az első feltételt mutatja.
Előzmény: SQLkerdes (12434)
SQLkerdes 2010. júl. 24. Creative Commons License 12434
Értem én.
Nálam nem oszlop szinten, hanem feltétel-szinten jelentkezett a jelenség.
Mondjuk egy oszlopban vannak hónapok és nekem az első negyedév kell.

Ezt ugye meg lehet csinálni Advanced filterrel, ahol a feltétel: <=3 és akkor a kód gyönyörű szépen kiírja, hogy "<=3".

Ha azonban azt csinálom, hogy az autofilter legördülőmenüjében - az oszlop tetején - beklikkelem azt, hogy 1, meg azt hogy 2 meg azt hogy 3, akkor a kód azt adja vissza Condition-nek, hogy: "1".

Neked nem?
Előzmény: Delila_1 (12433)
Delila_1 2010. júl. 24. Creative Commons License 12433
Nálam kiválóan működik 8-10 oszlopban. Amelyiket szűrtem, annak kiírja a kritériumát.
Előzmény: SQLkerdes (12432)
SQLkerdes 2010. júl. 24. Creative Commons License 12432
A lenti példaként hozott esetben a kódban az F.Count 3-at ad eredményül, szólva lehet még ott is végig kell pörgetni az egyes elemeket....
Előzmény: SQLkerdes (12431)
SQLkerdes 2010. júl. 24. Creative Commons License 12431
Jó kis kód ez is!
Gyorsan ki is próbáltam és azt láttam, hogy ha egy feltételt úgy állítunk be, hogy az autofilter legordülő menüjében több mint 1 tételt kipipálunk (pld, hónap legyen az első három = 1,2,3 bepipálva) akkor csak az 1-est (a feltételek első elemét) írja ki.

Valakinek valami ötlete van a megoldásra?
Előzmény: Jimmy the Hand (12422)
boraka 2010. júl. 24. Creative Commons License 12430
Köszönöm szépen a magyarázatot! Maradok én is a megszokott "páratlan" Set-nél.
Előzmény: Jimmy the Hand (12429)
Jimmy the Hand 2010. júl. 23. Creative Commons License 12429
Csak tippelni tudok.
Régebben még rendszeresen használtam a Set Akármi = Nothing utasításokat.
Aztán egy másik fórumon egy nagytudású tag felvilágosított, hogy VBA-ban, amikor egy függvény/szubrutin véget ér, az összes ott deklarált objektumváltozó (kivéve a statikusakat) megy a szemétbe. Más szóval, az End Function/End Sub implicite tartalmazza a Set Akármi = Nothing utasítást. Ennélfogva felesleges külön használni.

Megpróbáltam előkeresni azt a posztot, amiben erről írt, hogy pontosan tudjam visszaadni. De kilátástalannak tűnt a dolog, ezért inkább a neten kerestem rá, hogy mit mondanak.

Nos, a fent leírt dolog elvileg igaz, tehát felesleges lenne "kisemmizni" az objektumokat, csakhogy a VB (és VBA) azon része, amely a memória felszabadítását végzi, akár hibás is lehet. Azt mondják, különösen Access és DAO esetében lehet tapasztalni furcsaságokat, ha az ember nem használja a semmizést. Sajnos, az én tudásom nem terjed odáig, hogy ezeket a dolgokat megértsem, mert ez már nem VB(A), hanem annak is a belső működése. Plusz, lehet, hogy azóta javítottak rajta.

Az biztos, hogy baj nem származhat belőle, ha használod. (Sőt, sokan sorolják a Best Practices közé.) Legfeljebb egy nagyon kicsit hosszabb és lassabb lesz a kódod.
Én most már évek óta nem használom, de még eddig nem tapasztaltam negatív mellékhatást. (Vagy lehet, hogy igen, csak nem vontam párhuzamot?) Ezután sem tervezem használni, legfeljebb akkor, ha valami konkrét gyanú merül fel, hogy szükséges lenne.
Előzmény: boraka (12428)
boraka 2010. júl. 23. Creative Commons License 12428

Szia Jimmy!

 

Azt olvastam valahol, hogy érdemes a Set utasításokat is párban használni, vagyis  minden Set értékadást egy Set .. = Nothing-al kellene lezárni és így a memőriát felszabadítani. Idáig, ezt én sem használtam. Mi a véleményed erről?

Előzmény: Jimmy the Hand (12422)
SQLkerdes 2010. júl. 23. Creative Commons License 12427
Azannya, de szép darab kód ez itten!
És szép frappáns megoldás.

Riszpekt!

Most már csak, ahogy Delila is említette, Madbazsi kell, hogy elmesélje mi lett a dolog vége...
Előzmény: Jimmy the Hand (12402)
Delila_1 2010. júl. 23. Creative Commons License 12426

Ez most [b] Internet Explorer[b] böngésző. Itt még a szögletes zárójeleket is a számbillentyűzetről kellett megadni. A szöletes nyitó a keresét nyitja meg. :(

Delila_1 2010. júl. 23. Creative Commons License 12425
Úgy látszik, ez is böngészőtől, vagy valami egészen mástól függ – mármint a bold karakter.
Előzmény: Delila_1 (12424)
Delila_1 2010. júl. 23. Creative Commons License 12424
Szerintem ez csicsák nélkül is nagyszerű.

Kiváncsi vagyok, most beveszi-e a b-ket, az előző két próbálkozásomnál is úgy írtam, ahogy most jelezted.

Kellene máshol is tanítanod, nemcsak a tudásod, hanem a stílusod miatt is. :)
Előzmény: Jimmy the Hand (12420)
Delila_1 2010. júl. 23. Creative Commons License 12423
Köszönöm, tudtam, hogy Rád számíthatok.
Előzmény: Jimmy the Hand (12422)
Jimmy the Hand 2010. júl. 23. Creative Commons License 12422
Sub teszt()
Dim AF As AutoFilter, F As Filter, i As Long

Set AF = ActiveSheet.AutoFilter
For i = 1 To AF.Filters.Count
Set F = AF.Filters(i)
If F.On Then MsgBox "Az AutoFilter " & i & ". oszlopában bekapcsolt szűrő, feltétel: '" & F.Criteria1 & "'"
Next
End Sub
Előzmény: Delila_1 (12421)
Delila_1 2010. júl. 23. Creative Commons License 12421
Szeretném lekérdezni, hogy egy sokoszlopos, autoszűrővel ellátott táblázat egy adott oszlopához van-e kritérium rendelve?

Tudja valaki ennek a szintaktikáját?
Jimmy the Hand 2010. júl. 23. Creative Commons License 12420
Na igen. Ráment vagy fél napom az agyalásra, mert, mint SQL kolléga megjegyezte, ciklusok egymásba ágyazása ismeretlen mélységben nem olyan magától értetődő dolog. Aztán a gondolat átültetése kódba az absztrakciós képességeimet tette erősen próbára. És végül a tesztelés: végigvárni több tízperces futásokat, mire kiderül, hogy valami nem jó... Mondjuk ez az én hülyeségem, mert választhattam volna egyszerűbb kiindulási adatokat, amivel hamarabb kijön az eredmény.

De azért megérte, mert szerintem jó kis makró ez, bár nem valami csinos. Talán egyszer majd beleteszek olyan csicsákat, hogy adattartományok run-time bekérése, hibakezelés, összes lehetséges variáció megkeresése, eredmények felhasználóbarát tálalása, bővebb kommunikáció a user felé, stb. De ezek már az uncsi kategóriába tartoznak, és jelenleg nem prioritás.

Tanítani csak itt a fórumon szoktam néha, példákon keresztül.
Előzmény: Delila_1 (12417)
Jimmy the Hand 2010. júl. 23. Creative Commons License 12419
A lezáró tag "per b", szögletes zárójelek között.
Nem bízom benne, hogy ha leírom, az megfelelően jelenik meg, úgyhogy inkább képen:
Előzmény: Delila_1 (12418)
Delila_1 2010. júl. 23. Creative Commons License 12418
Nálam nem jól működik ez a kiemelés. Csakis madbazsi nevét akartam félkövérrel írni, ezt az egy szót tettem b-k közé. Már egy előző hozzászólásnál is az első b-től végig kiemelt. Valamivel fel kell oldani a hatását?
Delila_1 2010. júl. 23. Creative Commons License 12417
Csoda, hogy ehhez a makróhoz volt türelmed.

Most már jelentkezhetne madbazsi a megoldásért!

Remélem, tanítasz valahol. :)
Előzmény: Jimmy the Hand (12416)
Jimmy the Hand 2010. júl. 22. Creative Commons License 12416
Nem szükséges.
Eleinte arra gondoltam, hogy az egyforma értékeket azonos színnel jelölöm. Ha például a keresett összeg úgy jön ki, hogy 11 + 15 + 31, és 11-esből van 7 db, 15-ösből meg 3 db, akkor erre fel kellene hívnom a felhasználó figyelmét. De ha mindent pirosra festek, akkor azt fogja hinni, hogy 7 + 3 + 1 = 11 db számot kell összeadni a végösszeghez. Tehát az volt az elképzelés, hogy a 11-esek legyenek kékre festve, a 15-ösök meg zöldre. Aztán a végén már nem volt türelmem beletenni azt a plusz ciklust, amíg az összes 11-est meg az összes 15-öst megkeresi.
Előzmény: Delila_1 (12415)
Delila_1 2010. júl. 22. Creative Commons License 12415
Az utolsó pontra: szükséges különböző háttérszínnel jelölni az összegzendő cellákat?
Előzmény: Jimmy the Hand (12414)
Jimmy the Hand 2010. júl. 22. Creative Commons License 12414
Köszi :)
De nem nagy ügy, csak a vezérfonalat kellett megtalálni.

"Villámgyorsan végzett a számításokkal, 86 lépésben."

Hát ez attól függ. A makró számokat nagyság szerint emelkedő sorba állítva adja össze. Ha az összeged elemei a sor elején vannak, akkor viszonylag hamar megtalálhatja őket. Ha a végén, akkor tovább tarthat.

További problémák, ami a tesztelés során derültek ki:
- ha több megoldás van, csak az elsőt jelzi ki
- ha a megoldás sok értéket tartalmaz, előfordulhat, hogy a végén valamelyiket fehér színnel jelzi ki, tehát nem lesz megkülönböztethető a hulladéktól.
Előzmény: Delila_1 (12412)
Delila_1 2010. júl. 21. Creative Commons License 12413
Szívesen.
Előzmény: Mosely (12411)
Delila_1 2010. júl. 21. Creative Commons License 12412
Fantasztikus vagy!

2 tizedes értékeket vittem be, saját randomokkal. A C3-ba 12 db A oszlopbeli érték összegét adtam meg. Villámgyorsan végzett a számításokkal, 86 lépésben.

A C3-hoz hozzáadtam még 3 számot az A oszlopból. Itt már mértem az időt, 0:00:08!, a lépések száma 10.235 lett.
Előzmény: Jimmy the Hand (12405)
Mosely 2010. júl. 21. Creative Commons License 12411
Remekül működik. Köszönöm Delila!

A. Mosely
Előzmény: Delila_1 (12410)
Delila_1 2010. júl. 21. Creative Commons License 12410
Az Űrlapok eszköztárból tegyél ki egy gombot, ahhoz rendeld a makrót.
Előzmény: Mosely (12409)
Mosely 2010. júl. 21. Creative Commons License 12409
Delila!
Hála és köszönet! Máris elkezdem behegeszteni a kódot.
Üdv

A. Mosely
Előzmény: Delila_1 (12408)
Delila_1 2010. júl. 21. Creative Commons License 12408

Nem kellene másik lapra gyűjtögetni. A felső sorba beteszel egy autoszűrőt (Adatok/Szűrő/Autoszűrő).

 

Az E oszlopot szűröd az egyéni kategóriában, ahol megadhatod a két feltételt:

kisebb vagy egyenlő: kezdő dátum, ÉS

Nagyobb vagy egyenlő: záró dátum

 

Egy üres oszlop első sorába beteszed a függvényt: =RÉSZÖSSZEG(9;C:C), ami mindig a szűrt tartományod számláinak értékét összegzi.

 

Előzmény: Mosely (12406)
Delila_1 2010. júl. 21. Creative Commons License 12407

Igaza volt Robbantómesternek, nem "olyan" kimutatás.

 

Itt a makró a gombodhoz:

 

Sub Kimutat()
    Dim sor As Integer, usor As Integer
    Dim sor_1 As Integer, oszlop As Integer
    Dim kezd As Date, zar As Date
   
    Sheets(2).Select    'Előző kigyűjtött adatok törlése
    Range("A11").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.ClearContents
   
    Sheets(1).Select
    usor = Range("E65536").End(xlUp).Row
    kezd = Sheets(2).Cells(4, 1)
    zar = Sheets(2).Cells(4, 4)
    sor_1 = 11
   
    For sor = 2 To usor
        If Cells(sor, 5) >= kezd And Cells(sor, 5) <= zar Then
            For oszlop = 1 To 5
                Sheets(2).Cells(sor_1, oszlop) = Cells(sor, oszlop)
            Next
            sor_1 = sor_1 + 1
        End If
    Next
End Sub

Előzmény: Mosely (12406)
Mosely 2010. júl. 21. Creative Commons License 12406
1
Előzmény: Mosely (12404)
Jimmy the Hand 2010. júl. 21. Creative Commons License 12405
Lefuttattam a 791-es hsz-ben látható adatokon, kb. 75 perc alatt 130874875 lépésből az jött ki, hogy nincs egyezés. Ha ez a teljes adatsorod volt, akkor vagy tényleg nincs egyezés, vagy nem jó a program...
Előzmény: Jimmy the Hand (12402)
Mosely 2010. júl. 21. Creative Commons License 12404
Előbb azt hiszem nem ment el a kép... Itt van újra...
Előzmény: Mosely (12403)
Mosely 2010. júl. 21. Creative Commons License 12403
Feltöltöttem két képet. Igyekszem elmondani, mit szeretnék.
Az 1-es munkalapon van egy táblázat, benne számlák. A második munkalapon pedig ki lehet íratni, hogy adott időszakban mennyi lett kifizetve. Amit szeretnék az az, hogy legyen egy gomb, aminek a klikk eseménye (remélem jól írom) az, hogy átmásolja és beilleszti azokat a sorokat, amelyek tartalmazzák az adott időszak számláit (és így lehetne látni, hogy miből is áll össze a szumma összeg). A mellékelt képen a gomb még semmit nem csinál és a számlákat tartalmazó sorokat is én másoltam oda, hogy lehessen látni mit is szeretnék.
Előre is köszönöm, ha tudsz/tudtok adni egy olyan kódot, amit hozzá tudnék rendelni a gombhoz.

Üdv
A. Mosely
Előzmény: Delila_1 (12401)
Jimmy the Hand 2010. júl. 21. Creative Commons License 12402
Próbáld ki ezt.

Sub kombi()
Dim Rng As Range, hit As Range
Dim ix As Long, Lvl As Long, Cnt As Long, iter As Long
Dim LvlAct, LvlSel
Dim BaseSum As Double, TestSum As Double
Dim Dest As Double, small_ix As Double

Dest = Range("c3")
Set Rng = Range("A3:A29")

Cnt = Rng.Cells.Count
ReDim LvlAct(1 To Cnt)
ReDim LvlSel(1 To Cnt)

For ix = 1 To Cnt
LvlAct(ix) = ix
LvlSel(ix) = 0
Next

Lvl = 1
Do
iter = iter + 1
Application.StatusBar = iter
small_ix = Application.WorksheetFunction.Small(Rng, LvlAct(Lvl))
TestSum = BaseSum + small_ix
If (Round(TestSum, 5) < Round(Dest, 5)) Then
If LvlAct(Lvl) < Cnt Then
LvlSel(Lvl) = small_ix
BaseSum = BaseSum + LvlSel(Lvl)
Lvl = Lvl + 1
LvlAct(Lvl) = LvlAct(Lvl - 1) + 1
ElseIf LvlAct(Lvl) = Cnt Then
Lvl = Lvl - 1
BaseSum = BaseSum - LvlSel(Lvl)
LvlAct(Lvl) = LvlAct(Lvl) + 1
LvlSel(Lvl) = 0
End If
ElseIf (Round(TestSum, 5) > Round(Dest, 5)) Then
Lvl = Lvl - 1
BaseSum = BaseSum - LvlSel(Lvl)
LvlAct(Lvl) = LvlAct(Lvl) + 1
LvlSel(Lvl) = 0
ElseIf (Round(TestSum, 5) = Round(Dest, 5)) Then
MsgBox "heuréka"
For ix = 1 To Cnt
If LvlSel(ix) = 0 Then Exit For
Set hit = Rng.Find(what:=LvlSel(ix), lookat:=xlWhole, LookIn:=xlValues)
If hit Is Nothing Then
MsgBox "bibi van"
Stop
Else
hit.Interior.ColorIndex = ix + 2
End If
Next
Set hit = Rng.Find(what:=small_ix, lookat:=xlWhole, LookIn:=xlValues)
If hit Is Nothing Then
MsgBox "bibi van"
Stop
Else
hit.Interior.ColorIndex = ix + 2
End If
Application.StatusBar = False
Exit Sub
End If
Loop
End Sub


Fordíts különös figyelmet a vastag betűkkel kiemelt részekre:

1) a C3 cellahivatkozás a keresett összeg, az A3:A29 a lehetséges értékek tartománya. Ezeket módosítsd, ahogy neked kell.

2) a Round() függvény alkalmazását azért építettem be, mert a makró tesztelése során, tizedes tört értékek esetén rendszeresen előfordult, hogy amikor a program futása arra a pontra ér, hogy éppen a megfelelő számokat vizsgálja, és azok összegének meg kellene egyezni a keresett végösszeggel, mégsem egyeznek meg, hanem valahol a 10. tizedesjegy környékén eltérés van, és így a keresés eredménytelen lesz. Ha tudod, hogy az értékeid legfeljebb hány tizedesjegyet tartalmaznak, azt írd be a makróban az összes Round 2. paraméterének.

A makró a korábban említett Brute Force módszer kicsit intelligensebb változatát használja, tehát lényegében elkezdi sorra venni a lehetséges kombinációkat. Ez azt jelenti, hogy ha a bemeneti adatok száma néhánnyal megnő, akkor a futási idő akár nagyságrendet is emelkedhet. Érdemes tehát minden lehetséges módon lecsökkenteni a bemeneti adatok számát. (pl. számlák dátum szerinti szűrésével)

Ha a program nem talál egyezést, akkor hibaüzenettel fog leállni. Ha talál, akkor a megtalált értékek celláit különböző színekkel kifesti. Menet közben a Statusbar jelzi, hogy hányadik kombinációnál járunk. (Erre igazából nincs szükség, csak azért tettem bele, hogy lássuk, valamit csinál a program, és nem csak lefagyott az Excel.)

Természetesen, ha egy adott összeg több helyen is szerepel, akkor a program nem fogja tudni, hogy melyik utalás az igazi.

Egyéb apró hibák is lehetnek benne. Alkalmazása csak saját felelősségedre.
Előzmény: madbazsi (12389)
Delila_1 2010. júl. 20. Creative Commons License 12401

"Milyen" kimutatásod van? (utalás Robbantómester 11597-es hozzászólására).

 

Tegyél be egy képet róla.

Előzmény: Mosely (12398)
Delila_1 2010. júl. 20. Creative Commons License 12400

Tehetsz be egy rövid makrót, amit majd egy gombhoz rendelsz. A makró bekéri a kezdő, és a záró dátumot, és elvégzi a megfelelő rendezést.

A Range("A4").Select helyett írd be annak a cellának a címét, amelyik a dátumok címsorát tartalmazza.

 

Sub Csoport()
    Dim kezd As Date, vég As Date
   
    kezd = InputBox("Kezdő dátum", "Kezdő dátum bekérése", Default)
    vég = InputBox("Záró dátum", "Záró dátum bekérése", Default)
   
    Range("A4").Select
    Selection.Group Start:=kezd, End:=vég, Periods:=Array(False, False, _
        False, True, True, False, False)
End Sub

Törölt nick 2010. júl. 20. Creative Commons License 12399
Szerinntem nem "olyan" kimutatása van, csak ő hívja annak
Előzmény: Delila_1 (12397)
Mosely 2010. júl. 20. Creative Commons License 12398
Köszönöm a tippeket. Próbálkozom olyan formába önteni, hogy azok a kollégák is tudják használni, akik nálam is értetlenebbül állnak az office előtt.
Előzmény: Delila_1 (12397)
Delila_1 2010. júl. 20. Creative Commons License 12397
A kimutatásodban kattints az dátumot tartalmazó címre.
Adatok/Tagolás és részletek/Csoportba foglalás. Add meg a kezdő, és záró dátumot, a felkínált listában jelöld be a napokat.
A két szélső érték közötti napokat részletesen mutatja majd, a többit összefoglalva, pl. >2010.06.30.
Előzmény: Mosely (12390)
Törölt nick 2010. júl. 19. Creative Commons License 12396
Szerintem a pivot(kimutatás)tábla lesz a barátod, nézz utána.
Előzmény: Mosely (12393)
SQLkerdes 2010. júl. 19. Creative Commons License 12395
Vagy autofilter?
SQLkerdes 2010. júl. 19. Creative Commons License 12394
Lehet rá írni makrót, pld.

Előzmény: Mosely (12390)
Mosely 2010. júl. 19. Creative Commons License 12393
Kedves Robbantómester!

Nos, az igazság az, hogy az exceles ismereteim nem túl szerteágazóak, így fogalmam sincs mi az a pivot. Azonban úgy érzem, érdemes utánaolvasnom a témának :)
Ha nem boldogulok vele, akkor jövök és kérdezek.
Köszönöm!

Üdv
A. Mosely
Előzmény: Törölt nick (12392)
Törölt nick 2010. júl. 19. Creative Commons License 12392
Felétételezem, hogy az általad írt "kimutatás" tényleg kimutatástábla (pivot)

Azért támadtak ezzel kapcsolatban kétségeim, mert ha az tényleg kimutatástábla, akkor miéárt nem húzkodod össze úgy, hogy a részleteket látni lehessen?
Előzmény: Mosely (12390)
Törölt nick 2010. júl. 19. Creative Commons License 12391
A kimutatástáblában kattints duplán arra az összeget tartalmazó cellára, amit ki szeretnél részletezni.

(Egy új munkalapon történik a részletezés ezáltal)
Előzmény: Mosely (12390)
Mosely 2010. júl. 19. Creative Commons License 12390
Forró délutánt kívánok a tisztelt Fórumozóknak!
A következő probléma megoldásában kérném a segítségeteket. Adott két munkalap. Az egyiken táblázat, a másikon egy kimutatás. A táblázatban számlák szerepelnek a hozzájuk tartozó kifizetési időpontokkal. Azt már sikerült megoldani, hogy ha a kimutatás oldalon megadok egy idő intervallumot, akkor kiírja, hogy adott időszakban összesen mennyi lett kifizetve. Viszont szeretném ha nem csak egy szumma összeget lehetne látni, hanem azt is, milyen tételekből áll össze a végeredmény.
Hogyan lehetne megoldani, hogy amikor megadom a –tól –ig dátumokat, akkor automatikusan felsorolja azokat a tételeket, amelyek az adott időszakban lettek fizetve?
Előre is hálásan köszönöm a javaslatokat, ötleteket.

A. Mosely
madbazsi 2010. júl. 19. Creative Commons License 12389
Bocs, hétvégén nem voltam Netközelben. De most vagyok, csináljuk!!!!
SQLkerdes 2010. júl. 18. Creative Commons License 12388
Madbazsi itt vagy még?
Most jött egy ötletem, hogy hogy lehet esetleg egyszerűbben megoldani a problémát, lehet a jövőhét elején rá tudok szánni egy v. két órát a kisérletezgetésre.

De ha nem vagy itt, akkor nincs értelme.
Előzmény: SQLkerdes (12358)
SQLkerdes 2010. júl. 18. Creative Commons License 12387
Valóban, úgy tűnik, hogy a SZORZATÖSSZEG-et alaposan átrágtuk számos oldalról.

Hozd a következő gyakorlati problémát és az alapján kiválasztjuk az excel melyik része legyen a következő áldozat :-)
Előzmény: Redlac (12386)
Redlac 2010. júl. 18. Creative Commons License 12386
Oké!

Azt hiszem, a szorzatösszeg képletet kipipálhatjuk, jöhet a következő lecke :-)
Előzmény: SQLkerdes (12385)
SQLkerdes 2010. júl. 18. Creative Commons License 12385
Az sem baj, mint ahogy már tapasztaltad is.
Úgy tűnik, nagyobb adat-sokaság esetén a * használata tizedmásodpercben mérhető lassulást okoz.
Előzmény: Redlac (12384)
Redlac 2010. júl. 18. Creative Commons License 12384
és, ha az összes feltétel?
Mert az általam használt képletben nincs is ;, és mégis jó.
Előzmény: Delila_1 (12382)
Redlac 2010. júl. 18. Creative Commons License 12383
Valóban! Amikor több órás szenvedés után megvan egy megoldás, az orgazmusközeli állapot:-)

Az utolsó, illetve első negyedéves egyszerűbb meghatározás nagyszerű és logikus ötlet.
Előzmény: SQLkerdes (12375)
Delila_1 2010. júl. 18. Creative Commons License 12382
A feltételek *-gal, az összegtartomány ;-vel (angolban ,-vel) követik egymást.
Előzmény: SQLkerdes (12380)
Redlac 2010. júl. 18. Creative Commons License 12381
Én a csillagok helyett (csak kíváncsiságként:-)) raktam vesszőt, pontosvesszőt, de akkor nem számolt.
SQLkerdes 2010. júl. 18. Creative Commons License 12380
Nem, mert a 11527-ben pont azt írod, hogy a feltételeket össze kell szorozni. Az én - nagy sokaságon futtatott - tesztjeim viszont azt mutatják, hogy jobb ha nem szorozgatunk a SUMPRODUCT-on belül, hanem odaadjuk neki a számolás minden elemét önálló vektorként.

Persze azt se felejtsük el, hogy 1 millió rekord esetén is csak tizedmásodpercekről beszélünk ;-)
Előzmény: Delila_1 (12309)
SQLkerdes 2010. júl. 18. Creative Commons License 12379
Ha "csak" százezer sorból áll a tábla, akkor viszont hol a SUM hol a SUMPRODUCT a gyorsabb.
10 kisérletből:
- a SUM gyorsabb 4 esetben (legnagyobb eltérés 14%)
- pontosan azonos időt fut mindkét függvény 4 esetben
- a SUMPRODUCT gyorsabb két esetben (7% legnagyobb eltérés).

Szóval úgy tűnik, hogy "kis" adattábláknál a SUM a jobb megoldás, nagy tábláknál a SUMPRODUCT annyira szétbontva amennyire csak lehet.

Persze jobb lett volna nagyobb mintán kisérletezni, úgy hogy csak egy oprendszer meg az excel fut, de sajnos a világ nem tökéletes :-)
Delila_1 2010. júl. 18. Creative Commons License 12378
Eredetileg is így szólt a függvény (#11527, #11459, #9661). :)
Előzmény: SQLkerdes (12376)
SQLkerdes 2010. júl. 18. Creative Commons License 12377
Ha a SUMPRODUCT-ot szétbontottam úgy, hogy minden egyes elem önálló tömb a számolásban (vagyis nincs szorzásjel a SUMPRODUCT-on belül), akkor egy kicsit még gyorsabb lett.

A függvény amit futtattam:
=SUMPRODUCT(--(YEAR(A2:A1000002)=2010), --(MONTH(A2:A1000002)>=7), --(MONTH(A2:A1000002)<=9), --(C2:C1000002="IGEN"),(B2:B1000002))
SQLkerdes 2010. júl. 18. Creative Commons License 12376
Csináltam egy gyors kisérletet, ha valakit érdekelnek az ilyen dolgok beteszem ide.

Szóval létrehoztam két táblázatot, mindegyikben 1 millió sorral.
Az egyik táblázatot SUM függvénnyel, a másikat SUMPRODUCT függvénnyel összesítettem számos feltétel mentén.
A függvények:

=SUM((YEAR(A2:A1000002)=2010)* (MONTH(A2:A1000002)>=7)* (MONTH(A2:A1000002)<=9)* (C2:C1000002="IGEN")* (B2:B1000002))
=SUMPRODUCT((YEAR(A2:A1000002)=2010)* (MONTH(A2:A1000002)>=7)* (MONTH(A2:A1000002)<=9)* (C2:C1000002="IGEN")* (B2:B1000002))

Ezekután lemértem, hogy melyik függvény mennyi idő alatt boldogul a számolással. Itt az eredmény:
Jól látszik, hogy a SUMPRODUCT gyorsabb.


Ezek után átalakítottam a SUMPRODUCT függvényt a következőre:
=SUMPRODUCT((YEAR(A2:A1000002)=2010)* (MONTH(A2:A1000002)>=7)* (MONTH(A2:A1000002)<=9)* (C2:C1000002="IGEN"),(B2:B1000002))
A változás annyi, hogy a számokat számoló részt (B2:B1000002) kivettem egy vessző mögé (vagyis egy külön tömböt képeztettem vele.

Ezt összehasonlítottam az első változat SUMPRODUCT-jával (SUMPRIODUCT1 a grafikonon) és ezt kaptam:




A SUMPRODUCT gyorsabb, ha kettébontottam a számolást, különböző vektorokra.
Előzmény: SQLkerdes (12375)
SQLkerdes 2010. júl. 18. Creative Commons License 12375
Bocsánat a zárójelért...

Mondjuk, nehéz leírni azt a pillanatot amikor néhány óra munka után egy képlet végre elkezdi azt csinálni, amit csinálnia kéne!

Még egy megjegyzés:
Ha a negyedik negyedévet nézed akkor felesleges betennie a: HONAP(datum)<=12 részt, mert ez mindenre igazat ad. Ilyenkor elég csak azt ellenőrzizni, hogy a HONAP(datum)>=10. Nyilvánvaló okokból hasonló logika vonatkozik az első negyedévre is.

Függvények más függvényből való "fejlesztésekor" gyakran előfordul, hogy felesleges feltételek bentmaradnak, mert csak a régi függvényt tartalmát alakítjuk át, nem pedig a működését gondoljuk újra.
Delila_1 2010. júl. 18. Creative Commons License 12374
Végül csak sikerült! :)
Előzmény: Redlac (12373)
Redlac 2010. júl. 18. Creative Commons License 12373
Illetve több feltételnél is működik

=SZORZATÖSSZEG((ÉV(datum)=$C$1)* (HÓNAP(datum)>=7)*(HÓNAP(datum) <=9)*(szolgalat=M3)*(tervezett="IGEN"))
Előzmény: Redlac (12372)
Redlac 2010. júl. 18. Creative Commons License 12372

Hát ez nehéz szülés volt...

=SZORZATÖSSZEG((ÉV(datum)=$C$1)* (HÓNAP(datum)>=7)*(HÓNAP(datum) <=9)*(szolgalat=M3))

Egy darabig darabig rakosgattam a zárójeleket, mire működött rendesen.
Előzmény: Delila_1 (12371)
Delila_1 2010. júl. 18. Creative Commons License 12371
A
=SUM(--(YEAR(Datum)=2000*MONTH(Datum)>=7)* (MONTH(Datum)<=9*(Valami=M3)*(ValamiMas=H5)))

képletből kimaradt egy zárójel a 9 után.
Előzmény: Redlac (12370)
Redlac 2010. júl. 18. Creative Commons License 12370
hohó...Az előző képlet is ugyanezt csinálja.

A hónaptól függetlenül minden olyan sort megszámol, ahol a másik két változó értéke megvan.
Előzmény: Redlac (12369)
Redlac 2010. júl. 18. Creative Commons License 12369
Most fogok elővenni valami nagy és nehéz tárgyat, mellyel erőbehatásokat lehet eszközölni a számítógép érzékeny részeire...grrrr
4 órakor kidob az ágy, mert az agyam nem hagy nyugodni és folytatom a táblázatot :-)

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

remekül működik...de, csak ezzel a negyedévvel.
Ha a 7 helyett 10-et, a 9 helyett 12-t írok akkor hibásan számol. Konkrétan megszámol mindegyik sort, a hónapoktól függetlenül.
Előzmény: SQLkerdes (12361)
SQLkerdes 2010. júl. 17. Creative Commons License 12368
Nos, ez túlzás, de nem sértően túlzó :-)
Előzmény: Redlac (12367)
Redlac 2010. júl. 17. Creative Commons License 12367
Uram!

Megtiszteltetés, hogy Önnel egy topicba írhatok:-)!
Előzmény: SQLkerdes (12366)
SQLkerdes 2010. júl. 17. Creative Commons License 12366
Már mér ne kéne értened? Úgy látom jelentős időt rászántál arra, hogy a tömbfüggvényekkel foglalkozz és ez egy fontos része.

Szóval, leegyszerűsítve a problémát, mondhatjuk azt, hogy vannak esetek amikor az excel - makacs módon - egy logikai teszt eredményét IGAZ/HAMIS-nak veszi, nem pedig 1/0-nak.

Mivel a tömbfüggvények egyik fontos hasznosítási területe ez, meg kell oldani, hogy pld egy IGAZ értéket egy számmal szorozzunk. Erre szolgál a dupla negatív.

Más szóval: vannak esetek amikor IGAZ*2000 hibát ad. Ekkor lehet a következőt csinálni: --(IGAZ)*2000, és ez már nem hibát jelez, hanem 2000-t ad eredményül.

Mivel lusta vagyok megjegyezni, hogy milyen függvény-környezetben jön elő a hiba, én inkább - szinte - mindíg odateszem a dupla negatívot, abból baj nem lehet.
Előzmény: Redlac (12365)
Redlac 2010. júl. 17. Creative Commons License 12365
öööö...
"A dupla negatív átváltja a TRUE/FALSE értékeket számmá. "

ez megint egy olyan, amit nem értek, de gyanítom, nem is kell nekem mindent értenem:-)
Előzmény: SQLkerdes (12364)
SQLkerdes 2010. júl. 17. Creative Commons License 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 2010. júl. 17. Creative Commons License 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 2010. júl. 17. Creative Commons License 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 2010. júl. 17. Creative Commons License 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 2010. júl. 17. Creative Commons License 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 2010. júl. 16. Creative Commons License 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 2010. júl. 16. Creative Commons License 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 2010. júl. 16. Creative Commons License 12357
ez nickname? vagy mit jelent?
Előzmény: SQLkerdes (12355)
boraka 2010. júl. 16. Creative Commons License 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 2010. júl. 16. Creative Commons License 12355
asdf
Előzmény: SQLkerdes (12345)
madbazsi 2010. júl. 16. Creative Commons License 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 2010. júl. 16. Creative Commons License 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 2010. júl. 16. Creative Commons License 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 2010. júl. 16. Creative Commons License 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: boraka (12348)
SQLkerdes 2010. júl. 16. Creative Commons License 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: boraka (12349)
boraka 2010. júl. 16. Creative Commons License 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: boraka (12348)
boraka 2010. júl. 16. Creative Commons License 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 2010. júl. 16. Creative Commons License 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: boraka (12346)
boraka 2010. júl. 16. Creative Commons License 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 2010. júl. 15. Creative Commons License 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)
boraka 2010. júl. 15. Creative Commons License 12344
Irányított szűrő
Előzmény: SQLkerdes (12343)
SQLkerdes 2010. júl. 14. Creative Commons License 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)
boraka 2010. júl. 14. Creative Commons License 12342
Szerintem, kimutatással lenne a legegyszerűbb
Előzmény: bbjj (12325)
bbjj 2010. júl. 14. Creative Commons License 12341
Magyar Office2003
Előzmény: SQLkerdes (12327)
madbazsi 2010. júl. 14. Creative Commons License 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 2010. júl. 14. Creative Commons License 12339
Ami az I oszlop előtt van, az releváns?
Előzmény: madbazsi (12338)
madbazsi 2010. júl. 14. Creative Commons License 12338
ok...bocs a körülményeskedésért
Előzmény: SQLkerdes (12336)
SQLkerdes 2010. júl. 14. Creative Commons License 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 2010. júl. 14. Creative Commons License 12336
A Feltölt után még kell kattintani a Beilleszt (vagy mifene) linkre is!
Előzmény: madbazsi (12330)
SQLkerdes 2010. júl. 14. Creative Commons License 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)
SQLkerdes 2010. júl. 14. Creative Commons License 12334
HÓNAP(Adat!$B$12:$B$2000)=7 + HÓNAP(Adat!$B$12:$B$2000)=8 + HÓNAP(Adat!$B$12:$B$2000)=9.

Ennek működnie kell és nem kell mindent háromszor csinálni.
vagy
AND( HÓNAP(Adat!$B$12:$B$2000)=>7; HÓNAP(Adat!$B$12:$B$2000)<=9)

Lehet ez a második gyorsabb is egy kicsit...
Előzmény: Redlac (12331)
Redlac 2010. júl. 14. Creative Commons License 12333
Megint lemaradt a vége.

=SZUM(SZORZATÖSSZEG((HÓNAP(Adat!$B$12:$B$2000)=7)*1; (ÉV(Adat!$B$12:$B$2000)=2010)*1;(Adat!$F$12:$F$2000=M3)*1;(Adat!$H$12:$H$2000="Anyagi")*1)

Beletettem egy space-t, hogy megtörje, hátha így megmarad az egész.
SQLkerdes 2010. júl. 14. Creative Commons License 12332
Én továbbra sem látom.
Tegyél már be lécci szóközöket a pontosvesszők után, hogy a fórummotor el tudja törni a sorokat.
Előzmény: Redlac (12331)
Redlac 2010. júl. 14. Creative Commons License 12331
=SZORZATÖSSZEG((HÓNAP(Adat!$B$12:$B$2000)=7)*1;(ÉV(Adat!$B$12:$B$2000)=2010)*1;(Adat!$F$12:$F$2000=M3)*1;(Adat!$H$12:$H$2000="Anyagi")*1)

Ez van végül is egymás után 3x, annyi különbséggel, hogy a hónapok változnak 7, 8 és 9. Ezt a hármat szummázom, mert arra nem jöttem rá, hogyan lehetne a hónap feltételnél mind a 3 hónapra összesíteni. Az megvolt, hogy valami "és"-sel, de nem jött össze a függvény
Előzmény: SQLkerdes (12326)
madbazsi 2010. júl. 14. Creative Commons License 12330

az új kép feltöltésénél kellene összejönni nem?

rámegyek, hogy feltölt...aztán nem jelenik meg az oldalon

esetleg mailen?

Előzmény: madbazsi (12329)
madbazsi 2010. júl. 14. Creative Commons License 12329
reméljük sikerül
Előzmény: SQLkerdes (12328)
SQLkerdes 2010. júl. 14. Creative Commons License 12328
Rakd be újra, lécci.
Előzmény: madbazsi (12323)
SQLkerdes 2010. júl. 14. Creative Commons License 12327
Filter - uique values only.
Milyen exceled van, milyen nyelven?
Előzmény: bbjj (12325)
SQLkerdes 2010. júl. 14. Creative Commons License 12326
Nálam Safari-n nem látszik az utolsó két képlet vége.

írd be őket újra, lécci.

Én első ránézésre arra gyanakszom, hogy túlbonyolítottad. Ha van SZORZATÖSSZEG-ed, akkor valszeg a SZUM már nem kéne.

De mivel nem látom a teljes képletet, nehéz megmondani...
Előzmény: Redlac (12324)
bbjj 2010. júl. 14. Creative Commons License 12325
Sziasztok!

Van egy több ezer rekordos listám, benne az egyik mező városneveket tartalmaz.
Hogyan tudnék a listából olyan kigyűjtést csinálni, hogy minden városnév egyszer szerepeljen?

Redlac 2010. júl. 14. Creative Commons License 12324
Na, most kavarodtam meg igazán.

Azt szeretném, ha a táblán lévő adatokból, összegezze, hogy, ha 2010.07. havi sorok mellett lévő "IGEN"-eket, vagy bármilyen más feltételt is együtt.

Ez:
=SZORZATÖSSZEG((HÓNAP(Adat!$B$12:$B$2000)=7)*1;(ÉV(Adat!$B$12:$B$2000)=2010)*1;(Adat!$G$12:$G$2000="IGEN")*1)

És ez is működik:

=SZORZATÖSSZEG((HÓNAP(Adat!$B$12:$B$2000)=7)*(ÉV(Adat!$B$12:$B$2000)=2010)*(Adat!$G$12:$G$2000="IGEN"))

Tehát összeszámolja az igenek DARABJÁT, azokban a sorokban, ahol 2010.07. hó van.

Sőt:

=SZUM(SZORZATÖSSZEG((HÓNAP(Adat!$B$12:$B$2000)=7)*1;(ÉV(Adat!$B$12:$B$2000)=2010)*1;(Adat!$F$12:$F$2000="DP")*1);SZORZATÖSSZEG((HÓNAP(Adat!$B$12:$B$2000)=8)*1;(ÉV(Adat!$B$12:$B$2000)=2010)*1;(Adat!$F$12:$F$2000="DP")*1);SZORZATÖSSZEG((HÓNAP(Adat!$B$12:$B$2000)=9)*1;(ÉV(Adat!$B$12:$B$2000)=2010)*1;(Adat!$F$12:$F$2000="DP")*1))

ez is működik. Itt negyedévenként összesíti a táblán lévő adatokat, az előbbi feltételek alapján

Sőt-sőt:

=SZUM(SZORZATÖSSZEG((HÓNAP(Adat!$B$12:$B$2000)=7)*1;(ÉV(Adat!$B$12:$B$2000)=2010)*1;(Adat!$F$12:$F$2000=M3)*1;(Adat!$H$12:$H$2000="Anyagi")*1);SZORZATÖSSZEG((HÓNAP(Adat!$B$12:$B$2000)=8)*1;(ÉV(Adat!$B$12:$B$2000)=2010)*1;(Adat!$F$12:$F$2000=M3)*1;(Adat!$H$12:$H$2000="Anyagi")*1);SZORZATÖSSZEG((HÓNAP(Adat!$B$12:$B$2000)=9)*1;(ÉV(Adat!$B$12:$B$2000)=2010)*1;(Adat!$F$12:$F$2000=M3)*1;(Adat!$H$12:$H$2000="Anyagi")*1))

Ez negyedévenként összesít 4 változó alapján. 2010, július, augusztus és szeptember adataiból azokat, amelyek mellett az egyik sorban szerepel az "anyagi" szó, illetve egy másikban megegyezik az M3-ban lévő (egyébként "DP") szóval. Mindegyik feltételnek teljesülni kell, és azokat számolja össze. Nem értékeket összegez, hanem a feltételek teljesülését számolja össze.

Ráadásul nem tömbképletként vannak bevíve.

De, ha jól értem, amit írtatok, ennek nem kellene működnie.

Az eredeti kérdéshez visszakanyarodva. Lassú a számolás. Most úgy oldottam meg, hogy a második fülön (az elsőbe viszem be az adatokat, a 2. összesít) van egy újraszámol gomb ezzel:

Sub Gomb1_Kattintáskor()
Application.Calculation = xlCalculationAutomatic
End Sub

Az adat fülön lévő bevitelnél, a makrók futásánál ki van kapcsolva ez a számolás, így az adatbevitel gyors. Majd amikor kész vagyok, akkor vagy rányomok az újraszámol gombra, vagy rámentek/bezárom.

A bonyolultnak tűnő függvények miatt elképzelhető a lassú számolás? Vagy fogadjam el SQLkerdes véleményét, hogy sokat számolunk, sok időt vesz igénybe?
madbazsi 2010. júl. 14. Creative Commons License 12323
elküldtem a screenshotot is, de nem látom... ???
Előzmény: madbazsi (12322)
madbazsi 2010. júl. 14. Creative Commons License 12322

Lehet az elözö üzenetem nem ment el:

Szóval mindig csak 1 bejövö tételt vizsgálnék.

A nyitott számlák 1 oszlopban vannak.

Igen - klasszikus kipontozás - a bejövö tétel, mely számlákat egyenlíti ki.

Előzmény: SQLkerdes (12320)
madbazsi 2010. júl. 14. Creative Commons License 12321

Remélem az excel screenshot-tal világosabb lesz mit szeretnék.

Mindig csak egy bejövö tételt vizsgálnék, nem többet.

Egy OSZLOPBAN vannak a nyitott számlák.

Èn ezt az értéket, mely számlákba tudhatom bele.

 

Előzmény: SQLkerdes (12320)
SQLkerdes 2010. júl. 14. Creative Commons License 12320
Szóval klasszikus kipontozást akarsz csinálni.
Ehhez tudni kell, hogy hol vannak a tábládban a bejövő pénzösszegek és hogy hol vannak a számlák.
Milyen struktúrában?

Jól értem, hogy egy sorban szerepel az összes bejövő utalás összege?
Hol vannak a számlák? Hány számla van?
Csinálj egy screenshot-ot a file-ról és rakd ide be.
Nem az adatok érdekelnek, hanem a tábla szerkezete.
Előzmény: madbazsi (12318)
jim_01 2010. júl. 14. Creative Commons License 12319
Sziasztok,

olyan excelproblémával már találkoztatok, hogy bizonyos felhasználónál nem lehet a cellákba írni. Minden más (word, notepad) szoftverbe tudok írni.... Rendszergazda alól simán megy. Valamilyen jogosultsági probléma...de nem tudom, hogy hol állíthatnám be. Már kapott a felhasználó rendszergazda jogot is, de így sem ment. Csak helyi rendszergazdával tudtam a cellákat módisítani..

Előre is köszi a segítséget....


Csaba
madbazsi 2010. júl. 14. Creative Commons License 12318

Szerintem válaszoltam: 1 oszlop - 0 sor (nincs üres oszlop)

Igen bejövö utalásom van (érték).

Egy francia vevömnek több vevöi kódja van, és utalásoknál nem tünteti fel, hogy mely számlákat egyenlítenék ki. Mert van úgy, hogy mivel egy cég, de több telephely, több vevöi kódon vannak a számlái..

Szóval le tudom szürni az összes nyitottszámlájukat, ezt teszem egy oszlopba. Ebben az oszlopban kellene meglelni, hogy az utalás mely nyitott számlák kombinációja lehet, hogy tudom a bankot velük kiegyenlíteni.

Köszi elöre is!

 

Előzmény: SQLkerdes (12306)
Delila_1 2010. júl. 14. Creative Commons License 12316
Az utolsó, ; után bevitt tartománynak az összegzendő értékeket kell tartalmaznia. IGEN értékeket nem tud összeadni.

Nálad valamelyik oszlop értékeinek az összegét kellene kiszámolnia a képletnek, ha a B oszlop kezdete 2010.07 , és a G oszlop IGEN. De melyik oszlop összegeit számolja? Ezt az utolsót kell ;-vel írni az előző 3 után, és ebbe már nem jön feltétel.

Ezt a képletet csak az Adat lapon lehet alkalmazni, vagyis a feltételeknél azt nem kell megadni.

=SZOZATÖSSZEG
((HÓNAP(B12:B2000)=7)*(ÉV(B12:B2000)=2010)*(G12:G2000)="IGEN");X12:X2000)

képlet adja az eredményt, amennyiben az X oszlop értékeit akarod összegezni, ha a 3 feltételnek megfelelnek.

Előzmény: Redlac (12313)
SQLkerdes 2010. júl. 13. Creative Commons License 12315
Tömbfüggvényekben való hibakeresés módja:
- jelöld ki az - esetedben - SZORZATÖSSZEG egy önálló elemét. A lenti példádban, pld HÓNAP(Adat!$B$12:$B$2000)=7
- nyomd le az F9-et (ez megmutatja az adott művelet eredményét, az összeset)
- UNDO-val csináld vissza
- ezt csináld meg mindegyik önálló elemre
- ahol hibát látsz eredményként az f9 után, ott a problémád

Ha nincs az egyedi elemek között hiba, akkor jelöld ki az egyedi elemek valamely kombinációját (lenti példa szerint: HÓNAP(Adat!$B$12:$B$2000)=7)*(ÉV(Adat!$B$12:$B$2000)=2010)

F9, hiba keresése, UNDO

Ezt addig kell csinálni amíg meg nem leled a hibát.

Ez a technika sokat segít abban hogy megértsd az adott függvény működését.
Előzmény: Redlac (12313)
SQLkerdes 2010. júl. 13. Creative Commons License 12314
Boolean adatot (IGAZ v. HAMIS) a SUMPRODUCT nem tud szorozni.
Amikor két boolean eredményt szorzásjellel összeszorzol a SUMPRODUCT-on belül, akkor az excel automatikusan számmá alakítja az eredményt (1 v. 0 lesz belőle).
Ha viszont a SUMPRODUCT-ot próbálod meg arra használni, hogy az IGAZ v. HAMIS-t alakítsa át számmá, akkor az nem megy.

Szóval a nem működő képleted megpróbál pld. egy TRUE-t meg egy 1-est összeszorozni, mivel ez nem megy neki, hibaüzenetet ad.

Ezért van az, hogy az IGAZ, HAMIS eredményt adó dolgokat a SUMPRODUCT-on belül átalakítjuk. Ennek módjai:
- dupla negatív előjel
- 1-el szorzés, vagy
- N függvény.

Előzmény: Redlac (12313)
Redlac 2010. júl. 13. Creative Commons License 12313
Illetve...

Ez működik:

=SZORZATÖSSZEG((HÓNAP(Adat!$B$12:$B$2000)=7)*(ÉV(Adat!$B$12:$B$2000)=2010)*(Adat!$G$12:$G$2000="IGEN"))

Ez nem:

=SZORZATÖSSZEG((HÓNAP(Adat!$B$12:$B$2000)=7)*(ÉV(Adat!$B$12:$B$2000)=2010);Adat!$G$12:$G$2000="IGEN")
Előzmény: Redlac (12312)
Redlac 2010. júl. 13. Creative Commons License 12312
Az utolsó mondatot alapján (A feltételek egy pár zárójel között vannak, és közöttük * jel van, az összegzendő tartomány ;-vel van elválasztva az előbbiektől.) értettem meg a szorzatösszeg teljes lényegét...

Előzmény: Delila_1 (12309)
Redlac 2010. júl. 13. Creative Commons License 12311
1. Nem másoltam minden sorba, hanem teljes tartományt számol.
2. Sokadik próbálkozásra jött ki ez.
3. Az enyémből töröltem az 1-eket, és működik:-). Ez okozhat lassulást?
Előzmény: Delila_1 (12309)
SQLkerdes 2010. júl. 13. Creative Commons License 12310
Gondolom a *1-et a dupla negatív helyett használja. Használhatta volna az N függvényt is...
Előzmény: Delila_1 (12309)
Delila_1 2010. júl. 13. Creative Commons License 12309
Kicsit átalakítottad a szorzatösszeg függvényt, de nem tudom, miért. Mit keresnek benne a *1-ek?
Ezt a függvényt nem kell minden sorba lemásolni, a teljes tartományról ad képet egy cellában.

Az eredeti így nézett ki:
=SZORZATÖSSZEG((HÓNAP(A1:A100)=10)*(ÉV(A1:A100)=2010);B1:B100)

a mostani:
=SZORZATÖSSZEG((HÓNAP(Adat!$B$12:$B$2000)=7)*1;(ÉV(Adat!$B$12:$B$2000)=2010)*1;(Adat!$G$12:$G$2000="IGEN"

(a vége lemaradt).

A feltételek egy pár zárójel között vannak, és közöttük * jel van, az összegzendő tartomány ;-vel van elválasztva az előbbiektől.
Előzmény: Redlac (12308)
Redlac 2010. júl. 13. Creative Commons License 12308
oké, vettem :-)
Előzmény: SQLkerdes (12307)
SQLkerdes 2010. júl. 13. Creative Commons License 12307
Hát a tömbfüggvények már csak ilyenek, írtó sok adattal írtó sok dolgot csinálnak, ez néha időt vesz igénybe...

Előzmény: Redlac (12304)
SQLkerdes 2010. júl. 13. Creative Commons License 12306
A #777-ben leírt kérdésekre nem válaszoltál!
Hány oszlop, hány sor, etc.

A számok mit reprezentálnak? Pld van egy vevői számlád és több vevői bejövő utalásod és ki akarod találni, hogy melyik utalások teszik ki pontosan a számla összegét?
Más szóval, mi az alapproblémád?
Előzmény: madbazsi (12303)
Redlac 2010. júl. 13. Creative Commons License 12305
Ja még valami:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("B12:B2000")) Is Nothing Then
Target.Value = Date
Cancel = True
End If

If Not Intersect(Target, Range("Q12:AC2000, G12:G2000, K12:K2000")) Is Nothing Then
Target.Value = "IGEN"
Cancel = True
End If
End Sub


Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

If Not Intersect(Target, Range("K12:K2000, G12:G2000, Q12:AA2000")) Is Nothing Then
Target.Value = "NEM"
Cancel = True
End If

End Sub

A fenti makrók közül csak a dátum beírása lassul le, illetve írja ki a végén, hogy cellák újraszámolása.

=SZORZATÖSSZEG((HÓNAP(Adat!$B$12:$B$2000)=7)*1;(ÉV(Adat!$B$12:$B$2000)=2010)*1;(Adat!$G$12:$G$2000="IGEN")*1)

Pedig az ehhez hasonló képletek a dátum változást is számolják és az IGEN-eket is.
Előzmény: Redlac (12304)
Redlac 2010. júl. 13. Creative Commons License 12304
Az első sor a sorszámokat tartalmazza előre beírva, emiatt a kijelölendő terület mindig a teljes lesz :-(

Most az egész táblázatot elölről kezdtem, és csak 2000-ig számoltatom, illetve keresek adatokat a szorzatösszeg különböző variációival. Pl.:
=SZORZATÖSSZEG((HÓNAP(Adat!$B$12:$B$2000)=7)*1;(ÉV(Adat!$B$12:$B$2000)=2010)*1;(Adat!$H$12:$H$2000="Anyagi")*1)

A képletekkel nincs is gond, remekül működnek. Vagy a hónapot/évet, vagy a 3. változót cserélgetem.

Most, hogy egy jó darabon fel lett töltve a táblázat, észrevettem, hogy lassulnak a makrók (a szorzatösszeg függvények számának emelkedésével).

Beraktam az ajánlott esemény tiltás, újra számolás, képernyő frissítés variációkat, valamint ezek engedélyezését a a makró(k) végére. Most villámgyorsan beviszi a makró műveletet, azonban UTÁNA homokozik egy cseppet, és kiírja, hogy cellák újraszámolása.

Szerintetek ez ellen lehetne valamit tenni?
Megfelelőnek tartjátok-e, ha a függvényeket tartalmazó fülön egy gombot létrehoznék, ami újraszámol?
Előzmény: Delila_1 (12290)
madbazsi 2010. júl. 13. Creative Commons License 12303

Köszi szépen, hogy segíteni akarsz!

Szóval német excelem van, de a nyelv nem gond, mert magyar nyelven is meg tudom nézni, ha nagyon elakadnék. 2003-as excel.

A válaszod helytálló - nem írtam még makrót, eddig összetett függvényekkel elbajlódtam.

Szóval van egy értékem.

Ennek az értéknek a kombinációját keresném 1 oszlopban (sor nincsen).

Mindig kell, hogy legyen találat - de nem mindig csak egy lehetséges megoldás van.

Pl. ugyanaz az érték többször szerepel az oszlopban

Még ha vmi kell fontos írd meg légy szíves!

Köszi elöre is a segítséget!

Előzmény: SQLkerdes (12302)
SQLkerdes 2010. júl. 13. Creative Commons License 12302
További kérdések:
- tudjuk, hogy mindíg van megoldás?
- tudjuk, hogy ha van megoldás akkor mindíg csak egy megoldás van?

Ha ezeket megírod, akkor tudunk itt néhányan segíteni a kóddal.
Előzmény: SQLkerdes (12301)
SQLkerdes 2010. júl. 12. Creative Commons License 12301
Hát, a kérdésed azt sugallja, hogy eddig nem sok makrót írtál. Azt kell mondjam ez nem az a probléma, amivel a makróírást elkezdeném.

Amire szükséged van, az egy ún. brute force módszer, vagyis minden sor minden adatának minden variációját végig kell próbálja.

Hány oszlopban és hány sorban van adatod? Mindegyik oszlop tartalmaz adatot (vagyis az a jó, ha mindíg pld 12 számot kell variálni, nem pedig az 1. sorban 12-t, a másodikban meg csak 3-at). Az egyes sorok számai között vannak üres cellák?

Lehet, hogy az alapproblémád leírása is segítene, mert gyakran előfordul, hogy a kérdező kitalál valamilyen megoldást a problémájára és csak a makró futtatása során tapasztalt dolgok miatt jövünk rá, hogy lett volna egyszerűbb megoldás is.

Milyen exceled van, milyen nyelvű?

Előzmény: madbazsi (12300)
madbazsi 2010. júl. 12. Creative Commons License 12300

Segítetni tudsz abban, hogy hogyan tudok nekikezdeni a makró megírásának?

Köszi!

Előzmény: SQLkerdes (12299)
SQLkerdes 2010. júl. 12. Creative Commons License 12299
Ezt natív excel függvénnyel nem lehet megcsinálni, csak makróval.
Előzmény: madbazsi (12266)
Redlac 2010. júl. 12. Creative Commons License 12298
Köszönöm a példákat, emésztem őket :-)
Előzmény: Törölt nick (12294)
Sánta Kutya (SK) 2010. júl. 11. Creative Commons License 12297
Index fórum. :-DDD Ilyenkor attól jön meg, ha még egyet beírunk. Onnan tudod, hogy balra a kedvencekben azért látszik, csak a topicban nem.
Előzmény: Törölt nick (12296)
Delila_1 2010. júl. 11. Creative Commons License 12293

Van az A oszlopodban egy halom keresztnév, mellettük a B és C oszlopokban összegek. A feladat, hogy a sorban, ahol a Vilhelmina név szerepel, a D oszlopba a B és C szorzata kerüljön. Többezer sor van.

 

Sub szoroz()
    Dim sor As Integer
   
    For sor = 2 To Range("A65536").End(xlUp).Row
        If Cells(sor, 1) = "Vilhelmina" Then
            Cells(sor, 4) = Cells(sor, 2) * Cells(sor, 3)
            Exit For
        End If
    Next
End Sub

A feltétel az If-es sor. Tudjuk, hogy csak 1 Vilhelmina van, ezért a művelet elvégzése után nem nézetjük tovább a rengeteg további nevet, hanem kilépünk a ciklusból. Ebben az esetben Exit Sub is lehetett volna a kilépés.

 

Nem életszerű a példa, de talán érthető. :)

Előzmény: Redlac (12292)
Redlac 2010. júl. 11. Creative Commons License 12292
Amit Delila írt, az szimpatikus és érthető :-)

Nálad azt értem, hogy feltételt vizsgálok, csak azt nem tudom, hogyan.
Előzmény: Törölt nick (12291)
Delila_1 2010. júl. 11. Creative Commons License 12290
A Sub Gomb9_Kattintás() makróban a Range("A12:AD65000").Select sor helyett
ezt írd:

Range("A12").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select

Akkor azt a területet jelölöd ki rendezésre, amelyik adatokat tartalmaz, nem lesznek üres sorok.

Lehet, hogy Gavriel nem erre gondolt, én nem látok Do-Loop ciklust.
Előzmény: Redlac (12289)
Redlac 2010. júl. 11. Creative Commons License 12289
Ez jól hangzik...bár nem értem :-)


Tudnál segíteni, hogy az alább mellékelt kódot, hogyan kellene módosítani?
Előzmény: Törölt nick (12288)
Jimmy the Hand 2010. júl. 9. Creative Commons License 12286
Nincs mit.
Arra figyelj, hogy ebben a makróban a Target tartomány jelöli a megváltozott cellákat.
Egyszerre ugyanis nem csak egy, hanem több cella is megváltozhat, pl. értékek törlésekor, másolás-beillesztéskor, stb.
Nagyon kifinomult szűréseket is lehet csinálni arra nézve, hogy milyen Target esetén fusson le a makró, és mikor ne. Én most azt a feltételt adtam meg, hogy a megváltozott tartomány egyoszlopos legyen, és ez az egy oszlop az első (A) oszlop legyen.
Nem tudom, hogy a céljaidnak mi a legmegfelelőbb.
Előzmény: motinka (12285)
motinka 2010. júl. 9. Creative Commons License 12285
köszönöm megvan csak előbb írtam mint gondolkoztam :o)

mégy egyszer köszönöm
Előzmény: motinka (12284)
motinka 2010. júl. 9. Creative Commons License 12284
már csak azt kellene tudnom, hogy mit változtassak ha a pl: E oszlopba szeretnék írni és ennek hatására a 15-ik oszlopba kellene hogy beírja az időpontot
Előzmény: motinka (12282)
boraka 2010. júl. 9. Creative Commons License 12283
Igazándiból, ebből számomra nem látszik, hogy mitől lassult le, de, ha vannak a munkalapon képletek, ennek folyamatos újraszámoltatása okozhatott lassulást.

Ebből kiindulva az újraszámolás ki/be kapcsolása segíthetett.

Előzmény: Redlac (12279)
motinka 2010. júl. 9. Creative Commons License 12282
nagyon köszönöm ! ez a megoldás
Előzmény: Jimmy the Hand (12281)
Jimmy the Hand 2010. júl. 9. Creative Commons License 12281
Próbáld ki :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
If (Target.Columns.Count = 1) And (Target.Column = 1) Then
For Each c In Target.Offset(, 2)
If c = "" Then c = Now
Next
End If
End Sub
Előzmény: motinka (12280)
motinka 2010. júl. 9. Creative Commons License 12280

sziasztok,

 

segítségre lenne szükségem:

egy excel táblában azt szeretném, hogy pl: az A oszlop egyik cellájába adatbevitelkor, az ugyanabban a sorban lévő C oszlopba írja be a bevitel dátumát, idejét és ez frissítéskor ne változzon meg.

Eljutottam odáig hogy ide célszerú VB-t használni.

A következő már majdnem jó:

 

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Const LNG_OSZLOP As Long = 3
        Dim lngSor As Long
        lngSor = ActiveCell.Row - 1
               If Cells(lngSor, LNG_OSZLOP) = "" Then
                        Cells(lngSor, LNG_OSZLOP) = Now()
              End If
End Sub

 

csak itt az a probléma, hogy akárhova írok a táblázatba, beteszi a dátumot/időt, holott csak az A oszlop azonos sorába íráskor kellene hogy működjön.

 

ha valaki tud segítsen pls.

 

előre is köszönöm

Redlac 2010. júl. 9. Creative Commons License 12279
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Not Intersect(Target, Range("B12:B65000")) Is Nothing Then
Target.Value = Date
Cancel = True
End If

If Not Intersect(Target, Range("Q12:AC65000, G12:G65000, K12:K65000")) Is Nothing Then
Target.Value = "IGEN"
Cancel = True
End If

End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

If Not Intersect(Target, Range("K12:K65000")) Is Nothing Then
Target.Value = "NEM"
Cancel = True
End If

If Not Intersect(Target, Range("G12:G65000")) Is Nothing Then
Selection.ClearContents
Cancel = True
End If

End Sub


EDDIG ezek futottak vánszorogva. Aztán a tegnapi hóka-móka (amit ajánlottál) után, már rendesen futnak.

Aztán ezek mellett vannak még ezek:
Sub Gomb9_Kattintás()
Range("A12:AD65000").Select
Selection.Sort Key1:=Range("A12"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A12").Select

Ez(ek) a fejlécgomb(ok) sorba rendezik az adott oszlop alapján az egész táblát. Ez is kínkeserves volt. Ez elé, illetve mögé nem írtam semmit, de már ez is normálisan fut.
boraka 2010. júl. 9. Creative Commons License 12278

Az Application.EnableEvents = false volt a ludas, ezt ki kell venni, illetve a kattintások közötti feldolgozási rész eljére tenni (a végén pedig visszakapcsolni). Egyébként még be lehet illeszteni a képernyő frissítések ki/be kapcsolását is, ez is lassíthat.

 

Application.ScreenUpdating = False 'kikapcsolás

Application.ScreenUpdating = True 'bekapcsolás

 

Mondjuk, a leghatékonyabban úgy tudnánk segíteni, ha mutatnál kódot (kódrészletet) ami lassan fut. 

Előzmény: Redlac (12277)
Redlac 2010. júl. 8. Creative Commons License 12277
Na, ezt most nem értem.

1. Beírtam a kérdéses makró elejére és végére, amit ajánlottál.
2. Erre gyorsan (nem vacakolva) beírt egyet, de utána a dupla klikk, illetve maga a makró nem működött.
3. Mentettem, bezártam
4. Újra megnyitottam, a dupla klikk és a makró ugyanúgy nem működött.
5. Töröltem az általad leírtakat a makró elejéről-végéről, majd ment/bezár
6. Megnyitottam újra, és tökéletesen működik, semmi tökölés, villámgyorsan ír be, de az eredeti állapothoz képest (elvileg) nem változott semmi.
Előzmény: boraka (12275)
Jimmy the Hand 2010. júl. 8. Creative Commons License 12276
Érdemes lehet szemügyre venni magukat a makrókat is.
Általában lehet a meglévőnél hatékonyabb algoritmust találni.
Tipikus hiba, amikor ciklusban sorra Select-áljuk a cellákat. Semmi értelme, viszont hálából 10-szeres lassulást okoz.
Előzmény: Redlac (12272)
boraka 2010. júl. 8. Creative Commons License 12275
Ha sok a képlet a munkalapon, esetleg érdemes kikapcsolni a képletek újraszámolást, mert minden változáskor ez lefut. Aztán még meg lehet próbálni az események futását is kikapcsolni a makró futásának idején, hátha ez is lassít valamit:

Application.EnableEvents = False ' ne fussanak az események
Application.Calculation = xlCalculationManual 'ne számolja újra a képleteket

Ne felejtsd el a nakró végén ezeket visszakacsolni:

Application.EnableEvents = True ' fussanak az események
Application.Calculation = xlCalculationAutomatic 'mehet a képletek újraszámolása


Előzmény: Redlac (12272)
Sánta Kutya (SK) 2010. júl. 8. Creative Commons License 12274
Már megint lenyelte az index a hozzászólásomat? Pedig megjelent a nevem a kedvencekben.
Sánta Kutya (SK) 2010. júl. 8. Creative Commons License 12273
Ezen a ponton már érdemes foglalkozni az algoritmusok hatékonyságával. Például egy rendezésnél, aminek a lépésszáma az elemszámmal közel négyzetesen nő, bizony előfordulhat ez. Tehát érdemes körülnézni a rendezési algoritmusok elméletében.
Előzmény: Redlac (12272)
Redlac 2010. júl. 8. Creative Commons License 12272
Azért nem, mert egy "üres" lapot tölt ki a felhasználó adatokkal. Ebben az "üres" lapban vannak adatbevitelt könnyítő makrók, valamint sorba rendező makrók amiknek természetesen az egész lapon kellene működniük.

De, ha bármilyen okból több ezer sort vizsgálnánk (mert szükséges), akkor természetes ez a lassulás?
Előzmény: boraka (12259)
boraka 2010. júl. 8. Creative Commons License 12271
Tiszta igaz. Még szerencse, hogy lehet saját függvényt írni és ezzel megoldani az érték pontos meghatározását.
Előzmény: Sánta Kutya (SK) (12270)
Sánta Kutya (SK) 2010. júl. 8. Creative Commons License 12270
Meglehetősen bonyolult megoldás csak azért, mert a tervező kifelejtett egy teljesen logikus és kézenfekvő metódust.
Előzmény: boraka (12269)
boraka 2010. júl. 8. Creative Commons License 12269
Jó a kérdésed, őszintén szólva, most kipróbáltam, szóval, ha az adott oszlop 65536. sorában van valami adat, akkor is az ettől felfelé az első értéket képviselő sort adja eredményül, vagyis, ebben az esetben nem ad jó eredményt...

Jó, hogy felvetetted, használat előtt ezentúl már ezt is vizsgálni fogom pl. így:

If Range("A" & Rows.Count) = "" Then
MsgBox "Az 'A' oszlop utolsó sora: " & Range("A" & Rows.Count).End(xlUp).Row
Else: MsgBox "Az 'A' oszlop utolsó sora: " & Rows.Count
End If
Előzmény: Sánta Kutya (SK) (12268)
Sánta Kutya (SK) 2010. júl. 8. Creative Commons License 12268
Köszönöm, így már teljesen világos. Ha én írtam volna ezt a Basicet, lenne valami egyszerűbb megoldás, amit megérteni is egyszerűbb lenne, mondjuk Last néven. :-) Jut eszembe, ez a megoldás akkor is működik, ha a 65536. sorban is van adat? Mert a lenti kísérletem nem erre utal.
Előzmény: boraka (12267)
boraka 2010. júl. 8. Creative Commons License 12267

Jimmy válaszát alapul véve:

 

Rows.Count = a munkalap utolsó sorának száma (Excel2003 esetében ez 65536)

End(xlUp).Row = az utolsó sorhoz képest felfelé az első értéket képviselő sor

Range("A" & Rows.Count).End(xlUp).Row = az "A" oszlopban az utolsó értéket képviselő sor, és mindegy, hogy előtte vannak üres sorok is vagyis nem folytonos a kitöltés.

 

 

Előzmény: Sánta Kutya (SK) (12265)
madbazsi 2010. júl. 8. Creative Commons License 12266

Sziasztok!

 

Valakinek van ötlete, hogy megvalósítható-e a következö excelben?

VAn egy értékem (szám), amelynek kombinációit keresem egy mátrixban.

Pl: érték=24,5

mátrix: 12  11  13,45  21  5,5  7

akkor kijelölné: a 12 + 5,5 + 7-t??

Köszi

Sánta Kutya (SK) 2010. júl. 8. Creative Commons License 12265
Köszi, így már tisztább.
Előzmény: Jimmy the Hand (12264)
Jimmy the Hand 2010. júl. 8. Creative Commons License 12264
Hát igen, nehéz egy mondatban összefoglalni, de pontosan arról van szó, amit leírtál. Talán azt lehetne mondani, hogy az aktuális összefüggő adattartomány adott irányba eső végére ugrik, ha pedig éppen a végén vagy, akkor a következő, adott irányba eső összefüggő adattartomány közelebbi végére.

A teljességhez hozzátartozik, hogy makróban az End művelet az aktív cellát nem viszi sehová, nincs is semmi köze az aktív cellához. Csak átdefiniálja a tartományt, amelyre a tényleges művelet majdan vonatkozni fog. Ez a sor

Range("C122")

önmagában semmi, csak egy tartománydefiníció. Ehhez adódnak hozzá módosítók, mint pl. az End, Offset, Resize, stb.

Range("C122").End(xlUp)

A Range("C122") -höz képest megkeresi a következő adattartomány-határt, és ez lesz a módosult tartománydefiníció. Módosítókat halmozni is lehet, pl

Range("C122").End(xlUp).Offset(1).Resize(2, 4)

És a végén jön a tulajdonképpeni művelet:

Range("C122").End(xlUp).Offset(1).Resize(2, 4).Copy
Előzmény: Sánta Kutya (SK) (12262)
drog 2010. júl. 8. Creative Commons License 12263

tudom macerás, nem automata, de megoldás, miszerint, ha pl a böngészőben az éppen olvasott weblapot mentés másként címmel lementitek, akkor az excel simán meg tudja nyitni, mindent lehet vele csinálni.

hogy kevesebbet kelljen mentegetni, itt akár 500 hozzászólás is lehet egy filécske.

 

vagy van pl. winhtrack nevű oldalletöltögető progi, ami az egész, összes hozzászólást lementi, persze be kell állítani, hogy ne keressen túl távoli linkek után, tehát ne töltsön az igényeidnek mélyebb fastruktúrát.

ilyesmi oldal letöltögető természetesen elég sok féle van, ki melyikre esküszik.

 

a lényeg, hogy a bármimódon lementett html, vagy mht, vagy bármi webformátumot az excel simán kezeli.

Sánta Kutya (SK) 2010. júl. 8. Creative Commons License 12262
Ez kicsit zavaros. Ha üres cellán állok, felugrik a fölötte levő legalsó adatra. Ha nem üres a cella, de felette üresek vannak, akkor felugrik a "luk" feletti legalsó adatra. Ha viszont folytonosak az adatok, akkor átugorja a felette levőket, és a folyamatos adattartomány legfelső nem üres cellájára ugrik. Ha nincs a cella fölött adat, akkor meg az oszlop tetejére.
Előzmény: Jimmy the Hand (12261)
Jimmy the Hand 2010. júl. 8. Creative Commons License 12261
Tetszőleges cellán állva tartsd lenyomva a Ctrl billentyűt, aztán nyomd meg a felfelé nyilat. Ezt csinálja az End(xlUp).
Előzmény: Sánta Kutya (SK) (12260)
Sánta Kutya (SK) 2010. júl. 8. Creative Commons License 12260
Ezt egy kicsit elmagyaráznád? Mi az az End(xlUp)?
Előzmény: boraka (12259)
boraka 2010. júl. 7. Creative Commons License 12259

Miért nem addig vizsgálsz, ameddig egy adott oszlopban van adat?


Pl. az "A" oszlopban ebben a sorban van az utolsó adat : Range("A" & Rows.Count).End(xlUp).Row

Előzmény: Redlac (12258)
Redlac 2010. júl. 7. Creative Commons License 12258
A táblázatban lévő képletek 65.000 sorig vizsgáltak. Ezt visszavettem 5.000 sorra, így jelentősen felgyorsult. De ezt nem is gondoltam volna.

De így, ha valóban több ezer soros táblázatban kellene számolni, akkor az ilyen lassú lenne?
Előzmény: Redlac (12257)
Redlac 2010. júl. 6. Creative Commons License 12257
Segítség!!!

A makrók futása iszonyatosan lelassult egy táblázatban.

Ha duplán kattintok (mert a dátumot íratom be), akkor a lap alján kiírja, hogy: "számítás (2 processzor):" majd százalékérték emelkedik 100%-ig. Amikor 100 lesz, akkor fejeződik be a makró futása, de ez vagy 6 másodperc.

3-4 egyéb makró van benne, meg alig pár adat, még csak most kezdtem felépíteni.
2003 és 2007 alatt is produkálja. Más dokumentumban lévő makrók rendben futnak.
Sánta Kutya (SK) 2010. júl. 5. Creative Commons License 12256
Azt hiszem, le is fagyna két hétre a gépem...
Egyszer már nekiláttam fejleszteni egy programot, amelyik Pegasus Mail formátumú levelekké konvertál egy topikot, és így szét lehet dobálni folderekbe, csak aztán leálltam. Igazából azt hiszem, a wiki az ilyen szerteágazó ismeretek rendszerezésének a korszerű módja, a másik gépemen van is már telepítve egy saját wiki, csak az éppen megmurdelt alaplapilag.
Előzmény: tbando (12254)
tbando 2010. júl. 5. Creative Commons License 12255
Nagy előnye ennek, hogy az exceltáblában aztán nem csak tárgyszavaidra, de az eredeti szöveg szótöredékeire is tudsz keresni.
Előzmény: tbando (12254)
tbando 2010. júl. 5. Creative Commons License 12254
A tervedhez adok egy ötletet. Hívd be az egész topikot, van ennek valami módja, valaki már megírta nekem, csak már elfeljtettem hova tettem. Majd Ctrl+C CTRL V-el másold át Éxcelbe Egy bekezdés-egy cella. Ami jól olvasható, ha rámutatsz az egérrel. Persze állíthatsz is a cellaméreten, de az babrásabb. Na most ezt végigolvasva a szomszédos cellában megjelölheted a téged érdeklő postokat, akár le is tárgyszavazhatod őket, majd a téged nem érdeklőket törlöd. Elötte persze még érdemes a sorokat sorszámmal ellátni, hogy törlés után a sorrendet helyreállíthasd.
Előzmény: Sánta Kutya (SK) (12246)
tbando 2010. júl. 5. Creative Commons License 12253
Találkoztatok már azzal a buggal, ami az Autamatikus javítások-ra való klikkelésnél nem a megfelelő lapra, hanem a Windows XP filekeresőjére ugrik (Excel 2003-ban). Mert nálam momentán ez van, és elég bosszantó. Ha nálatok jelentkezne ilyesmi, hogy próbálnátok meg a helyreállítani?

Herold 2010. júl. 3. Creative Commons License 12252
Na ez elég láma kérdés volt, megtaláltam a MA() függvényt. :)
Előzmény: Herold (12251)
Herold 2010. júl. 3. Creative Commons License 12251
Van valami mód makrók nélkül arra, hogy megvizsgáljuk, a mai dátum meghaladta-e az egyik cellában beállított dátumot? Hogy lehet lekérdezni az épp aktuális dátumot?
Sánta Kutya (SK) 2010. júl. 2. Creative Commons License 12250
Gondolom, igen, ugyanezzel a logikával.
ÉV(A1:A100)=2010 -- ez egy logikai kifejezés, amely az igazhoz egyet, a hamishoz nullát rendel. Ha a B1 helyébe azt írod, hogy (B1:B100="B"), akkor valósznűleg minden B betűhöz egyet rendel, és megkapod a darabszámot összegként.
Előzmény: Redlac (12249)
Redlac 2010. júl. 2. Creative Commons License 12249
és ha a B oszlopba nem számok kerülnek, hanem mondjuk betűk. "A", "B" és "C". Adott hónap adott betűit is lehet gyűjteni?
Redlac 2010. júl. 2. Creative Commons License 12248
Köszönöm nektek a kimerítő választ :-)

SQLkérdés-hez kapcsolódva az alázat felétek is megvan. (Leboruló emberke :-))
Delila_1 2010. júl. 2. Creative Commons License 12247
Nem túl elegáns dolog, de az A2:A30 helyett eleve A2:A50-et írhatsz.
Előzmény: Sánta Kutya (SK) (12246)
Sánta Kutya (SK) 2010. júl. 2. Creative Commons License 12246
Köszi, akkor fel is hozom ide, hogy könnyebb legyen megtalálni (előzmény).
Csak azt hiszem, hogy ezt elég nehéz módosítani, ha a 30. sor alá újabb adatokat viszünk be, tehát bizonyos értelemben nem illeszkedik az Excel filozófiájába, de kétségtelenül nagyon hasznos.

Már többször elhatároztam, hogy egyben végigolvasom és kijegyzetelem az egész topikot, mivel elképesztő mennyiségű bölcsesség van itt felhalmozva, de mindig megálltam egy bizonytalan jövő idejű elképzelésnél. :-)
Előzmény: Delila_1 (9950)
Delila_1 2010. júl. 2. Creative Commons License 12245
A SZORZATÖSSZEG értelmezéséhez lapozz vissza a #9661-re.
Előzmény: Sánta Kutya (SK) (12235)
Törölt nick 2010. júl. 2. Creative Commons License 12244
ja bocs, rögtön fennakadtam.
Előzmény: Delila_1 (12241)
Törölt nick 2010. júl. 2. Creative Commons License 12243
Nem igaz.
A SZORZATÖSSZEG fgv van 2003-ban is. Sőt. Úgy gondolom még alatta is.
Előzmény: SQLkerdes (12240)
Sánta Kutya (SK) 2010. júl. 2. Creative Commons License 12242
Akkor nem fogalmaztam világosan, mert akik ezt csinálják, sosem hallottak tömbfüggvényről. Beírja a tag az 1. sorba, hogy A1:A30, noha ott éppen csak az első sor adatával dolgozik (mindegyik mellett egy eredménynek kell látszania), majd megfogja a jobb alsó sarkát az egérrel, és folytatja a 30. sorig. Ahol lesz belőle A30:A59, de ennek már semmi köze a táblázat adataihoz.
Előzmény: SQLkerdes (12239)
Delila_1 2010. júl. 2. Creative Commons License 12241
Régebbiekben is van.
Előzmény: SQLkerdes (12240)
SQLkerdes 2010. júl. 2. Creative Commons License 12240
Delila megoldásához még annyit, hogy a SZORZATÖSSZEG nem korlátlanul kompatibilis lefele (asszem csak xl2007 és felette használható).
Előzmény: Delila_1 (12234)
SQLkerdes 2010. júl. 2. Creative Commons License 12239
Mondjuk még a felvetésedhez hozzátartozik az, hogy a HA(A1>100...) egy cellába kerül, addig a HA(A1:A30>100...) egy 30*1-es tömbbe.
És a tömbfüggvényes változatot nem sima ENTER-rel, hanem tömbfüggvényhez méltóan CTRL+SHIFT+ENTER-rel kell lezárni.

A tömbfüggvény kevesebb helyet foglal memóriában, bár én a mai számítási és merevlemez kapacitások korában ezt nem érzem átütő érvnek...
Előzmény: Sánta Kutya (SK) (12235)
SQLkerdes 2010. júl. 2. Creative Commons License 12238
Miközben lent azt írtam, hogy SMALL, igazából a LARGE függvényt magyaráztam hevesen :-)
Előzmény: SQLkerdes (12237)
SQLkerdes 2010. júl. 2. Creative Commons License 12237
Az ellenszenvedet :-) az okozza, hogy a HA függvényt tömbfüggvényként használják, ami szerintem teljesen helyes, néha helyesebb is mint a nem tömbfüggvény.

Én azt szoktam mindíg mondani, hogy ha egy új oszlopot csak azért készítünk, hogy oda kiszámoljunk valamit, amit majd valami más függvény fog bemeneti adatnak használni, akkor az rossz. Többek között az ilyen esetekre találták ki a tömbfüggvényeket.

Vegyük Redlac lenti problémáját. A Hónap adatot csak azért raktad volna egy új oszlopba, hogy utána kielemezhesd, hogy az adott sor egy bizonyos hónaphoz tartozik-e. Felesleges adat a képernyőn, még akkor is ha elrejted.

Helyette a jó megoldás a feladat memóriában elvégeztetése ahogy Delila meg én csináltuk, beágyazva valamilyen más függvénybe (Delila a sumproduct-ot használta én a sum-ot).

Pld. tegyük fel, hogy az A1:A100 tartomány egyszerre tartalmaz string és szám adatokat és meg kellene tudjuk határozni a számok közül az 5. legnagyobbat. (A SMALL függvénynek nem adhatjuk meg a teljes A1:A100 tartományt, mert nem számok is vannak benne).

Hagyományos megoldás az lehet, hogy a B oszlopba berakunk egy HA függvényt, ami ISNUMBER igaz esetén a releváns cella tartalmát (ami szám), hamis esetén nullát (v. egy kellően kis számot ad vissza ami tuti nem kerülhet be az 5 legnagyobb szám közé (pld mínusz egymillió). Ezek után a B oszlopot már vizsgálhatjuk a SMALL (B1:B100,5) függvénnyel, hogy az áhított eredményt megkapjuk.

Ezzel szemben a helyes megoldás a cseréket memóriában elvégezni egy IF függvénnyel és ezt az egészet beágyazni a SMALL függvénybe, valahogy így:
=SMALL(IF(ISNUMBER(A1:A100);A1:A100;-1000000),5).

Látszik hogy az IF tökéletesen funkcionál tömbfüggvényként.
Előzmény: Sánta Kutya (SK) (12235)
Sánta Kutya (SK) 2010. júl. 2. Creative Commons License 12236
'nagy' --> "nagy"
Előzmény: Sánta Kutya (SK) (12235)
Sánta Kutya (SK) 2010. júl. 2. Creative Commons License 12235
Ez nagyon elegáns megoldás! Nekem nem jutott volna eszembe ez sem, hogy ilyen módon lehet tartományokra hivatkozni egy szorzásnál.

Ehhez kapcsolódó kérdés:
Gyakran látom, hogy mondjuk a1:a30-ban van valamilyen szám, és akkor a HA(A1>100;'nagy';"kicsi") típusú függvény helyett emberek HA(A1:A30>100;'nagy';"kicsi")-t írnak, aminek a vége persze a sorozat kitöltése után már HA(A30:A59>100;'nagy';"kicsi") lesz, miközben a 30. sor alatt egészen más van. Én erre azt szoktam mondani, hogy rossz, fogalmilag zavaros, noha meglepetésemre a helyes eredményt mindig kiadja. Lehet, hogy tévedtem? Tekinthető ez elvileg egyenértékű helyes megoldásnak? Mert míg egy szorzatösszeg eleve tartományokat szoroz, a HA függvénynek ebben az alkalmazásban értelmezésem szerint csak egy sorban levő adatokkal lehet dolga egyszerre.
Előzmény: Delila_1 (12234)
Delila_1 2010. júl. 2. Creative Commons License 12234
Ehhez nem kell Shift+Ctrl+Enter:

=SZORZATÖSSZEG((HÓNAP(A1:A100)=10)*(ÉV(A1:A100)=2010);B1:B100)
Előzmény: Redlac (12224)
SQLkerdes 2010. júl. 2. Creative Commons License 12233
Excel array formula series
Itt is van.
Asszem főiskolán tanít a csóka és a tananyagot felteszi youtube-ra. El sem tudom mondani mennyit tanultam ezekből a videókból.
(elsősorban alázatot, mert eddig azt hittem, hogy jó vagyok excelből...)
Előzmény: Sánta Kutya (SK) (12230)
SQLkerdes 2010. júl. 2. Creative Commons License 12232
Tömbképlet, ahogy nagyon helyesen gyanítottad is.
Az angol helpben array function címszó alatt érdemes keresni.
Ha jobban érdekel akkor a youtube-on keress rá az:
"array function" excel
-re és találsz rengeteg segítséget.

Külön ajánlom az excelisfun nevű felhasználót. A csóka agyát halála után valszeg el fogja lopni a Microsoft... Persze lehet már előre megvették rá az opciót :-)
Előzmény: Sánta Kutya (SK) (12230)
SQLkerdes 2010. júl. 2. Creative Commons License 12231
Ja, már látom nem a kérdésedet választoltam meg.
Szóval feltételezve, hogy:
- a dátumok az A1:A100 tartományban vannak,
- az összesítendő adatok a B1:B100-ban (pld. számlák nettó összegei).

A 2010. 10. havi számlák összesenje:
=sum(--(month(a1:a100)=10)*--(year(a1:a100)=2010)*b1:b100)

CTRL+SHIFT+ENTER-rel lezárni.
Előzmény: SQLkerdes (12229)
Sánta Kutya (SK) 2010. júl. 2. Creative Commons License 12230
Te jó ég, ez miféle állatfaj? Hol vannak ezek dokumentálva?
Előzmény: SQLkerdes (12228)
SQLkerdes 2010. júl. 2. Creative Commons License 12229
helyesen a második függvény, lentebb rossza a zárójelezés:
=sum(--(month(a1:a100)=10)*--(year(a1:a100)=2010))

Szólj ha pld az adott hónap kibocsátott számláinak (vagy bármi is van a többi oszlopodban) összesenjét is szeretnéd látni, bár innen már relative könnyen kikisérletezhető.

Előzmény: SQLkerdes (12228)
SQLkerdes 2010. júl. 2. Creative Commons License 12228
=sum(--(month(a1:a100)=10))

Ez az A1:A100 range-t értékeli ki és megszámolja, hogy hány októberi (10. hónap) dátumot tartalmaz.
A függvényt Ctrl+Shift+Enter-rel kell lezárni.

Ha az évet is nézni szeretnéd, akkor:
=sum(--(month(a1:a100=10))*--(year(a1:a100=2010)))

Előzmény: Redlac (12227)
Redlac 2010. júl. 1. Creative Commons License 12227
Igen, most én is ezzel próbálkozom, de nem szép.
Előzmény: Sánta Kutya (SK) (12225)
Sánta Kutya (SK) 2010. júl. 1. Creative Commons License 12226
1-2 hete volt egy hasonló probléma, olvass vissza pár oldalt.
Előzmény: Pitti11 (12223)
Sánta Kutya (SK) 2010. júl. 1. Creative Commons License 12225
Hát ez nem túl elegáns megoldás, de én kitenném a hónapot egy külön oszlopba, mondjuk b1=hónap(a1), amit el is lehet rejteni, és ezt használnám kritériumnak.
Gyanítom, hogy valami tömbképlet lehet a kanonikus megoldás.
Előzmény: Redlac (12224)
Redlac 2010. júl. 1. Creative Commons License 12224
Üdv Nektek!

Szumha függvényt már használtam, csak annyi lenne a kérdésem, hogyan határozom meg azt a kritériumot, hogy adott hónap adatait számolja.
Tehát egy tartományba különböző jellemzőket írunk be. Az első oszlop a teljes (2010.07.01) dátumformátum. Naponta több adat is kerülhet bele. Utána pár oszlop melyekből gyűjtenék.
Ezeket szeretném havi összesítőbe rendszerezni.
Pitti11 2010. júl. 1. Creative Commons License 12223

Sziasztok,

 

Adott egy közös használatú excel file, amit 8-10 felhasználó tölti fel adatokkal. Vegyesen 2007 illetve 2003-as office-ok vannak. 14 munkalap van, semmi bonyolult képlet, nincs makró, fájlhivatkozások... stb, szóval viszonylag egyszerű.

Nos a file mérete 1MB-ról indult ami drasztikusan növekszik, akár néhány adat beírása után a duplájára. Gondolom a kompatibilitási mód a 2007 és 2003 között okozza ezt, de valahogy meg kellene állítanom.

Most 24MB méretnél tartunk, az utolsó mentés előtt még 12MB volt.

Tapasztaltatok már ilyet? Hol kellene keresgélnem?

Mosely 2010. júl. 1. Creative Commons License 12222
Húha. Tényleg írtad. Most már értem, néha miért néznek rám furcsán a kollégák. Egyébként valóban meleg van. Quanticoban az összes légkondi meghalt.
Előzmény: Sánta Kutya (SK) (12221)
Sánta Kutya (SK) 2010. júl. 1. Creative Commons License 12221
Igen, pont azt írtam. Meleg van az FBI-nál? :-)
Előzmény: Mosely (12220)
Mosely 2010. júl. 1. Creative Commons License 12220
Gondolom jó a Visual Basic is. Jól gondolom?
Előzmény: Sánta Kutya (SK) (12219)
Sánta Kutya (SK) 2010. júl. 1. Creative Commons License 12219
Talán azzal, amelyikhez van jó könyved, vagy tudsz segítséget kapni a környezetedben. Ha rendszeresen akarsz Excel-problémákat megoldani makróval, akkor akár a Visual Basic is lehet. A Basicet ugyan sokan fújolják, de generációk tanulták rajta a programozást, olyan rossz nem lehet.
Előzmény: Mosely (12218)
Mosely 2010. júl. 1. Creative Commons License 12218
Az a jelvény mizéria... Évekig ugrattak vele. Ne kezdd Te is!
De ha már szóba elegyedtünk, megkérdezném, hogy szerinted melyik programozási nyelvvel, fejlesztőkörnyezettel érdemes kezdeni a tanulást abban az esetben, ha teljesen kezdők vagyunk programozás terén.

Előzmény: SQLkerdes (12217)
SQLkerdes 2010. júl. 1. Creative Commons License 12217
Nyilván az sem segít, ha ellopják az ember jelvényét :-)
Előzmény: Mosely (12216)
Mosely 2010. júl. 1. Creative Commons License 12216
... nos, igen. Sajnos a gazdasági válság elérte a "céget" is. Nekem kell az irodai munkát is elvégezni. Helikopteres üldözésre, államokon átívelő hajtóvadászatra már nincs keret.
Előzmény: SQLkerdes (12215)
SQLkerdes 2010. júl. 1. Creative Commons License 12215
Egy FBI ügynöknek nem is mernék másmilyen makrót írni ;-)
Előzmény: Mosely (12214)
Mosely 2010. júl. 1. Creative Commons License 12214
SQL Kérdés! Tökéletesen működik! Isten áldjon!
A.M.
Előzmény: SQLkerdes (12213)
SQLkerdes 2010. júl. 1. Creative Commons License 12213
Sub index()

Dim iSorokSzama As Integer
Dim i As Integer

iSorokSzama = ActiveSheet.UsedRange.Rows.Count

For i = 2 To iSorokSzama 'elso sor a fejlec, felteszem
If Cells(i, 1).Value <= Now() Then Cells(i, 3) = Cells(i, 2)
Next

End Sub
Delila_1 2010. júl. 1. Creative Commons License 12212
Nálam IE 7-tel simán bejön a tagolás.
Előzmény: Jimmy the Hand (12201)
Mosely 2010. júl. 1. Creative Commons License 12211
Köszi a gyors reagálást Sánta Kutya! Sajnos az én esetemben kénytelen vagyok ragaszkodni a makróhoz. (de nagyon penge a javaslatod, köszi mégegyszer)

A.M.
Előzmény: Sánta Kutya (SK) (12210)
Sánta Kutya (SK) 2010. júl. 1. Creative Commons License 12210
Ha ragaszkodsz a makróhoz, akkor nem én vagyok, aki segíteni tud, de ha egyszerű függvény is jó...

C1:
=HA(a1<=MA();B1;"")
Előzmény: Mosely (12209)
Mosely 2010. júl. 1. Creative Commons License 12209
Sziasztok!

Makró írással kapcsolatban szeretnék segítséget kérni.
Van 3 oszlopom. A, B és C. A-ban a dátum van, B-ben a dátumhoz kapcsolódó összeg, a C pedig egyelőre üres.
Azt szeretném, hogy ha azokat az összegeket, amelyekhez a mai, vagy egy korábbi dátum tartozik, átmásolná át a C oszlopba.
2 órája küzdök vele, de semmire nem jutottam.
Előre is köszönöm a segítséget.

A.M.
Sánta Kutya (SK) 2010. júl. 1. Creative Commons License 12208
Én hármat tettem, úgy látványosabb, de így is látszik.
Előzmény: Jimmy the Hand (12207)
Jimmy the Hand 2010. júl. 1. Creative Commons License 12207
Sub proba()
 MsgBox "itt a behúzás, hol a behúzás?"
End Sub
Előzmény: Jimmy the Hand (12206)
Jimmy the Hand 2010. júl. 1. Creative Commons License 12206
Sub proba()
 MsgBox "itt a behúzás, hol a behúzás?"
End Sub
Előzmény: Jimmy the Hand (12205)
Jimmy the Hand 2010. júl. 1. Creative Commons License 12205
Minden szóközt cseréljek le nonbreaking space-re?
Előzmény: Sánta Kutya (SK) (12203)
Sánta Kutya (SK) 2010. júl. 1. Creative Commons License 12204
Sub proba()
   MsgBox "itt a behúzás, hol a behúzás?"
End Sub
Előzmény: Jimmy the Hand (12202)
Sánta Kutya (SK) 2010. júl. 1. Creative Commons License 12203
Nálam a 11415 indentálva van, a 11412 meg nincs. FF, legújabb frissítés. Talán a beírásnál számít a böngésző. Viszont: az &nbsp; amit lejjebb írtam, mindig működik, és egyszerű szövegcserével berakható.
Előzmény: Jimmy the Hand (12202)
Jimmy the Hand 2010. júl. 1. Creative Commons License 12202
Nem nagyon akar ez jól kinézni, akármelyik böngészővel próbálom...

Sub proba()
MsgBox "itt a behúzás, hol a behúzás?"
End Sub
Előzmény: Jimmy the Hand (12201)
Jimmy the Hand 2010. júl. 1. Creative Commons License 12201
IE 6.0

Sub proba()
MsgBox "itt a behúzás, hol a behúzás?"
End Sub
Előzmény: Jimmy the Hand (12200)
Jimmy the Hand 2010. júl. 1. Creative Commons License 12200
Próba

Sub proba()
MsgBox "itt a behúzás, hol a behúzás?"
End Sub
Delila_1 2010. jún. 30. Creative Commons License 12198
Google-ból tagolás nélkül teszi fel.
Előzmény: Jimmy the Hand (12197)
Jimmy the Hand 2010. jún. 30. Creative Commons License 12197
Nálam a Firefox sem. De nem biztos, hogy böngésző-specifikus hiba. Okozhatja a tucatnyi kiegészítő bármelyike, vagy a magyar verzió, vagy bármi.
Előzmény: SQLkerdes (12196)
SQLkerdes 2010. jún. 30. Creative Commons License 12196
A Safari nem :-(
Előzmény: Törölt nick (12194)
SQLkerdes 2010. jún. 29. Creative Commons License 12192
Az xl2007-ben a View menüben van egy View Side-by-side rész, én ott keresgélnék.

1.) View/New window (ez csinál egy új ablakot a munkafüzetednek, így már kétszer láthatod ugyanazt).
2.) View/View side by side (ez egymás alá rakja a munkafüzeted két ablakát
3.) View/Arrange All, ezzel vertikálissá teheted a két ablakot
4.) View/Synchronous scrolling (ezzel lekapcsolod a két ablak szinkron görgetését).

Hogy ezt ne kelljen minden egyes alkalommal megcsináljad, én javasolnám a View/Save Workspace alkalmazását.
Előzmény: SQLkerdes (12191)
SQLkerdes 2010. jún. 29. Creative Commons License 12191
Előrebocsátom, hogy nem tudom mi a megoldás, de arra gyanakszom nem a SelectionChange.

Mert te itt arról beszélsz, hogy ha gördíted a táblázatot ... és a scrollozás nem jár kijelöléssel.

Esetleg azt lehet VBA-n kívül megpróbálni, hogy a munkalapot két részre bontod. Az egyiken lesz a táblázatod (amit gördíthetsz ahova akarsz) a másikban pedig mozdulatlanul vigyázzban áll a chart.
Előzmény: stromba (12186)
Delila_1 2010. jún. 29. Creative Commons License 12190

"a sor eleji space-eket az Index lakapta... ". Nem mindegy, melyik böngészőből hívod meg a fórumot, erre Jimmy jött rá. Az IE szépen hozza a tagolást (csak itt használom).

 

Itt a módosított verzió:

 

Sub summa_1()
    Dim oszlop As Integer, lap As Integer, oszlop_1 As Integer
    Dim sor As Integer
   
    For lap = 1 To ThisWorkbook.Sheets.Count - 1
        Sheets(lap).Select
       
        For sor = 1 To 150
            If Sheets("Összesítő").Range("IV" & sor).End(xlToLeft).Column = 1 Then
                oszlop_1 = 4
            Else
                oszlop_1 = Sheets("Összesítő").Range("IV" & sor).End(xlToLeft).Column + 1
            End If
           
            For oszlop = Range("IV" & sor).End(xlToLeft).Column To 1 Step -1
                If Cells(sor, oszlop) > "" Then
                    Sheets("Összesítő").Cells(sor, oszlop_1) = Cells(sor, oszlop)
                    oszlop_1 = oszlop_1 + 1
                End If
            Next
        Next
    Next
           
End Sub

Előzmény: BBazsi (12187)
Sánta Kutya (SK) 2010. jún. 29. Creative Commons License 12189
Persze, még a mezei HTML is lekapja. Ez kivételesen nem az Index bűne. Írd azt, hogy &nbsp; (nem törhető szóköz).
Előzmény: BBazsi (12188)
BBazsi 2010. jún. 29. Creative Commons License 12188
Vaze,a sor eleji space-eket az Index lakapta... :(
Előzmény: BBazsi (12187)
BBazsi 2010. jún. 29. Creative Commons License 12187
Visszakanyarodva... :)

Valamiért nem bírtunk leszakadni erről a 10. sorról, miközben a sok információ között elrejtve :) ott lapult, hogy van vagy 150 vizsgálandó sorom is (!) munkalaponként. Nyafogás helyett (nagy kedvvel, de segédlet nélkül) belevetettem magam a VB makróírásba, így most már van egy új ciklusom az eddigieken felül (ováció!). Már csak egyetlen kérdésem lenne: nem találom a szintaktikáját a Range változó (?) argumentumának. A te makródban ez "IV10", ami, ahogy rájöttem a ctrl-end megfelelője a 10. sorban (ugye?). Hogy lehet ezt "univerzálissá" tenni, hogy az esetemben "For sor=1 to 150" ciklus bármely sorában érvényes legyen? Ui. akármilyen szintaktikával próbálkoztam, nem jött be.

jelenleg így állok:

Sub summa()
Dim oszlop As Integer, lap As Integer, oszlop_1 As Integer, sor As Integer

For sor = 1 To 150 'paraszt módszer/1
oszlop_1 = 4 'nekem így jó
For lap = 1 To ThisWorkbook.Sheets.Count - 1 'ez tiszta
Sheets(lap).Select
For oszlop = 1 To 20 'paraszt módszer/2-kínomban, és step -1 nélkül a fasza
If Cells(sor, oszlop) > "" Then
Sheets("Összesítő").Cells(sor, oszlop_1) = Cells(sor, oszlop)
oszlop_1 = oszlop_1 + 1
End If
Next
Next
Next
Sheets("Összesítő").Select
End Sub

Range("IV150"), Range ("IV"; sor) és hasonlókkal próbálkoztam, de egyik sem kóser...
Előzmény: Delila_1 (12181)
stromba 2010. jún. 29. Creative Commons License 12186

Sziasztok

 

Adott egy táblázat (70 sor, 9 oszlop). Az első 3 sor rögzítve van. A táblázat mellett van egy chart (5. sortól). Amit szeretnék megoldani, az az hogy ha a táblázatot gördítem hogy az alsó sorok is látszódjanak, akkor a mellette levő chart is mozogjon - maradjon látható. (excel 2007)

 

Azt sejtem hogy a munkalap SelectionChange eseménye lesz a barátom, de hogyan?

 

 

 

stromba 2010. jún. 28. Creative Commons License 12185
Előzmény: k-betti (12132)
Delila_1 2010. jún. 25. Creative Commons License 12184
Szívesen.

SQL! Így jár, aki csavarog. :)
Előzmény: BBazsi (12182)
SQLkerdes 2010. jún. 25. Creative Commons License 12183
Ez az élet rendje.
Én kitartó kérdezősködéssel megszerzem az összes infót, Delila meg learatja a babérokat ...

:-)
BBazsi 2010. jún. 25. Creative Commons License 12182

Örök hála! (Most értem vissza gépközelbe.)

Köszi!

Bazsi

Előzmény: Delila_1 (12181)
Delila_1 2010. jún. 25. Creative Commons License 12181

Ha a sorrend mindegy, ez a makró elintézi. Az utolsó lap legyen az, ahol összesítesz, a makróban ez Összesítő névre hallgat.

 

Sub summa()
    Dim oszlop As Integer, lap As Integer, oszlop_1 As Integer
   
    oszlop_1 = 1
    For lap = 1 To ThisWorkbook.Sheets.Count - 1
        Sheets(lap).Select
        For oszlop = Range("IV10").End(xlToLeft).Column To 1 Step -1
            If Cells(10, oszlop) > "" Then
                Sheets("Összesítő").Cells(10, oszlop_1) = Cells(10, oszlop)
                oszlop_1 = oszlop_1 + 1
            End If
        Next
    Next
           
End Sub

Előzmény: BBazsi (12180)
BBazsi 2010. jún. 25. Creative Commons License 12180
No link.
A számszerű értékek ömlesztve: A10,B10,C10,D10... cellákba
Még a sorrend is mindegy.
Előzmény: SQLkerdes (12179)
SQLkerdes 2010. jún. 25. Creative Commons License 12179
Utolsó kérdés:
Az összesítő megfelelő sora a munkalap megfelelő cellájának értékét mutassa vagy egy linket a megfelelő cellára?
Előzmény: SQLkerdes (12177)
BBazsi 2010. jún. 25. Creative Commons License 12178
Előre is kösz!
Előzmény: SQLkerdes (12177)
SQLkerdes 2010. jún. 25. Creative Commons License 12177
Ilyen függvény, ha van is, a nem-éri-meg kategóriába tartozik.
Ez makro lesz, nem túl bonyi, de most el kell menjek, szóval a kódot hátha valaki beszúrja. Délután megint erre járok, ha addig nincs meg, akkor megírom.
Előzmény: BBazsi (12174)
BBazsi 2010. jún. 25. Creative Commons License 12176
(Basszus, most olvastam a zárójeles részedet, ugyanazt magyarázod. :))
Előzmény: SQLkerdes (12173)
BBazsi 2010. jún. 25. Creative Commons License 12175
YESSS!
Simán, balról jobbra feltöltve.

(Mivel sok fül van, nem is lehetne elvárni, hogy ugyanaz a cella -oszlop- gyűjtse ki az összes többiét.)
Előzmény: SQLkerdes (12173)
BBazsi 2010. jún. 25. Creative Commons License 12174
Egyáltalán van-e ilyen mátrixfüggvény. Ha nincs, nyilván az utolsó fül tartományon belüli minden cellájának tartalmaznia kell egy rohadt hosszú vizsgálati képletet (ezt akartam elkerülni).
SQLkerdes 2010. jún. 25. Creative Commons License 12173
És ezek milyen sorrendbe kerüljenek az összesítő fülre? Mondjuk ha a Munka1-en van 2 adat a 10. sorban, a Munka2-ben meg csak egy, akkor az Összesítő A10 és B10 mutassa a Munka1 adatait, majd az Összesítő C10 a Munka2-t?

Szóval csak balról jobbra feltöltve?

Vagy: Ha a Munka1-en a D10-ben van adat akkor az az Összesítőn is a D10-be kerüljön (persze ehhez biztosnak kell lenni benne, hogy semmi más munkalapon nem lesz tartalma a D10-nek, mert akkor kettő tartalmat kellene betaposni egy cellába).
Előzmény: BBazsi (12169)
BBazsi 2010. jún. 25. Creative Commons License 12172
Nem, semmi összehasonlítás, csak annak vizsgálata kellene, hogy van-e szám az adott cellában (ez esetben röpül az érték az utolsó fül adott sorának a végére), vagy nincs.
Előzmény: szkripnyik (12171)
szkripnyik 2010. jún. 25. Creative Commons License 12171
Tehát: Valamelyik fül adott sorában bármely mezőjének értéke megegyezik-e valamelyik másik fül ugyanazon sorában valamelyik mező értékével?

Szerintem szép for ciklusok egymásba ágyazva....
Előzmény: BBazsi (12164)
BBazsi 2010. jún. 25. Creative Commons License 12170
Ja, kizárólag számszerű értékekről van szó, semmi szöveg és egyéb nyalánkság.
BBazsi 2010. jún. 25. Creative Commons License 12169
Ja, csak egy, vagy egy sem, esetleg 13, esetleg az összes, ahogy a számítás adja (A feltételek nem teljesülése esetén a cellák értéke: "" ,azaz semmi.) (De lehet nulla is, ha úgy könnyebb.)
Előzmény: SQLkerdes (12168)
SQLkerdes 2010. jún. 25. Creative Commons License 12168
Ez azt jelenti, hgoy az egyes fülek 10. sorában valahol van egy, de csak egy adat és azt kell megtalálni és rátenni az összesítő fülre?
Előzmény: BBazsi (12166)
BBazsi 2010. jún. 25. Creative Commons License 12167
Igen, mondjuk nekem magyar nyelvű, így Munka1, Munka2 stb.
Előzmény: SQLkerdes (12165)
BBazsi 2010. jún. 25. Creative Commons License 12166
... tehát csak mezei módon, libasorba kigyűjteni, semmi szummázás és egyéb műveletek.
SQLkerdes 2010. jún. 25. Creative Commons License 12165
Mi a munkalapok elnevezésének szabályai? Sheet1, Sheet2, etc?
Előzmény: BBazsi (12164)
BBazsi 2010. jún. 25. Creative Commons License 12164

Excel guruk, please!

 

Köszi, Delila, de biztosan pontatlan voltam, ez  így nyilvánvaló.

 

A harmadik fül (pl.) 10. sorában kellene kigyűjteni a többi fül 10. sorát, ui. nem feltétlenül a B,F,C,K stb. oszlopokban jelenik meg érték, hanem a 10-es sorok (egyéb képletek által generált) BÁRMELY cellájában (oszlopában) megjelenhet!!!

 

(A valóságban van vagy 30 fül és mindegyiken 25 oszlop-50 sor, a 31-edikben szeretnék összesítést készíteni soronként!)

 

Köszi!

Előzmény: Delila_1 (12161)
SQLkerdes 2010. jún. 25. Creative Commons License 12163
Ugyanúgy ahogy a munkalapokon.
A Find résznél kattints rá az Options gombra és ott be lehet állítani, hogy munkalapot (Sheet) v. munkafüzetet (workbook) nézzen át.
Előzmény: falum (12162)
falum 2010. jún. 25. Creative Commons License 12162
Sziasztok!

Egy kérdésem lenne:hogyan lehet keresni az excelben a munkafüzetek között? A munkalapok közötti keresést már megoldottam,de ezt még nem sikerült.

Előre is köszönöm a választ:

üdv, falum
Delila_1 2010. jún. 25. Creative Commons License 12161
A harmadik fülön:

A10 -> ='első fül'!B10
B10 -> ='első fül'!F10
C10 -> ='második fül'!C10
D10 -> ='második fül'!K10

Ha a lapok neve 1 szóból áll, és ez nem szám, az aposztrófok elhagyhatók.
Előzmény: BBazsi (12160)
BBazsi 2010. jún. 25. Creative Commons License 12160
Sziasztok!
Egy kis segítséget kérnék: különböző füleken található (azonos) sorok tartalmát szeretném egy külön fülön kigyűjtögetni, szépen sorban egymás mellett.

Pl. az első fül tizedik sorában van 2 szám (mondjuk a "B10" és az "F10" cellában), a második fül "C10" és "K10" cellájában szintén egy-egy szám stb., ezeket szeretném kigyűjteni harmadik fül 10. sorába, A10,B10,C10,D10... cellákba.

Van erre mód?
Előre is kösz!!
k-betti 2010. jún. 24. Creative Commons License 12159
Köszi neked is. Majd kipróbálom a részösszeget is, de egyelőre a fejléc tűnt a legjobb megoldásnak, mert így kevesebbet kell formáznom (oda, ahol a fejléc kerül, nem kell rács, a táblázat többi része meg rácsos.... csupa-csupa felesleges klikk :)
Előzmény: Delila_1 (12146)
k-betti 2010. jún. 24. Creative Commons License 12158
Köszi
Előzmény: SQLkerdes (12149)
Redlac 2010. jún. 24. Creative Commons License 12157
Az elkészítése alatt hol ezzel, hol azzal mentettem, de az utolsó talán 2007-el.

De ha nálad rossz volt, akkor az én 2007-esemen miért jó?
Előzmény: Törölt nick (12156)
Törölt nick 2010. jún. 24. Creative Commons License 12156
Én 2007-essel néztem és "rossz" volt.
Felmerül bennem a kérdés hogy mivel mentetted el? 2003-as v. 7-es?
Bár alighanem nem bír semmilyen jelentőséggel.
Előzmény: Redlac (12155)
Redlac 2010. jún. 24. Creative Commons License 12155
De ha a lapon lenne hiba, akkor a 2007-es miért kezeli probléma nélkül?
Előzmény: Delila_1 (12127)
Delila_1 2010. jún. 24. Creative Commons License 12154
Igaz.

A For Each helyett elég ez:

intVisible = Application.WorksheetFunction.CountA(Columns("A:A").SpecialCells(xlCellTypeVisible))-13

Előzmény: SQLkerdes (12149)
tagore72 2010. jún. 24. Creative Commons License 12153
Szia!

Gondolom, igen:
Kimutatáson állva, beszúrás menü - diagram vagy
Kimutatáson jobb egér, Kimutatásdiagram menü

Joe
Előzmény: SQLkerdes (12152)
SQLkerdes 2010. jún. 24. Creative Commons License 12152
Mijaza kimutatás diagram? Pivot Chart?
Előzmény: tagore72 (12151)
tagore72 2010. jún. 24. Creative Commons License 12151
Sziasztok!

Dühöngök, de lehet, hogy van megoldás:

Excel 2003-ban készítettem egy kimutatást, abból egyszerűen
csináltam egy kimutatás diagramot, csodásan működik.

Excel 2007-ben megnyitva viszont nagyon sz.r lett:
- A külön fülön levő kimutatásdiagram, nem az lett,
mert nincsenek rajta a kimutatás szűrők (azaz a feltételelek),
így aztán át kell menni a kimutatásra, szűrni, majd vissza a diagramra,
hát ez így nagyon vacak!
- Ha Excel 2007-ben készítek a kimutatásból diagramot,
akkor meg nem külön fülre teszi, pláne nem szűrőkkel,
így meg aztán lehet kerülgetni a kimutatást, h a diagram is jól látszódjon.

Ezt hogy bírták így elrontani, nem értem, vagy csak én nem értek hozzá?


Joe
SQLkerdes 2010. jún. 24. Creative Commons License 12150
Igen, de neki a fejlécben kell!
Előzmény: Delila_1 (12146)
SQLkerdes 2010. jún. 24. Creative Commons License 12149
A workbook kódlapjára rakd ezt a kódot.
Teendők: változtasd meg a strsheetname="sheet1"
sort úgy, hogy a sheet1 helyére a te munkalapod nevét írod.
Pld. ha az autoszűrést tartalmazó munkalapodnak az a neve, hogy leltár, akkor a kód helyesen úgy néz ki, hogy:
strsheetname="leltár"

Ez a kód azt csinálja, hogy minden nyomtatás előtt automatikusan beállítja a fejlécet a megfelelő szövegre 15-ös betűtipussal. Ha nagyobbat akarsz akkor a kódban lévő két 15-öt cseréld ki arra a számra, amit betűméretnek szeretnél. Mindkettőt!



Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim intVisible As Integer
Dim rng As Range
Dim strSheetname As String

strSheetname = "Sheet1"

For Each rng In Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Areas
intVisible = intVisible + rng.Rows.Count
Next rng

intVisible = intVisible - 1 'A fejléc nem számít bele

Sheets(strSheetname).PageSetup.CenterHeader = "&15 A lista tartalmaz " & intVisible - 12 & " elemet. &15"


End Sub
Előzmény: SQLkerdes (12145)
Delila_1 2010. jún. 24. Creative Commons License 12148
Beállatások->Beállítások :D
Előzmény: Delila_1 (12147)
Delila_1 2010. jún. 24. Creative Commons License 12147
A Beállatásoknál az Általános fülön van egy ilyen opció: Adatlap kitöltését felajánlja.
Ekörül lehet talán valami, kapcsold ki.
Előzmény: Novalgin (12142)
Delila_1 2010. jún. 24. Creative Commons License 12146
Minek ehhez makró?
Egyszerűen beírod egy sorba - a táblázatodon kívül - valahova a függvényt.

=részösszeg(103;A:A)-13

és megformázod kedved szerint. Ez mindig a szűrésnek megfelelően mutatja a szűrt sorok számát, levonva a fölötte lévő 12 sort, és a címsort.

Off topic
SQL! a fekete öv rágalom! :)
Előzmény: k-betti (12143)
SQLkerdes 2010. jún. 24. Creative Commons License 12145
Az új kód a betűméret változtatás nélkül:
****************************************

Sub ChangeHeader()

Dim intVisible As Integer
Dim rng As Range

For Each rng In Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Areas
intVisible = intVisible + rng.Rows.Count
Next rng

intVisible = intVisible - 1 'A fejléc nem számít bele

With ActiveSheet.PageSetup
.LeftHeader = “”
.CenterHeader = "A lista tartalmaz " & intVisible-12 & " elemet."
.RightHeader = “”
.LeftFooter = “”
.CenterFooter = “”
.RightFooter = “”
End With
End Sub
Előzmény: k-betti (12143)
SQLkerdes 2010. jún. 24. Creative Commons License 12144
Van az excelben azt hiszem egy olyan funkció, hogy eltávolítja a személyes adatokat a lementett file Properties részéből.

Lehet ez be van állítva és ezzel gyűlik meg a baja a gépednek.
Előzmény: Novalgin (12142)
k-betti 2010. jún. 24. Creative Commons License 12143
Asszem maradok a makrónál.

Azt meg lehetne csinálni, hogy azt a számot írja ki, hogy mennyivel nagyobb, mint 12? És úgy, hogy a szám ne a sor végén legyen? És lehet-e betűméretet növelni? Próbálkoztam, de nem sikerült...

Pl.: A lista tartalmaz .... (autoszűrőzött eredmény mínusz 12) elemet
Előzmény: SQLkerdes (12133)
Novalgin 2010. jún. 24. Creative Commons License 12142
Mentésnél mindig felugrik ez a hibaüzenet, de ad hoc jelleggel bármikor támad, függetlenül attól, hogy épp mit csinálok.
hyperstoke 2010. jún. 24. Creative Commons License 12141
köszönöm szépen a válaszokat és főleg, hogy ilyen gyorsan jött

az első kérdésemmel kapcsolatban azért szenvedtem, mert én fordítva akartam módosítani, tehát kettőspontosra akartam módosítani a simát :D
Ebből látszik, hogy amikor sietne az ember, nem tud józan paraszti ésszel gondolkozni :D

köszi még1x
Sánta Kutya (SK) 2010. jún. 24. Creative Commons License 12140
Ha már nem frissítettem az előbb:
A nagy lista mellé készítesz egy oszlopot a kis listából így: =HELYETTE([kicsi.xls]munkalapneve!A2;":";""), és ezt lefelé folytatod. Mind a két táblázat legyen megnyitva.

Most már egymás mellett vannak, vagy a nagy lista elemei mellé írsz egy darabtali függvényt, ami mutatja, hányszor szerepel az adott elem a kicsiban (praktikusan 0 vagy 1), és aszerint rendezel, vagy feltételesen formázod ugyancsak a darabteli függvénnyel.
Előzmény: hyperstoke (12138)
Sánta Kutya (SK) 2010. jún. 24. Creative Commons License 12139
00:0X:08:Y0:XY:88 --> =HELYETTE(A1;":";"") --> 000X08Y0XY88
Előzmény: hyperstoke (12135)
hyperstoke 2010. jún. 24. Creative Commons License 12138
Az a lényeg, hogy a nagy listában ki kell jelölnöm azokat az eszközöket, amelyek a kicsiben benne vannak. Amik pedig nincsenek benne, azokat az eszközöket kell majd a késbbiekben begyűjtenem.
Előzmény: SQLkerdes (12137)
SQLkerdes 2010. jún. 24. Creative Commons License 12137
A lépések:
1.) a MAC címek azonos formátumra hozása
2.) egyezőségek azonosítása

Megoldás:

1.) SUBSTITUTE függvény. Ha pld a 00:0X:08:Y0:XY:88 formátumú MAC cím a B1 cellában van, akkor el tudod távolítani a kettőspontokat a következő módon: =SUBSTITUTE(B1,":","")

2.) VLOOKUP függvényt teszel a nagyobb lista minden sora mellé, hogy keresse meg van-e egyező MAC cím a kisebb listában.
Ha megadod a két táblázat szerkezetét, akkor a VLOOKUP megírásával is szívesen segítünk. Mit akarsz látni ha egyezés van? A kis lista egy elemét (pld felhasználónév) vagy csak annyit, hogy "Van kislista elem"?

3.) akár még Feltételes formázással is megjelölheted a nagy lista azon elemeit amiknek nincs kislista párjuk (de ehhez is kell mindkét lista szerkezete)
Előzmény: hyperstoke (12135)
hyperstoke 2010. jún. 24. Creative Commons License 12136
ja és office 2003 van a gépen, köszi előre is
Előzmény: hyperstoke (12135)
hyperstoke 2010. jún. 24. Creative Commons License 12135
üdv

van két táblázatom, az egyikben több ezer sor, a másikban kb 1000 sor, a feladatom az lenne, hogy megnézzem a kisebb lista szerepel-e a nagyobbik listában.

A gond csak az, hogy egy oszlop egyezés van a kettőben, ami viszont MAC cím, és más formában van két listában. Az egyikben 000X08Y0XY88, míg a másikban 00:0X:08:Y0:XY:88.

A kérdésem az, hogy lehet módosítani az első formátumot a másodikra, hogy egyezést találjon az excell? Illetve, ki lehet valahogy íratni, vagy jelöltetni a nagy táblában, hogy melyek azok, amelyek nincsenek benne a kicsi listában?
Dulifuli 2010. jún. 24. Creative Commons License 12134
Ma volt egy érdekes hiba, amire nem tudtam mit mondani. Office 2002 van a gépen, és amikor egy hálózati meghajtón található XLS-re kattintott kétszer a felhasználó, akkor elindult az Excel, csak éppen az állomány nem jelent meg benne. Csak egy szürke mező látszott, alul pedig kiírta, hogy Kész, és semmi más nem történt. Ugyanakkor - illetve utána - a Megnyitás funkcióval már sikerült megnyitni az állományt, és látszott rendesen. Viszont amikor újra kipróbáltuk, azaz becsuktuk az Excelt (még a Feladatkezelőben is ellenőrizve, hogy már nem fut), és újra megpróbáltuk kettős kattintással megnyitni az XLS-t, akkor ismét ugyanez történt. Látott már valaki ilyet? Mi lehet a gond, illetve a megoldása?
A gépen Windows XP van, SP3-mal.
SQLkerdes 2010. jún. 24. Creative Commons License 12133
Nem tom. RESZOSSZEG?
Ha a RESZOSSZEG(102,A:A) függvényt használod, akkor a függvény maga ne legyen az A oszlopban (különben beleszámolódik) és vonj le az eredményből 1-et (a fejléc miatt).
Előzmény: k-betti (12132)
k-betti 2010. jún. 24. Creative Commons License 12132
Köszi, ezt ki is próbáltam, sikerült.

A SUBTOTAL-nak mi a magyar megfelelője?

Köszi
Előzmény: SQLkerdes (12130)
SQLkerdes 2010. jún. 24. Creative Commons License 12131
És ahogy elnézem a SUBTOTAL(102, A:A) is megfelel a célnak
SQLkerdes 2010. jún. 24. Creative Commons License 12130
Na, szóval itt van.
A makrót minden nyomtatás előtt le kell futtatni.
A kért adat a középső fejlécbe kerül, minden más fej- és lábléc üressé válik. Ha máshol van szöveg akkor a releváns részt érdemes kivenni a kódból.


Sub ChangeHeader()

Dim intVisible As Integer
Dim rng As Range

For Each rng In Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Areas
intVisible = intVisible + rng.Rows.Count
Next rng

intVisible = intVisible - 1 'A fejléc nem számít bele

With ActiveSheet.PageSetup
.LeftHeader = “”
.CenterHeader = "A szûrés utáni sorok száma: " & intVisible
.RightHeader = “”
.LeftFooter = “”
.CenterFooter = “”
.RightFooter = “”
End With
End Sub
SQLkerdes 2010. jún. 24. Creative Commons License 12129
Makróval:

Sub ChangeHeader()
With ActiveSheet.PageSetup
.LeftHeader = “”
.CenterHeader = ""
.RightHeader = “”
.LeftFooter = “”
.CenterFooter = “”
.RightFooter = “”
End With
End Sub

Az idézőjelek közé kell betenni a kiirandó tartalmat.
Arra tuti van valami függvény, hogy az autoszűrt sorok számát kiszámold, csak én nem tudom.
Szóval ha jár erre valaki, aki tudja a megfelelő kódot erre az egy adatra, akkor azt a kódot kell betenni a megfelelő idézőjelek közé.

Delila, aki feketeöves a change események kódolásában, lehet még azt is meg tudja csinálni, hogy az autószűrő alkalmazásakor automatikusan lefussan a megfelelő kód.
Előzmény: k-betti (12128)
k-betti 2010. jún. 24. Creative Commons License 12128
Sziasztok!

Van-e megoldás arra, hogy az autoszűrőzött sorok számát a feljlécbe (ahol meg tudom adni az oldalak számát, stb.) automatikusan kiírja?

Köszi előre is
Delila_1 2010. jún. 24. Creative Commons License 12127
Akkor eléggé egyértelmű, hogy a lapon van a hiba. Vidd át az adatokat egy új lapra, ezt meg töröld ki.
Előzmény: Redlac (12125)
Redlac 2010. jún. 24. Creative Commons License 12126
Ha valaki még gondolja, szívesen átküldöm a fájlt, hátha kiesik a bug.
Előzmény: Redlac (12125)
Redlac 2010. jún. 24. Creative Commons License 12125
De még, ami fura. Egy új lapon vizsgálva az időpontot, nem jelez hibát, csak a táblázatban.
Előzmény: Delila_1 (12124)
Delila_1 2010. jún. 24. Creative Commons License 12124
Szerintem is bug lehet, nálam semmi baj az 5:42-vel 2003-ban.
Előzmény: Redlac (12123)
Redlac 2010. jún. 24. Creative Commons License 12123
A lapvédelem jelszót beleírtam a levélbe, nyugodtan kotorássz a táblázatba :-)

De rájöttem még valamire:

2 oprendszer van a gépemen, az egyiken O2003, a másikon O2007.

A hiba csak a 2003-as office-on jön elő! A 2007-esben tökéletesen működik. A munkahelyünkön természetesen 2003 van. Így gondolom neked is 2007-ed van.

Tehát a probléma összefoglalva (hátha vannak új betérők :-)):

Adott egy fkeres függvény, ami időpontokat keres kb. 200 sorban. Az időpontok formátuma teljesen mindegy, mert próbáltam sima időponttal és számmá alakítottal is. Az időpontok egyformák, mert saját másolatuk. Minden időponttal remekül megy minden, de a 05:42-t nem találja. Hangsúlyozom minden más időpontot megtalálja, és bármelyik sorba írom a 05:42-t, AZT nem találja csak. Ráadásul, hogy hab is legyen a tortán, a problémát csak 2003-as Office alatt produkálja, 2007-es alatt minden szép és jó.

Erre varrjon valaki gombot...lepke ment a gépezetbe?
Előzmény: Törölt nick (12122)
Törölt nick 2010. jún. 24. Creative Commons License 12122
Figy.
Ha az U58-ból átmásolom értékként beillesztve az X58-ba a számot, akkor megtalálja az fkeres.

Ha a két értéket megvizsgálom = jellel a cellában, akkor IGAZ-at ad.

Továbbá, ha az U58 képletét argumentumonként F9-el értékké alakítgatom, akkor is megtalálja az fkeres az Z58-ban

Ez bug gyanús nekem, még nem láttam ilyet. Vagy pedig valami a S58-ban lévő 05:42-vel nem stimmel. (Amit kétlek) Lehetséges, hogy hibásan számolja értékké az időadatot...

Sok mindent nem tudtam mgenézni a lapvédelem miatt, de ettől függetlenül ez szerintem bug lehet.
Előzmény: Redlac (12121)
Redlac 2010. jún. 23. Creative Commons License 12121
Ment a mail.
Előzmény: Törölt nick (12120)
Törölt nick 2010. jún. 23. Creative Commons License 12120
elküldenéd ezt a táblázatot?
Előzmény: Redlac (12119)
Redlac 2010. jún. 23. Creative Commons License 12119
Kösz, de a hiba ugyanúgy jelentkezik...
Előzmény: boraka (12118)
boraka 2010. jún. 23. Creative Commons License 12118
Még egy próbát javasolnék:

1. Egy használaton kívüli üres cellába írd be azt, hogy 1 majd enter
2. Állj erre a cellára (ahol az 1-es van), majd másolás (Ctrl+c)
3. Jelöld ki az U oszlopban a kérdéses értékeket tartalmazó cellákat, majd szerkesztés -> Irányított beillesztés -> Szorzás

4. A 2. ill. 3. pontokat csináld meg ismét, csak most az X oszlop kérdéses értékeit jelöld ki.
Előzmény: Redlac (12117)
Redlac 2010. jún. 23. Creative Commons License 12117
A formátumok ugyanazok :-(

Az ÉRTÉK formájú függvényt kipróbáltam, azzal sem jó :-(
Előzmény: boraka (12116)
boraka 2010. jún. 23. Creative Commons License 12116

Esetleg nem lehet, hogy valamiért az adott cellák (U58 és az X58) formátuma más mint a többi és számot árrázoló szöveg van valamelyikben?

 

Egy próbát megér:

 

=FKERES(ÉRTÉK(U58);$X$54:$Y$198;2;HAMIS)

Előzmény: Redlac (12108)
Redlac 2010. jún. 23. Creative Commons License 12115
A két szám teljesen egyforma! Mivel önmaga másolata!

Egyszerűen érthetetlen...
Üres táblázatban minden oké, de amiben használom, abban a 05:42 időpontot nem találja. Minden más időpont jó, csak ez nem.
Találkoztatok már valami ilyesmivel?
Előzmény: szkripnyik (12111)
E.Istvan 2010. jún. 23. Creative Commons License 12114
Igen én is erre a fapados megoldásra jutottam. És ha már te sem tudsz mást, akkor valószínűleg nincs is. :o) Köszi.
Előzmény: Jimmy the Hand (12113)
Jimmy the Hand 2010. jún. 23. Creative Commons License 12113
Szerintem nem tudod elkerülni, hogy lefusson. Viszont meg tudod oldani, hogy ne csináljon semmit. Pl:


Public FormState As String

Private Sub UserForm_Initialize()
FormState = "Initialize"
'listbox feltöltése
FormState = "Ready"
End Sub

Private Sub ListBox1_Change()
If FormState = "Initialize" Then Exit Sub
End Sub
Előzmény: E.Istvan (12112)
E.Istvan 2010. jún. 23. Creative Commons License 12112

Egy mások számára gondolom pofon egyszerű kérdésem lenne.

UserForm_Initialize eljárásban töltök fel egy ListBox objektumot.

Hogyan kell megoldanom, hogy a feltöltés alatt ne fusson le a ListBox_Change esemény. Az Application.EnableEvents ezt nem kezeli, pedig erre gondoltam.

szkripnyik 2010. jún. 23. Creative Commons License 12111
"...számolja ki percben (ezért is kell sorba rendezni), majd a kijövő perc értéket kellene fkeressel melléírni. ..."

Amit robbantómester is emlegetett:
Konvertáld az eredményt megfelelő formátummal egyforma hosszú stringgé, és így az esetleges láthatatlan számjegyek már nem fognak bezavarni..
Előzmény: Redlac (12110)
Redlac 2010. jún. 23. Creative Commons License 12110
A két időpont teljesen egyező. Erre rákerestem egy ha függvénnyel is.
Már csak azért is egyező, mert az elsőből hozom létre a mellékelt képen mutatom is:
542

Ezek mind rejtett oszlopok. Az "U" oszlopban lévő adatokat, makró segítségével másolom át és rendezem sorba (egy gomb segítségével), az "X" oszlopban.
Az Y oszlopban a sorba rendezett számok közötti különbséget számolja ki percben (ezért is kell sorba rendezni), majd a kijövő perc értéket kellene fkeressel melléírni. Ezeket az értékeket fogja majd visszamásolni egy másik függvénnyel. A kitöltés jellegéből lehet, hogy adott cellák üresen maradnak, ezért is kell ilyen bonyolultan megoldani a különbség számítást.
A "V" és "W" oszlopok ügyünk szempontjából irrelevánsok.

Külön munkafüzeten kipróbáltam és az 5:42 időpont és az fkeres nem volt haragban egymással. De itten igen, már hullik a hajam. Ha 5:41-et, vagy 5:43-at írok, akkor tökéletes.
Előzmény: Törölt nick (12109)
Törölt nick 2010. jún. 22. Creative Commons License 12109
Az az 5:42 biztos, hogy annyi - tehát 5:42:00? Vagy esetleg 5:42:00,18?
A századmásodpercet az időformátumban nem biztos hogy látod, viszont értékké alakítva már látsz eltérést.

Ha az utolsó argumentumoz kihagyod, akkot azt "IGAZ" értéknek veszi - tehát a legközelebbi egyezést adja vissza. Ebben az esetben a [TÁBLA] tartománynak sorba rendezettnek kell lennie.
Előzmény: Redlac (12108)
Redlac 2010. jún. 22. Creative Commons License 12108
Üdv Nektek!


Fkeres függvénnyel kerültem bajba.

Egy (makróval) teljesen sorba rendezett oszlopban keresek.
Az utolsó logikai érték, melyet igaz vagy hamisra teszünk, én hamisra állítottam be.

=FKERES(U58;$X$54:$Y$198;2;HAMIS)

Amire keresünk, azok időpontok számmá alakítva 9 számjegyig. Jó pár hónapja használtuk már, és most a 05:42 időpontnál (számmá alakítva 0,237500000) jelzett "hiányzik" hibát.

Kipróbáltam, hogy az utolsó "hamis" logikai értéket kitöröltem, és úgy megtalálta. Szerintetek ez mitől lehet?

Az a helyzet, hogy a hamis beállítás kell, mert pontos keresési értékre van szükség.


SQLkerdes 2010. jún. 22. Creative Commons License 12107
Hogy provokáltad ki ezt a hibaüzenetet az excelből?
Előzmény: Novalgin (12106)
Novalgin 2010. jún. 22. Creative Commons License 12106
Valaki találkozott már az alábbi hibaüzenettel? Érdekelne mit jelent pontosan.
"A célhelyként megadott rendszer nem rendelkezik elegendő memóriával a személyes adatok fájltulajdonságokból történő eltávolításához. A program nem tudja az összes ilyen információt eltávolítani."
Előre is köszönöm a segítséget!
SQLkerdes 2010. jún. 22. Creative Commons License 12105
Tényleg, emlékszem is.
Előzmény: szkripnyik (12103)
szkripnyik 2010. jún. 22. Creative Commons License 12104
Legközelebb kipróbálom.
Magyarul: Adatok/Külső adatok importálása/Új WEB lekérdezés....
Kösz...
:-))
Habár ez valószínűleg sok (nekem érdektelen) képet, gombot is leszed...
Előzmény: SQLkerdes (12102)
szkripnyik 2010. jún. 22. Creative Commons License 12103
Makroval igen. Áprilisban filóztunk is itt róla, hogy miért lassul le ciklusban, és valaki segített is.
Egy-egy oldalnál nem kerestem komolyabb megoldást.
Előzmény: SQLkerdes (12102)
SQLkerdes 2010. jún. 22. Creative Commons License 12102
webquery-t próbáltál? (Import from webpage)
Előzmény: szkripnyik (12101)
szkripnyik 2010. jún. 22. Creative Commons License 12101
Utóbbi hetekben sokszor kellett internetről (HTML-ből) táblázatot másolni EXCEL-be, de a sima copy-paste egy mezőbe tette az egész hóbelevancot..
Ilyenkor általában bevált, hogy először sima jegyzettömbbe másoltam be a táblázat adatait és utána egy második copy-paste-tel a jegyzettömbből EXCEL-be.

(PDF esetében még nem próbáltam, ott általában a sima szövegmásolás is nehézségeket okoz)
SQLkerdes 2010. jún. 22. Creative Commons License 12099
Adat fül
Szövegből oszlop (vagy valami hasonló, nekem angol 2007-esem van).

Ha vizuális vagy: klikk ide
Előzmény: Törölt nick (12098)
SQLkerdes 2010. jún. 22. Creative Commons License 12097
Text to column - a Data menüben v. környékén keresd.
Előzmény: Törölt nick (12096)
SQLkerdes 2010. jún. 22. Creative Commons License 12095
Kijelölés, copy-paste működik többnyire.
Utána lehet maszírozni kell egy kicsit a formátumot...
Előzmény: Törölt nick (12094)
SQLkerdes 2010. jún. 19. Creative Commons License 12093
Hogy ez a funkció hol van 2002-es excelben arról fogalmam sincs, de valahol az Option-ök között kell keresni.

Az én 2007-es excelem option-jében ez úgy szerepel, hogy:
'Automatically insert a decimal point after:' és itt lehet kiválasztani, hogy hanyadik karakter után.
Alapból ez egy kettes, szóval nézz körül az Option-ök között és keress egy olyan beállítást, ahol szerepel egy kettes.
Kattintsd ki ezt az opciót és elmúlik szenvedésed.
Dohányzó Zsiráf 2010. jún. 19. Creative Commons License 12092
Ja, még annyit hozzá, hogy ha megnyitok egy teljesen szűz új munkafüzetet, már ott is elosztja 100-zal, akármilyen számot írok be, tehát vmi excel-beállítási probléma lehet. (2 gépem van, egyik céges másik magán, ez utóbbit ritkábban használom, és ezen van ez a problémás magyar nyelvű excel).

Köszi
Előzmény: Dohányzó Zsiráf (12091)
Dohányzó Zsiráf 2010. jún. 19. Creative Commons License 12091
Sziasztok. Valaki segítsen légyszi, mert kezdek bedilizni.
Elég gyakran használok Excelt, de ilyet még az életemben nem láttam.
Egy adott oszlop egymás alatti celláiban különböző értékek (kilométerek) szerepelnek. A táblát kb egy éve készítettem, és azóta volt már megnyitva angol és magyar Excellel is, 2002-es Excel mind a kettő.

Az egyik cella értékét most megpróbáltam átírni 300-ról 231-re, és az Excel automatikusan átjavította 2.31-re.
Már mindent végigpróbálgattam. Akármilyen cellaformázást, számformátumot, automatikus javítási beállításokat próbálok, sehogy sem jó. Beírok egy számot, és automatikusan elosztja 100-zal.

Meg tudjátok mondani, hogyan lehet megoldani, hogy ezt ne csinálja?

Előre is köszönöm
tagore72 2010. jún. 19. Creative Commons License 12090
Szia!

Nagyon köszönöm a választ, jövő héten kipróbálom!


Joe
Előzmény: SQLkerdes (12089)
SQLkerdes 2010. jún. 19. Creative Commons License 12089
Az office programcsomaghoz hozzátartozik egy Digital Certificate for VBA projects nevű progi.

azzal készítsetek digitális certifitate-et a makrókhoz amiket biztonságosnak tartotok és az Excel Trust Center Settings-ében állítsátok be, hogy a digitálisan aláírt makrók futhatnak, más makrók nem.
Előzmény: tagore72 (12088)
tagore72 2010. jún. 18. Creative Commons License 12088
Sziasztok!

Szeretném megkérdezni, hogy vállalati környezetben hogy kell beállítani, hogy
csak az általam vagy más kolléga által írt biztonságos makrós fájlokat futtathassák a felhasználó Excel 2007 alatt.
Excel 2003-nál megnyitáskor rákérdezett a makrókra, 2007-nél viszont csak akkor fut, ha a beállításoknál minden makrót engedélyezek (a többi mind tiltás), de hát ez nem egy biztonságos módszer.

Köszönöm.
Redlac 2010. jún. 18. Creative Commons License 12087
Kettőspont! :-)

Az egy sorba írt utasításokat kettősponttal kell elválasztani...

Megtaláltam...
Előzmény: Redlac (12086)
Redlac 2010. jún. 18. Creative Commons License 12086
Még az előző témát folytatva:

If Range("X38") > 0 Then MsgBox "Az első érkezésnél NEGATÍV részmenetidő érték keletkezett! A piros színnel jelölt részmenetidőhöz tartozó időpont(ok) nem megfelelőek!", vbCritical, "HIBÁS IDŐPONT!"

If Range("Y38") > 0 Then MsgBox "Az első érkezésnél NEGATÍV menetidő érték keletkezett! A piros színnel jelölt menetidőhöz tartozó időpont(ok) nem megfelelőek!", vbCritical, "HIBÁS IDŐPONT!"


A fenti szövegek egy-egy sorban vannak. Azt szeretném, ha a 2. mondat ("A piros színnel" kezdődő mondat) egy újabb msgbox-ban jelenne meg (miután az előzőt leokéztam).
- Ha egy sorba írom, külön msgbox-ként, akkor hibát jelez
- Ha simán alá írom, akkor bár megjelenik, de a hibás cella törlésekor újra feladja a 2. msgbox-ot.

Valami ötlet?
Redlac 2010. jún. 17. Creative Commons License 12085
A függvények jól mennek, a makrókat tanulom.
Ebben segített a sétálás :-)
Előzmény: Delila_1 (12084)
Delila_1 2010. jún. 17. Creative Commons License 12084
Végül magad oldottad meg a feladatot, itt csak megsétáltattad. :)
Előzmény: Redlac (12083)
Redlac 2010. jún. 17. Creative Commons License 12083
Megint tanultam valamit :-)

Köszönöm delila!
Előzmény: Delila_1 (12082)
Delila_1 2010. jún. 17. Creative Commons License 12082
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(4,3) > 0 then Msgbox ("A C5:C15 tartomány legalább egy cellája mínuszba került")
If Cells(5,3) > 0 then Msgbox ("A D5:D15 tartomány legalább egy cellája mínuszba került")

End sub

Ha nincs Else ág, a feltétellel egy sorba írva a Then ágat nincs szükség End If-re.
Előzmény: Redlac (12081)
Redlac 2010. jún. 17. Creative Commons License 12081
Abba még tudnátok segíteni, hogy az msgbox szövege dinamikus legyen?

Tehát, ne a tartomány nevét írja ki (ahol a hiba), hanem, ha a J46-ban van szöveg, akkor azt. Ha azonban a J46 üres, akkor a J47-ben lévő (egyébként) fix szöveget.
Előzmény: Redlac (12080)
Redlac 2010. jún. 17. Creative Commons License 12080
Igen, a tartományokat mindenképpen külön akartam vizsgálni.


Bár tovább gondolva az előjel függvényre sincsen szükség.

a C4-be ezt írom =DARABTELI(C5:C15;"<0")

a makró meg így nézne ki

Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(4,3) > 0 then
Msgbox ("A C5:C15 tartomány legalább egy cellája mínuszba került")
End if
End sub

Köszönöm Nektek a segítséget, az együttgondolkodást :-)
Előzmény: Delila_1 (12079)
Delila_1 2010. jún. 17. Creative Commons License 12079
Valóban ez a legegyszerűbb. Egy oszlopban az

=HA(ELŐJEL(C5)=-1;1;"") képlet 1-et, vagy üres stringet ír.
Pl. a G2-ben az =SZUM(C5:C15) összesíti az eredményt.

A laphoz rendelve:

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("G2") > 0 Then MsgBox "A C5:C15 tartomány legalább egy cellája mínuszba került."
End Sub

jajgat, ha mínuszba futott valamelyik érték.

Érdemes a következő tartományt külön vizsgálni, akkor a figyelmeztetés meghatározza a hiba helyét. A másik tartományhoz egy másik feltételt adsz:

If Range("H2") > 0 Then MsgBox "Az M5:M15 tartomány legalább egy cellája mínuszba került."
Előzmény: Redlac (12076)
Redlac 2010. jún. 17. Creative Commons License 12078
Tök jó magammal beszélgetni :-)

Lassan a cella meghatározás is működik:

Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(4, 2) > 0 Then
MsgBox ("Bukta")
End If
End Sub


Ez így jó :-)
Előzmény: Redlac (12077)
Redlac 2010. jún. 17. Creative Commons License 12077
Ez a saját ötletem működne, csak a makró nem ment

Private Sub Worksheet_Change(ByVal Target As Range)
If B4 > 0 Then
MsgBox ("Bukta")
End If
End Sub

A b4 a darabteli cellája. Ha az nagyobb, mint 0, akkor van legalább egy mínusz értékű cella a vizsgált tartományban.
Előzmény: Redlac (12076)
Redlac 2010. jún. 17. Creative Commons License 12076
És mi a véleményetek arról, ha (rejtett oszlopban) az előjel függvénnyel vizsgálom a tartomány összes celláját, majd az egészből nézek egy darabtelit. Ha ennek eredménye 1, tehát van legalább egy negatív szám a vizsgált tartományban, akkor kiabálni kellene. Így a makrónak egy cellát (a darabteli eredményét) kellene vizsgálni?
Redlac 2010. jún. 17. Creative Commons License 12075
Jimmy, én mindkét makrót kipróbáltam, de nem akarja az igazságot.

Próbaként egy egyszerű C5=D5-E5 függvényt tettem bele, aztán a D és E cellákba írtam olyan számokat, amik hatására a C-ben negatív szám jött ki, de semmit nem kiabált.
Feltételezem a makróban lévő f8:f300 tartomány csak a lehetséges másik tartományt jelöli?
Előzmény: Jimmy the Hand (12073)
Redlac 2010. jún. 17. Creative Commons License 12074
Jó reggelt!

Mire leültem a gép elé, már komplett megoldás hegyek vannak, csak kapkodom a fejem:-)

Máris tesztelem az írottakat.
Előzmény: Jimmy the Hand (12073)
Jimmy the Hand 2010. jún. 17. Creative Commons License 12073
Szerintem erre a lassú de biztos (favágós) módszer az lenne, ha a vizsgált tartomány minden celláját ellenőriznénk negatív értékre:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Rng1 As Range, c As Range
With ThisWorkbook.Sheets("Munka1")
Set Rng1 = Union(.Range("C5:C15"), .Range("F8:F300"))
For Each c In Rng1
If c < 0 Then
MsgBox "A bevitt adat nem megfelelő, mert a Munka1 lap " & c.Address & " cellája mínuszba került. "
Exit Sub
End If
Next
End With
End Sub

Ha több munkalapon kell tartományokat figyelni, akkor lehet Rng2, Rng3, stb tartományokat definiálni, és mindre külön ciklus, ami végignézi őket.

Valamivel gyorsabb, és szerintem jó módszer, ha csak a vizsgált tartomány minimumát ellenőrzöm. Ha a C5:C15 számok bármelyike negatív, akkor ugyanezen számok legkisebbike is negatív.
Tehát:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Rng1 As Range
With ThisWorkbook.Sheets("Munka1")
Set Rng1 = Union(.Range("C5:C15"), .Range("F8:F300"))
If Application.WorksheetFunction.Min(Rng1) < 0 Then
MsgBox "A bevitt adat nem megfelelő, mert a Munka1!" & Rng1.Address(False, False) & _
" tartomány legalább egy cellája mínuszba került. "
End If
End With
End Sub
Előzmény: Delila_1 (12072)
Delila_1 2010. jún. 17. Creative Commons License 12072
Redlac eredetileg a C5:C15 tartományt akarta figyeltetni, később azt írta, hogy más helyekre is kiterjesztené.
A makróddal 1 cellát lehet ellenőrizni, és nem látom, hogy lehetne ezt egy tartományra kiterjeszteni. Te biztosan tudod.
Előzmény: Jimmy the Hand (12071)
Jimmy the Hand 2010. jún. 17. Creative Commons License 12071
Nem teljesen értem a kérdést...
Előzmény: Delila_1 (12070)
Delila_1 2010. jún. 17. Creative Commons License 12070
Igen, ez működik, de hogy adod ezt meg különböző tartományokra?
Előzmény: Jimmy the Hand (12066)
kiwancsi 2010. jún. 16. Creative Commons License 12069

Neked is köszönöm, remélem bírok majd vele.

A cél végülis az, hogy az adatokat csak egyszer, egy helyre vigyük fel, és ne pedig tíz különböző táblába(adatbázis), a 10 kül. tábla mégis létezzen. Akik azt nézegetik nem kell tudniuk honnan van.:-)

Előzmény: Jimmy the Hand (12052)
kiwancsi 2010. jún. 16. Creative Commons License 12068
Köszönöm, beleásom magam.
Előzmény: Jozsef (12051)
Jimmy the Hand 2010. jún. 16. Creative Commons License 12067
Viszont ez a módszer minden és bármilyen cellamódosulásnál pampogni fog, akár van hatása C5-re, akár nincs, mindaddig, amíg a negatív értéket eredményező beírást nem módosítjuk...
Előzmény: Jimmy the Hand (12066)
Jimmy the Hand 2010. jún. 16. Creative Commons License 12066
Szerintem működne ez akkor, ha elhagynád a Target helyének vizsgálatát. Végül is tök mindegy, hogy melyik cellába írt be új adatot, ha attól megváltozik a figyelt cellákban a képlet értéke. A képlet értéke pedig általában akkor módosul, ha valahová új adatot írnak, tehát a változást el lehet csípni a Worksheet_Change eseménnyel.

Ha általánosabban akarjuk, akkor egyszerre figyelhetjük az összes munkalap változását:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If ThisWorkbook.Sheets("Munka1").Range("C5") < 0 Then MsgBox "A bevitt adat nem megfelelő, mert a Munka1 lap C5 cellája mínuszba került. "
End Sub

Ezt már csak úgy lehet átverni, ha külső munkafüzetből, csatolással jön az adat, amiből C5 értéke származik.
Előzmény: Delila_1 (12064)
Delila_1 2010. jún. 16. Creative Commons License 12064
Nem működne. Ha egy feltételes formázással színezett cella színét, vagy színkódját lekérdezed, az eredeti színt, kódot kapod.

Azt lehetne megcsinálni, hogy ha pl. a C5 képlete =E5-D5, akkor azt a cellát kellene vizsgáltatnod, amelyiket utóbb viszel be. Ha ez az E5, akkor
If target.value-cells(target.row,4)<0 then msgbox ...

Az első két sor helyfoglalás az oszlop és a sor változónak, majd értékadás ezeknek.
A sor legyen a változott cella sora, az oszlop pedig a változott cella oszlopa.
Előzmény: Redlac (12063)
Redlac 2010. jún. 16. Creative Commons License 12063
és akkor szerinted működne, ha feltételes formázással piros színnel jelölném, ha negatív szám jön ki a függvény eredményénél. Aztán a tartományban lévő piros szám megjelenését vizsgálom (ami ugye negatív számot jelent).
Előzmény: Delila_1 (12061)
Redlac 2010. jún. 16. Creative Commons License 12062
Köszönöm, ez működik.

Mivel több egymástól különálló tartományra kellene alkalmazni a makrót, nem lehetne másképp meghatározni a target-et?

Lehet, hogy hülye a kérdés, de ha a c5:d5 tartományt elnevezem "cél"-nak, akkor azt is meg lehet oldani?

Az kezd világos lenni, hogy adott tartományra hogyan hivatkozom, de azok a megoldások, mintha itten nem működnének.

Megpróbálok nem kész megoldást kérni, hanem értelmezném az általad leírtakat.

A makród első két sora pontosan mit jelent?

Illetve ez így miért rossz?

Private Sub Worksheet_Change(ByVal Target As Range)

Target.Range = cél

If Target.Value < 0 Then
MsgBox "Ez a cella negatív számot nem tartalmazhat"

End If
End Sub

(a cella adatának törlése egyelőre nem kell)
Előzmény: Delila_1 (12058)
Delila_1 2010. jún. 16. Creative Commons License 12061
Azokat a cellákat kellene figyeltetni bevitelkor a Worksheet_Change metódussal, amelyek eredményeként a C5:C15 tartományban létrejöhet negatív érték.
Előzmény: Redlac (12056)
Delila_1 2010. jún. 16. Creative Commons License 12060
A 11292-es hsz. sajnos nem jó, mert a függvénnyel létrejött értékeket a target nem figyeli, csak ha másolod a függvényt tartalmazó cellát a C5:C15 tartományba. :(
Előzmény: Redlac (12056)
Delila_1 2010. jún. 16. Creative Commons License 12059
Sajnos nem jött össze. A makród felsorolta a Fájl menü (nem eszköztár!) menüpontjait. Biztonság kedvéért, hogy jobban lássam, beírattam a neveket egy oszlopba. Még az utoljára megnyitott füzeteim nevét is megadta.

Megnéztem a linkeket. Végül arra a következtetésre jutottam, hogy az a bővítmény (?) hiányzik, vagy hibásodott meg nálam, ami a levélben küldést csatolással hajtaná végre. Próbálkoztam már az Office újabb telepítésével, hibajavításával, de nem akar sikerülni.

Köszönöm a fáradozásodat.
Előzmény: boraka (12054)
Delila_1 2010. jún. 16. Creative Commons License 12058
A laphoz kell rendelned a makrót.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim oszlop As Integer, sor As Integer
oszlop = Target.Column
sor = Target.Row

If oszlop = 3 And sor > 4 And sor < 16 And Target.Value < 0 Then
MsgBox "Ez a cella negatív számot nem tartalmazhat"

'Ez a sor negatív szám esetén törli a cella tartalmát:
Cells(sor, oszlop) = ""
End If
End Sub
Előzmény: Redlac (12056)
SQLkerdes 2010. jún. 16. Creative Commons License 12057
Delila posztolt néhány ilyen change tipusú kódot, az ő hozzászólásait érdemes visszanézni.

Tárgyi tudás híján én csak annyit szeretnék mondani, hogy lehet nem Private Sub kell ide hanem valami speckó.
Előzmény: Redlac (12056)
Redlac 2010. jún. 16. Creative Commons License 12056
Üdv Mindenkinek!

Azt szeretném elérni, hogy ha egy cellában lévő szám negatív lesz (függvény eredményeképpen), akkor egy üzenetpanel ugorjon ki, hogy azt nem lehet, tehát valamit elrontott.

Ezt próbáltam, de kutyafüle:

Private Sub h()

If Target.Range = "c5:c15" And Target.Value < 0 Then
MsgBox ("Ez a cella negatív számot nem tartalmazhat")

End If
End Sub


Valaki megtudná mondani, hogy miért? Azok a válaszok, hogy "csak", "me' buta vagy" nem érnek :-)

Előre is köszi
boraka 2010. jún. 16. Creative Commons License 12055
Érdemes lenne még itt vagy itt is körülnézni.
Előzmény: Delila_1 (12048)
boraka 2010. jún. 16. Creative Commons License 12054
Bocsi, kicsit próbálgattam és úgy maradt, szóval:

Sub Teszt()
Dim i As Long

  For i = 1 To Application.CommandBars("File").Controls.Count
    MsgBox i & " -> " & Application.CommandBars("File").Controls(i).Caption
  Next i

End Sub
Előzmény: boraka (12053)
boraka 2010. jún. 16. Creative Commons License 12053

Valami ilyesmire gondoltál?

 

Sub Teszt()
Dim i As Long

 

  For i = 1 To Application.CommandBars("Formatting").Controls.Count
    MsgBox i & " -> " & Application.CommandBars("File").Controls(i).Caption
  Next i

 

End Sub

Előzmény: Delila_1 (12048)
Jimmy the Hand 2010. jún. 16. Creative Commons License 12052
1)
Lehet Excellel adatbázis lekérdezést csinálni.
Adatok -> Külső adatok importálása -> Új adatbázis-lekérdezés
Ez elsősorban úgy használatos, hogy az egyik munkafüzetet adatbázisban használod, és a másikban hozod létre a lekérdezést. Lehet úgy is, hogy ugyanazon munkafüzet egyik lapját használod adatbázisnak, és a másikon van a lekérdezés, de ennek megbízhatóságáról nem vagyok meggyőződve.
Mindenesetre Microsoft Query kell hozzá, ami az MS Office része, de alapértelmezésben nem települ fel.

Adatok szűrése megvalósítható az irányított szűrővel is, kvázi lekérdezés-szerűen.
Úgy emlékszem, hogy menüből használva csak ugyanarra a lapra teheted a szűrési eredményt, de makróval akárhová.

Azt is el tudom képzelni, hogy a pivottábla lesz a te barátod, de a problémafelvetésből ez nem derül ki.

Végül, de nem utolsósorban makróval akármilyen adatszűrést, adatbázis-lekérdezést meg lehet csinálni, akármilyen Excel, Access, ODBC, stb. adatforrásból.

2)
Access adatbázis létrehozása is lehetséges Excel makróval, de sztem ezt a lovat fordítva kell megülni. Először létrehozni az Access DB-t, megfelelő táblákkal, mezőkkel, majd abba importálni az adatokat Excel munkafüzetből. Access-ben a Fájl -> Külső adatok átvétele -> Importálás útvonalon éred el ezt a funkciót.
Előzmény: kiwancsi (12049)
Jozsef 2010. jún. 16. Creative Commons License 12051
Tudok-e excel táblából(mintha csak adatbázis lenne, lekérdezést csinálni?
Valójában az excel szűkítési funkciójához hasonlóra gondolok, mondjuk egy másik táblában, vagy csak egy másik lapon.
Hogyan?

Röviden, ezeknek nézz utána a Súgóban, vagy az Interneten:

1. Excel cél - Excel forrás esetén legegyszerűbb az Excel Irányított Szűrő funkciója, kicsivel bonyolultabb az Microsoft Query-vel

2. más program - Excel forrás esetén az Excel ODBC driverrel SQL utasításokkal is hozzáférhetsz az Excel forráshoz. Természetesen, nagyon sok adatbázisoknál megszokott dolog nem fog működni az Excel természetéből következően.

Más. Tudok-e excel táblából acess adatbázist létrehozni, úgy hogy az adatokat átviszem egy mozdulattal.
Hogyan?


Igen, nagyon egyszerűen. Régebbi Access-ben a Fájl menüben volt az Export/Import funkció (ha jól emlékszem). Access 2007-ben a Külső Adatok fülön találod meg a funkciót.


Előzmény: kiwancsi (12049)
kiwancsi 2010. jún. 16. Creative Commons License 12050
acess=access
Előzmény: kiwancsi (12049)
kiwancsi 2010. jún. 16. Creative Commons License 12049

Sziasztok!

 

Következő kérdéssel rukkolnék elő, ha valaki tud segíteni megköszönöm.

 

Tudok-e excel táblából(mintha csak adatbázis lenne, lekérdezést csinálni?

 

Valójában az excel szűkítési funkciójához hasonlóra gondolok, mondjuk egy másik táblában, vagy csak egy másik lapon.

Hogyan?

 

Más. Tudok-e excel táblából acess adatbázist létrehozni, úgy hogy az adatokat átviszem egy mozdulattal.

Hogyan?

 

Ill. hol találom meg leírva a hogyant, természetesen nem várom tőletek hogy kézikönyvet írjatok nekem ide.:-)

 

Csak a "kályhát" mondjátok meg hol van!:-)

 

 

Előre is köszönöm.

 

 

Delila_1 2010. jún. 16. Creative Commons License 12048
Egy újratelepítés óta a 'Küldés levélben (mellékletként)' nevű ikonom le van tiltva. Azt tudom, hogy az Application.CommandBars("Formatting").Controls(5).Visible = True sorral meg tudom jeleníteni a formátum eszköztár 5. ikonját, de nem tudom, hogy tudnám működésre bírni a fent említettet.

Alapból a 'Szokásos' eszköztáron van, de kitenni a Fájl kategóriából tudnám – ha nem lenne ott.

Honnan lehet tudni, hogy egy ikon hányadik egy eszköztáron? A megszámlálás nem jó, mert nem az eredeti sorrendben vannak nálam. Visszaállítani sem szeretném azt a sorrendet, mert egy halom saját ikont alkalmazok, saját rajzzal.
Jimmy the Hand 2010. jún. 15. Creative Commons License 12047
Vagy:

ActiveSheet.CodeName

attól függően, hogy melyik neve kell.
Előzmény: szkripnyik (12046)
szkripnyik 2010. jún. 15. Creative Commons License 12046
Sub aaa()
MsgBox ActiveSheet.Name
End Sub

Természetesen MSGBOX helyett el is tárolhatod egy stringváltozóba...
Előzmény: Törölt nick (12045)
SQLkerdes 2010. jún. 15. Creative Commons License 12044
Az első problémád DARABTELI-s megoldását is át lehet alakítani SUMPRODUCT-osra, ha érdekel ez a technika szólj és segítek.
Nagyon hasznos ott, ahol több feltételt kell kiértékelni és megszámolni v. összesíteni (pld. hány szabadnapja van összesen azoknak akik az informatikán dolgoznak és 2009.010.01 után lettek felvéve).
Előzmény: SQLkerdes (12043)
SQLkerdes 2010. jún. 15. Creative Commons License 12043
A duplanegatív egy boolean eredményt (igaz v. hamis) alakít át számmá, vagyis logikai műveletek IGAZ eredményét 1-gyé, hamis eredményét 0-vá alakítja.

Szóval a függvény azt csinálja, hogy kiértékeli minden releváns cella esetében, hogy az eredménye megegyezik-e a G2 értékével (tagja-e a lekérdezett osztálynak) (eredmény: IGEN v. NEM átalakítva 0-vá vagy 1-gyé), megnézi, hogy van-e szabadnapja az adott személynek (eredmény IGEN v. NEM, konvertálva nullává v. eggyé) és ezeket összeszorozza majd felösszesíti.

Csak ahol mindkét feltétel teljesül lesz a szorzat eredménye 1, ezeket az 1-eket összeadja, ami esetünkben a mindkét feltételnek megfelelő emberek száma.

Előzmény: meantisz (12042)
meantisz 2010. jún. 15. Creative Commons License 12042

Köszönöm szépen a megoldást, tökéletesen működik!

Igen magyarul SZORZATÖSSZEG a függvény neve, és a vessző helyett pontosvessző kellett.

 

Le tudnád esetleg írni, hogy a -- jellel milyen művelet hajtódik végre, hogy meg is értsem amit leírtál. Magát a SZORZATÖSSZEG működését értem, csak erre a kapcsolóra lennék kíváncsi.

 

Köszönöm!

SQLkerdes 2010. jún. 15. Creative Commons License 12041
Függvénnyel akarod megcsinálni, vagy fizikailag új tábla is megfelel?


Egyébként egyedi karaktersorozatot simán létre tudsz hozni az & jellel.

Pld a H2 cellába azt írod:
=A2&"-"&B2"-"&C2
és így tovább. Utána a H oszlop adatára tudsz csinálni egy COUNTIF-et, és hol a COUNTIF eredménye nem 1, ott vannak az ismétlődések.
Ha sok időd van, akkor a FREQUENCY függvénnyel is játszadozgathatsz egy kicsit.
Előzmény: bejgleee (12040)
bejgleee 2010. jún. 15. Creative Commons License 12040
Olyan gyorsan válaszhoz akartam jutni, hogy nem írtam le rendesen :)
szóval:
- az oszlopok száma fix, a soroké nem
- nemcsak egyjegyű számok szerepelnek
Éppen ez a bajom, hogy nem bírok egyedi karaktersorozatot létrehozni, ami alapján könnyebb lenne szűrni az azonosokat.
Előzmény: szkripnyik (12039)
szkripnyik 2010. jún. 15. Creative Commons License 12039
1. Mit értesz "listázáson"?
2. A táblázat métere fix, vagy a sorok és oszlopok száma is lehet több?
3. Minden cellában csak egyjegyű szám van?
Én egy segédoszlopban csinálnék egy ötjegyű számot, az alapján sorba rendezném, és akkor már csak a szomszédos sorokat kell vizsgálni....
Előzmény: bejgleee (12038)
bejgleee 2010. jún. 15. Creative Commons License 12038
Sziasztok!
A következő táblám van:

A B C D E
1 2 3 4 5
1 4 6 9 3
2 5 2 5 7
1 4 6 9 3
1 2 1 1 1

Látszik, hogy a 2-es és 4-es sor ugyanaz.
A kérdésem:
Hogyan tudom az azonos sorokat kilistázni?
Üdv,
Bejglee
SQLkerdes 2010. jún. 15. Creative Commons License 12037
Persze, a HA függvényt tedd be egy másik HA függvénybe, valahogy így
=HA(VAGY(a1="",b1="",[es_igy_tovabb]),"",HA([ami eredetileg a HA függvényedben van]))

Előzmény: Eru (12036)
Eru 2010. jún. 15. Creative Commons License 12036
Sziasztok!
biztos banális probléma, de nem bírok vele egyedül..
HA függvényben olyan cellák vannak, amik még üresek, később kell vele számolnia; azt szeretném, hogy amíg nem kerül érték a cellába, a függvény ne számoljon vele. lehetséges ez?
nagyon köszi!
SQLkerdes 2010. jún. 14. Creative Commons License 12035
Feltételezve, hogy:
- az osztályok leírása a B oszlopban van (mondjuk B2:B100)
- a szabadnapok száma a D oszlopban van (mondjuk D2:D100)
- a szabadnap hiányát vagy 0 vagy üres cella jelzi a D oszlop megfelelő mezőjében;
- a "kigyűjtendő" osztály neve a G oszlopban van, mondjuk G2:G10

F2-be írd be a következő képletet:
=SUMPRODUCT(--($B$2:$B$100=G2),--($D$2:$D$100<>0))

Ezt másold le az F oszlop többi releváns cellájába is a G oszlop tartalmának megfelelően.

(SUMPRODUCT a magyar excelben aszt hiszem SZORZATÖSSZEG v. SZORZATOSSZEG), lehet a te verziódban a vesszők helyett pontosvesszőt kell használni.

Az eredmény megadja, hogy az adott osztály hány alkalmazottja rendelkezik nullától különböző számú nap szabadsággal.
Előzmény: meantisz (12034)
meantisz 2010. jún. 14. Creative Commons License 12034

Üdv mindenkinek!

 

Egy kis segítségre lenne szükségem egy excel táblázattal kapcsolatban.

 

Röviden leírom a problémát:

 

Egy függvényre (vagyis szerintem egymásba ágyazott függvényre) lenne szükségem, amellyel a következőt kellene megoldani:

 

A táblázat tartalma:

 

Osztály:            Belépés dátuma:                   Szabadnapok száma:

 

Informatika       2009.01.01                             20

Pénzügy            2009.01.02

Marketing          2009.01.03                             15

Pénzügy            2009.01.04

Pénzügy            2009.01.05

Marketing          2009.01.06

Informatika       2009.01.07                             30

 

 

Ez a táblázat a különböző osztályokon dolgozó emberek szabadságát hivatott nyilvántartani (a név oszlopot nem írtam most le).

 

2 feladatot kell megoldani, az első hogy hányan dolgoznak az egyes osztályokon: ezt egy DARABHATÖBB fügvénnyel simán megoldottam egy külön táblázatba.

 

A 2. bonyolultabb, arról lenne szó, hogy ezek mellé a számok mellé oda kellene írni, hogy az egyes osztályokon az ott dolgozók számából mennyinek van szabadsága!

 

FKERES fügyvénnyel próbálkoztam, de az csak a szabadságok oszlopában értéket ad vissza ugye, nekem pedig darabszámra lenne szükségem.

Darab függvénnyel pedig nem tudok olyan feltételt adni, hogy csak az informatikán dolgozók szabadságait adja össze (ja, és ugye nem a szabadnapok számának összege kell, hanem hogy hány embernek van szabadnapja!).

 

Szóval szerintem valahogy a kettőt kellene egymásba ágyazni, de akárhogy kísérletezek, nem sikerül.

 

Minden ötletet szívesen vennék!

 

Köszönöm!

 

U.i.: Csak függvényes megoldás lenne jó, tudom, hogy szűréssel egyszerűen meg lehetne oldani, de automatizálni szeretnénk a táblázatot függvények segítségével.

szkripnyik 2010. jún. 13. Creative Commons License 12033
Ha a célcella is rendre az első, második, harmadik stb sorban van, akkor:
=A1*B1*SOR()
Előzmény: Rizibizke (12032)
Rizibizke 2010. jún. 13. Creative Commons License 12032
Sziasztok, lenne egy kérdésem: mely függvényeket kell használni, ha mondjuk meg szeretném kapni A1 és B1 szorzatát szorozva egyel; A2 és B2 szorzatát szorozva kettővel; A3 és B3 szorzatát szorozva hárommal stb? Előre is köszi!
SQLkerdes 2010. jún. 12. Creative Commons License 12031
Tusé...
Előzmény: szkripnyik (12030)
szkripnyik 2010. jún. 12. Creative Commons License 12030
Akkor már:
=HA(ELŐJEL(A1-B1)=ELŐJEL(F1-G1);1;0)
:-)))

Ugye az Előjel függvénynek pont 3 kimenet van!!!!!!
Előzmény: SQLkerdes (12028)
SQLkerdes 2010. jún. 12. Creative Commons License 12029
Helyesbítés:
- ha a gólok különbségének abszolút értékeinek összege nulla...
Előzmény: SQLkerdes (12028)
SQLkerdes 2010. jún. 11. Creative Commons License 12028
Szerintem a legegyszerűbb:

- ha a gólok különbségének szorzata pozitív, akkor a fogadó eltalálta, hogy ki győzött
- ha a fenti nem igaz, akkor a gólok különbségének összege nulla, akkor a fogadó eltalálta, hogy döntetlen.

A lenti példán:
- (2-1)*(4-1)=1*3 = pozitiv, vagyis a fogadó eltalálta, hogy ki nyert.
- (2-2)+(3-3)=0, vagyis a fogadó eltalálta, hogy döntetlen.
Előzmény: Cloaca Maxima (12023)
szkripnyik 2010. jún. 11. Creative Commons License 12027
DARAB, DARAB2, DARABTELI, DARABÜRES függvények jöhetnek szóba, vagy akár:
=HA(A1="";"nem tippelt";...az előző képlet beírva....)
nyugodtan beírhatod a 0-k és 1-k közé, a SZUM függvényt nem zavarja meg:
Egy oszlop tartalma: (A1:A9)
0
1
3
1
0
nem tippelt
1
nem tippelt
6 ---- Ez pedig az előző 8 érték összege =SZUM(A1:A8)
Előzmény: Cloaca Maxima (12026)
Cloaca Maxima 2010. jún. 11. Creative Commons License 12026
Még egy kérdés:
Arra van függvény, hogy egyáltalán csak akkor csak számoljon, ha a cella kitöltött?
Konkrétan: amíg nincs végeredmény (a cellák üresek), ne kapjon pontot az, aki 1-1-et tippelt.
Előzmény: szkripnyik (12024)
Cloaca Maxima 2010. jún. 11. Creative Commons License 12025
kösz!
Előzmény: szkripnyik (12024)