Keresés

Részletes keresés

Tiba Creative Commons License 2001.04.09 0 0 171
Jó VBA könyv:
Kovalcsik Géza: Excel 97 programozása.

A múltkor írtam, hogy a magyar és az angol Excel kompatibilis.

Az 5-ösnél előfordult az alábbi eset:

Angol Excelben területet "Database"-nak elenvezve a magyar Excel automatikusan átnevezi "Adatbázis"-nak.
Ez eddig OK volna, azonban ha valaki kimutatást csinált az angol Excelben (Database-ra hivatkozva), akkor a magyarban is Database-ra keresi az adatokat (ami ugye nincs).

A későbbi verzióknál nem próbáltam, de nem kizárt, hogy megvan még a hiba!

Tiba

Előzmény: kaszi (169)
L-Gee Creative Commons License 2001.04.09 0 0 170
kaszi,

sajnos én nem tudok ajánlani VB könyvet, nekem mikor először volt rá szükségem, akkor segítőkész kollégák kéznél voltak és elmagyarázták az alapokat ez többet ért bármilyen könyvnél, azóta pedig nagyjából a help-ből élek, jelenlegi munkáimhoz ez elég. De vannak itt nagy spillerek, akik biztos tudnak segíteni.

üdv.:
L-Gee

Előzmény: kaszi (169)
kaszi Creative Commons License 2001.04.08 0 0 169
Szia L-Gee,

köszi az okítást, megy a dolog.
nem tudtam, hogy így lehet egy mezőhöz több feltételt rendelni, én azzal próbálkoztam, hogy valami függény segítségével "között"-et csináljak egy cellában.
tudsz ajánlani nekem egy jó visualbasic könyvet, ami nem csak az utasítások szintaktikáját írja le?

üdv,
kaszi

Előzmény: L-Gee (168)
L-Gee Creative Commons License 2001.04.07 0 0 168
aaaaaahhhh !

a francba ! ez a genya kiszedte a sok space-t, amivel olyan nagy műgonddal próbáltam egy excel sheetet megformázni... így most egy csak szép space delimited táblát kaptál :)))

Előzmény: L-Gee (167)
L-Gee Creative Commons License 2001.04.07 0 0 167
kaszi,

a megoldás egyszerű ! csak nehéz lesz leírni, de megpróbálom:

mondjuk ez a táblád:
A B C D
1 dátum értékek
2 2001.01.30 600
3 2001.01.20 300
4 2001.01.25 400
5 2001.01.22 500

gondolom ebből csináltál egy adabázist,
- azaz jelöljük ki a táblázatot A1:B5
- nevezzük el mondjuk database-nek

és akkor a feleadat: átlagoljuk az értékek mezőben lévő számokat, amik mellett a dátum 2001.01.20 és 2001.01.22 közé esik

ehhez először egészítsük ki a táblázatot a feltételekkel:

A B C D
1 dátum értékek dátum dátum
2 2001.01.30 600 >=2001.01.20 <=2001.01.22
3 2001.01.20 300
4 2001.01.25 400
5 2001.01.22 500

majd kérjük a feladat eredményét pl. a C5 cellába, azaz írjuk be oda a következő függvényt:

=DAVERAGE(database,"értékek",C1:D2)

de működik így is:

=DAVERAGE(A1:B5,"értékek",C1:D2)

Mindent pontosan így írj be, ne felejtsd le az idézőjeleket,
ha magyar exceled van használd az ABÁTLAG függvényt a DAVERAGE helyett,
esetleg használj pontosvesszőt a vessző helyett, ha a nemzetközi beállításaid így kívánják meg.

Remélem érthetően sikerült leírnom,

üdv.:

LGee

Előzmény: kaszi (165)
szbandi Creative Commons License 2001.04.06 0 0 166
Na jó, tényleg nem szép megoldás, készséggel elismerem, de következetesen használva nem túl veszélyes. De nem is akarok erről meggyőzni senkit, akkor szoktam rá, amikor még alig tudtam néhány függvényt, és ezt minden esetre rá tudtam húzni. Csak arra kell figyelni, hogy mindig kapcsold ki, mert különben tényleg megkavar. Volt nekem több ezer soros kódom is ezzel a megoldással, működött is. De az biztos, hogy nem tankönyvi (jó) példa. Ha az ember maga tanul programozni, akkor előfordulnak ilyenek. Engem senki sem tanított soha, ezt néha hiányolom is.

kaszi Creative Commons License 2001.04.06 0 0 165
Sziasztok!
Egy kis segítségre lenne szükségem egy gurutól.
Adva van egy adatbázis és én az AB.Átlag fg-t úgy szeretném használni, hogy az egyik érték mezőből csak azokat az adatokat átlagolja, amelyek beviteli dátuma (ezt én megadom) két meghatározott dátum közé esik. A szűrés funkciót most hagyjuk, más megoldás kéne.
előre is köszi
kaszi
igazi hős Creative Commons License 2001.04.06 0 0 164
"És tényleg javaslom mindenkinek, hogy a fárasztó ellenőrzések helyett egyszerűen kényszerítse az Excelt egy hibára. Sokkal rövidebb a kód, és az ellenőrzések már valahol úgyis le vannak programozva."
Sőt függvényként is elérhetők, amik használatával nemcsak átláthatóbb, hanem egyszerűbb is lesz a programod: "if not IsNumeric" szerintem sokkal egyszerűbb, mint egy on error goto, ahonnan nem is tudsz visszatérni (hiszen nem tudod honnan ugrott oda a program). Szóval a fenti "megoldás" egy 8 soros függvényben elmegy, de egy-kétezer sornyi kódot nagyon megbonyolít...
Előzmény: szbandi (163)
szbandi Creative Commons License 2001.04.05 0 0 163
igazi hős

Én nem azonosítottam a kivételkezelést a GOTO használatával, csak mint egy megfelelő eszközt említettem, de amint látszik, más sem feltétlenül gondolja, hogy ez hülyeség. Ez csak azt mutatja, hogy egy feladatra többféle megoldás létezik, de ez a szép. Én sem sokszor használom, de néha pont azért, mert TUDOM, hogy nem akarok oda visszalépni. Az én megoldásom az Excel példánál egyébként éppen nem az Excel hibájára épít, mivel a hibát én generálom, a függvény nem hibát ad vissza, hanem 0-t, ha nem találja a keresett értéket, de egy tömb nulladik cellájára hivatkozás már hibát ad, mivel az Excel 1-től számozza azokat. Ezt a trükköt szoktam használni, ha lusta vagyok mindenféle ellenőrzést végezni. Például ha nem akarom ellenőrizni, hogy egy cellába számot írtak-e be, akkor egyszerűen szorzom kettővel, és ha hibaüzenetet kapok, akkor nem szám van a cellában. Nem feltétlenül elegáns megoldás, de baromi praktikus minden bevitelellenőrzésnél.

És már harmadszor is le kell írnom, hogy a VBA NEM ad választási lehetőséget a hibakezelésnél, mert csak az On Error Goto utasítást fogadja el. Szóval ha soha nem használnám a GOTO-t, itt akkor is azt kellene használnom, még ha le is köpném utána magamat érte. Ez van, ezt kell szeretni. Ezt, úgy tűnik, senki nem veszi figyelembe, amikor megró a használatáért.
És tényleg javaslom mindenkinek, hogy a fárasztó ellenőrzések helyett egyszerűen kényszerítse az Excelt egy hibára. Sokkal rövidebb a kód, és az ellenőrzések már valahol úgyis le vannak programozva.

Előzmény: igazi hős (155)
LordFinesse Creative Commons License 2001.04.05 0 0 162
Csodálkozva olvastam a GOTO vitát.Reszemröl csak egy megjegyzés:a VBA-ban, tehát mind az Excelben, Accesben a GOTO általánosan használva van. A hibakezelésnek szinte a leggyakrabban használt formája. Ha profi hibakezelést akarsz a procedúrádban, akkor nem tudod kikerülni a GOTO-t. Persze elég kötött a formai használata, és egyáltalán nem teszi átttekinthetetlenné a programot.
Természetesen a programozásban általában kerülni kell a GOTO használatát, de speciális esetekben, mint pl. a hibakezelés, a legjobb megoldás.
Tiba Creative Commons License 2001.04.05 0 0 161
Csak egy fél gondolat a goto használatához, illetve a forrásban történő eligazodáshoz :-)

Próbálta már valaki a régi Basic nyelvhez hasonlóan sorszámozni a sorokat?

Sub programka()
10 i = 1
20 kiiras = MsgBox(i)
30 i = i + 1
40 If i < 5 Then GoTo 20
End Sub

Tiba

Előzmény: igazi hős (155)
L-Gee Creative Commons License 2001.04.05 0 0 160
Ja azt elfelejtettem írni, hogy a "találtam", "nemtaláltam" helyére természetesen írhatsz hivatkozásokat, függvényeket is.
Előzmény: L-Gee (159)
L-Gee Creative Commons License 2001.04.05 0 0 159
nickwarren !

tegyük fel, hogy az A1 cellában akarsz szövegrészletet keresni, akkor:

=IF(ISERROR(FIND("szövegrészlet";A1));"nem találtam";"találtam")

ISERROR azért kell, mert, ha nem találja meg a keresett szövegrészletet, akkor #value hibaüzenetet ad ki.

Előzmény: nickwarren (158)
nickwarren Creative Commons License 2001.04.05 0 0 158
Ezen már túl vagyok, az volt az igazi probléma, hogy az A oszlopban szövegek vannak és igazándiból csak szövegrészletre kellett volna keresni, de ezt nem tudtam elővarázsolni belőle. Úgyhogy kicsit megbontottam az excelt. Alapvetően a kitöltést kell megváltoztatni - ha hegy nem megy Mohamedhez...

Most újabb problémával szembesültem de ezt egyelőre még megfogalmazni is csak nehezen tudom, annyira durva (nekem).

Mindenesetre köszönöm a segítséget, most ilyen függvény dógozik, de ezt még ezerszeresen bonyolítani kell - hiába a kapitalisták mindent tudni akarnak :(

Előzmény: L-Gee (157)
L-Gee Creative Commons License 2001.04.05 0 0 157
nickwarren,

Pl. így valahogy:

=IF(feltétel;igaz eset;hamis eset)

Tegyük fel, hogy az A1 cellában van a szöveg, amit keresel és, ha az megfelel a feltételnek, akkor a B1 cella az, amit ki kéne íratni:

=IF(A1="szöveg";B1;"")

ha az A1 cellában a "szöveg" van, akkor a B1 cella tartalmát írja ki, ha nem a "szöveg" van az A1-ben akkor pedig semmit: ""

szintaktikailag lehet, hogy a " jelek helyett ' jeleket a pontosvesszők helyett pedig sima vesszőket kell használnod. Ez a nemzetközi beállításoktól függ asszem.

nickwarren Creative Commons License 2001.04.05 0 0 156
naaaaaaaaaa pls. segítsen valaki, így nem tudom megcsinálni a munkámat azt a b*zi helpet meg nem értem :(
Előzmény: nickwarren (153)
igazi hős Creative Commons License 2001.04.05 0 0 155
szbandi,
szerintem valamit félreértettél: a goto használata és a kivétel kezelés nem azonos dolgok. Az ugró ugrások ciklus és elágazás helyetti használata nagyon megnehezíti egy programkód átláthatóságát (és így bővíthetőségét, javíthatóságát). A kivételek kezelése egy egészen más ügy: egy extra eset kezelését extra módon kell megoldani. (Egyébként a goto-t nem használó kivételkezelés is goto-ra épül, pl. C/C++-ban setjmp, longjump párosra.) Sajnos az Excel túl gyakran generál hibát, így a kód túl sok on error-t fog tartalmazni, de ez nem a kódoló hibája, hanem a nyelvé. (Nem értem miért kell egy sikertelen keresésnek egyből hibát adnia, beállíthatna egy globális notfound változót, vagy eljárás helyett függvényként visszaadhatná a sikerességet.)
Előzmény: szbandi (154)
szbandi Creative Commons License 2001.04.04 0 0 154
Na jó, én részemről lezárom ezt a vitát, nem akartam meggyőzni senkit, csak az álláspontomat mondtam el. Azért megnyugtat, hogy nem csak én gondolkodom így, de tényleg semmi előítélet nincs bennem sem a goto-t használókkal sem a nem használókkal szemben. De azért egy dolgot még egyszer kiemelnék. A VBA nyelvben az általam használt
On Error Goto
utasítás működik, mert ennek EZ ÉS CSAK EZ a szintaktikája, teljesen függetlenül a Goto használatának helyességétől. Ha nem akarsz Goto-t használni, akor vagy leellenőrzöl minden egyes hibalehetőséget előre (van néhány), vagy letörlöd az Excelt a gépedről. Vagy fogadod a hibaüzeneteket, ami szintén fárasztó lehet. Mondom, ez független attól, hogy a Goto használata általában helyes vagy helytelen.
Előzmény: lolka_bolka (150)
nickwarren Creative Commons License 2001.04.04 0 0 153
hi all,

picike segítségre lenne szükségem, remélem itt megtalálom majd:
azt pontosan hogy is kell csinálni, hogy kiadjon nekem egy bizonyos cellában levő értéket akkor ha egy másik cellában egy előre meghatározott szöveg áll?

remélem érthető vagyok, márcsak azért is, mert ebből az következne, hogy én értem ;))

L-Gee Creative Commons License 2001.04.04 0 0 152
Egyetértek !

Az iskolák Goto-ellenes propagandája annyira sikeres volt, nekem mára sikerült teljesen elfelejtenem a használatát, de emléxem, pályafutásom hajnalán még előfordult, hogy Pascal-ban elejtettem egy-egy goto-t, ha hirtelen kellett megoldani valamit.
Szerintem belénknevelték, hogy aki goto-t használ az nem tud programozni, ezért mindenki fél, na nem a goto-tól közvetlenül, hanem, hogy pancsernak tartják miatta, stb.

Ma már én is furcsán néznék a kódra, ha egy goto-ba botlanék, de nem feltételezném az elkövetőről, hogy egy balfék.

Előzmény: TaXiN (151)
TaXiN Creative Commons License 2001.04.04 0 0 151
pontosan en sem tudom miert nem szabad hasznalni, egyszeruen csak nem! Iskolaban mindenhol ezt tanitjak!

Ááááááááááááááááááááá........

A goto-val az a baj ? hogy nem struktúrált.
Namost akik nem a pascalon nőttek fel, pl. IBM mainfame, azok tesznek a tanitóbácsik struktúráltprogramozás előadásaira.

"1. Az igazi programozó nem fél a GOTO-tól.
4. Az igazi programozó önmódosító kódot ír - különösen akkor, ha meg bír vele spórolni 20 nanoszekundumot egy kis ciklus közepén."

A gond az, hogy igazi programozó nagyon kevés van és extrém esetektől eltekintve (nemzetközi űrállomás 386-os központi procival...) senkit nem érdekel a progi sebessége.
Fontosabb, hogy egy átlagos képességű kóder gyorsan feltalálja magát a kódban.

"A legtökösebb igazi programozók közül néhány a Jet Propulsion laborban dolgozik Kaliforniában. Sokan közülük fejbõl tudják a Voyager és a Pioneer ûrszondák operációs rendszerét."

Előzmény: lolka_bolka (150)
lolka_bolka Creative Commons License 2001.04.04 0 0 150
éppen ezért írják a goto használatánál, hogy fokozott figyelmet kíván, és ha van jobb, akkor kerüljük el. Ezt így például a Borland helpje is írja, tehát elfogadják, hogy egyes esetekben szükséges lehet.

Nem tudok ilyenre peldat. A programozas, legalabbis szamomra ugy kezdoik, hogy atgondolom mit varok a programtol, _megtervezem_, majd elkezdek kodolni, tesztelek, javitok, goto: tesztelek :))) mig jo nem lesz. Szoval eleve ugy kell felepiteni a programot, hogy ne legyen benne goto. Ha valamiert bennehagytak, annak ezekutan szerintem csak olyan okai lehetnek, hogy azok, akik a hatarido utani pillanatban meg sehol sem tartanak, es rajottek hogy elhibaztak a program felepiteset, legyen egy ilyen eszkoz a kezukbe mint a goto, hogy legalabb annyira mukodokepes legyen a program, hogy lehessen mutatni belole valamit, anelkul, hogy az egesz program strukturajat ujratervezne, es lekodolna. Kivancsi lennek, hany profi programban van goto. Egyebkent hozza kell tennem, pontosan en sem tudom miert nem szabad hasznalni, egyszeruen csak nem! Iskolaban mindenhol ezt tanitjak! Meg fogom tudni.

Lolka

Előzmény: szbandi (149)
szbandi Creative Commons License 2001.04.04 0 0 149
Tiba!

Aki ezt a hibát még nem követte el. az nem mond igazat.

lolka_bolka

Teljesen igazad van (bár a példád és a goto használata között van némi különbség szerintem, de miért pont ez a hasonlat ne sántítana), éppen ezért írják a goto használatánál, hogy fokozott figyelmet kíván, és ha van jobb, akkor kerüljük el. Ezt így például a Borland helpje is írja, tehát elfogadják, hogy egyes esetekben szükséges lehet. Előfordulhat, hogy ott is hozzá nem értők ülnek? Ezt már sokan megállapították a különböző programozó cégekről, csoda, hogy fennmaradtak.
Mellékesen felhívnám arra a figyelmet, hogy a VBA ismeri az
On Error Goto
utasítást, míg az
On Error Call utasítás
beírása esetén sikítva tiltakozik. Lehet, hogy kimaradtak az első osztályból, ezzel sokan vádolják a MS programozóit, bár az Excel önmagában minden hibájukat elfeledteti velem néha.
Szóval nehéz olyan utasítást végrehajtatni egy programnyelvvel, amit nem ismer.

Tiba Creative Commons License 2001.04.03 0 0 148
Direkt nem írtam le, de hát legalább égek egy kicsit.
Mivel az én gépemen volt már tart_keres függvény, automatikusan kijavítottam tart_keres2 függvényre, amit aztán nem vezettem következetesen végig a függvényben.

:)))

Tiba

Előzmény: szbandi (145)
lolka_bolka Creative Commons License 2001.04.03 0 0 147
Egy programot meg lehet irni 100 sorban is, amit kesobb ha megtanulsz jol programozni eleg 10 -bol.
Lehet hasznalni azt, hogy:

print ("Hello 1\n");
print ("Hello 2\n");
.
.
.
.
print ("Hello 100\n");

Meg lehet ugy is, hogy
for ($i=1;$i++) {print("Hello $i\n")}

Az egyik szaz sor, a masik 1, mind a ketto mukodik. Az elsot nem hasznaljuk, a masodikat igen. Pl elkezdes futtatni egy procedurat, ahol mindenfele memoriakat foglalsz le, kulonbozo processeknek, kigoto -zol belole, oszt nem ter vissza... A memoriak meg ott maradnak lefoglalva, mert ugyan te megirtad, hogy a felszabadito rutinokat, de sosem jutott el odaig, mert a goto utan olyan feltetelek teljesultek, ami miatt leallt a program.

Termeszetesen ez akkor is igaz lehet, ha nem hasznalsz goto -t, de szerintem erted mire akarok celozni...

Lolka

Előzmény: szbandi (144)
igazi hős Creative Commons License 2001.04.03 0 0 146
A MS példáprogramokból sok ötletet ki lehet szedni, de sosem a programozási szépségükről voltak híresek, legyenek Basic, VBA vagy C/C++ kódok. Valószínűleg nem programozóknak írják őket (és valószínűleg nem programozók írják őket, bár szerintem a MS programokat sem programozók készítik :-).
Előzmény: szbandi (144)
szbandi Creative Commons License 2001.04.02 0 0 145
Ja persze csak a hibakezelést vettem a helpből, maga a megoldás az én zseniális kútfőmből van.

Tiba!

Elárulod, mi volt a hiba? Csak azért, hátha én is tanulok belőle!

Előzmény: szbandi (144)
szbandi Creative Commons License 2001.04.02 0 0 144
lolka_bolka

Ebben van valami, bár én öregebb lehetek, mert nekem még a goto-t is alaposan megtanították. Hibakezelésnél szoktam használni, mert már nem akarok ahhoz a sorhoz visszamenni, egyébként ezt a megoldást a VBA help-ből szedtem ki még annak idején, én mosom kezeimet mint Pilátus, eddig mindig működött így. Azt nem tanítják egyébként, hogy akkor miért hagyják benne minden programnyelvben? A kérdés komoly, mert tényleg nem értem, olyan, mint ha a szakadékba vezető utat nem lezárnák, csak azt kiírnák, hogy ejnye-bejnye. Vagy nem is szakadék? Egyébként lényegtelen, de azért kösz. Én csak a problémák megoldására koncentrálok, a finomítást meghagyom a tanultaknak hahaha

Előzmény: lolka_bolka (137)
bendeli Creative Commons License 2001.04.02 0 0 143
:O Megtámadott egy vírus és felzabálta a munkalapjaim? Ez olyan lehet mint a húsevő baktérium... :}
Előzmény: Tiba (142)
Tiba Creative Commons License 2001.04.02 0 0 142
Ezek a makrók :)

Lehet, hogy 5-ös Excelben munkalapok között kezelted őket, ez a 97-től csak itt látható.

Ha nem, akkor megtámadott téget egy vírus :(

Tiba

Előzmény: bendeli (141)

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