-
Fototrend
A Microsoft Excel topic célja segítséget kérni és nyújtani Excellel kapcsolatos problémákra.
Kérdés felvetése előtt olvasd el, ha még nem tetted.
Új hozzászólás Aktív témák
-
Fferi50
Topikgazda
válasz
m.zmrzlina
#24482
üzenetére
Szia!
Csak még egy kérdés: Akkor is belassul, ha a másik munkafüzet üres, vagy csak akkor, ha adatok vannak abban is?
Esetleg egy "közzétehető" mintát meg lehetne nézni (nyilván az érzékeny adatok nélkül)? Mert akkor talán tudunk válaszolni.
Meg lehet még próbálkozni az eseménykezelés letiltásával - az is tud problémát okozni, ha minden egyes cella változásánál "elszalad" az eseménykezelésbe, még akkor is, ha egyébként ott nem kell neki semmit csinálni.
Elébe egy Application.Enableevents=false, utána egy Application.Enableevents=true.
Nem tudom, a képernyőfrissítést ki szoktad-e kapcsolni. (Application.ScreenUpdating)Üdv.
-
Fferi50
Topikgazda
válasz
m.zmrzlina
#24477
üzenetére
Szia!
Az előző hozzászólásomban (24479) írtam: " Ebben az esetben bontsd részekre a műveletet", természetesen nem a műveletet kell részekre bontani, hanem a tartományt kell kisebb "adagokban" számítani.
Másrészt, ha csak a végén van # jel, akkor a
selection.replace what:="#",replacement:=""
parancs megoldja az eltüntetését.Üdv.
-
Fferi50
Topikgazda
válasz
m.zmrzlina
#24477
üzenetére
Szia!
Esetleg próbáld ki a következőt:
a=selection.value
for xx=1 to ubound(a,1)
for yy=1 to ubound(a,2)
if a(xx,yy)<>"" then a(xx,yy)=left(a(xx,yy),len(a(xx,yy))-1)
next
next
selection.value=a1.Ha biztosan nincs üres cella, akkor az if feltételt kihagyhatod.
2.A selection helyett inkább használj konkrét tartomány címet - ez működik akkor is, ha az adott munkalap nem aktív.
Sheets("Munka1").range("A1:B20").value
3.Ez csak akkor működik, ha a tartományod összefüggő.Azért lehet gyorsabb, mert itt a memóriában vannak az adatok, az "a" tömbben.
Elképzelhető, hogy out of memory hibát kapsz, de talán 35000 sornál még nem (persze attól is függ, hány oszlopod van). Ebben az esetben bontsd részekre a műveletet, még úgy is gyorsabbnak kell lennie.Üdv.
-
Fferi50
Topikgazda
válasz
slashing
#24471
üzenetére
Szia!
Az egészen biztos, hogy az automatikus kalkuláció tud problémákat okozni, főleg a következő esetekben:
Amikor olyan munkalap függvények vannak "tömegesen", amelyeknek az értéke frissítés (pl. ilyen az indirekt függvény is), vagy olyan saját függvényt használunk, amelyben benne van az Application.Volatile sor.
Ezek miatt ugyanis minden, de minden egyes cellaváltozáskor újraszámolódik az összes képlet értéke, akkor is, ha nem az azokban érintett cellák változtak.Nagyon sok adatunk van - sok munkalapon, esetleg még külső hivatkozásokkal (lekérdezésekkel) megspékelve és a külső adatok frissítése automatikusra van állítva.
Ilyen esetekben segít, ha a megnyitás előtt a számolást kézire állítjuk át (Application.Calculation=xlCalculationManual), és csak akkor hívjuk meg a számolás, ha ténylegesen változtattunk valamit.
Az újabb excel változatokban makróból már lehet hívni a számolást úgy is, hogy csak az adott munkalapot, vagy az adott cellatartományt számolja újra (de úgy emlékszem, ez az opció csak makróból megy).Segít még az is, ha a külső adatok automatikus frissítését letiltjuk és makróból vagy kézzel frissítünk.
Ha nagyon lassan jön be egy munkafüzet, ilyenekre lehet gondolni.
Üdv.
-
Fferi50
Topikgazda
válasz
MC Pite
#24463
üzenetére
Szia!
Bocs, de a kérdés és a leírás teljesen ellentétes egymással (legalábbis az én értelmezésemben).
"egy sorban jobbra növelném a képletben az oszlopcímet, 31esével. Lefele 30 adatsor van, következő oszlopban 31-61ig, következő oszlopban 62-92ig, stb."
Nekem ebből úgy tűnik, a sorszámát kellene növelni 30-as csomagokban.
Erre szerintem az indirekt függvényt lenne jó használni. A sor számát pedig a képletben az oszlop() és sor() függvény felhasználásával tudod beállítani:
= indirekt( "$A" & (oszlop()-1)*30+sor()) a második oszlop első cellájába az első oszlop első cellájának értékét fogja beírni.Üdv.
-
Fferi50
Topikgazda
válasz
Mittu88
#24442
üzenetére
Szia!
A hibautan cimke szerintem felesleges.
On Error GoTo hibavan
For sorszam = 2 To osszsorszam
Sheets(masodikadatbazis).Select
raktarszam = Cells(sorszam, 2).Value
munkalapnev = Application.WorksheetFunction.VLookup(raktarszam, Sheets("Raktárak").Range("$M$2:$N$90"), 2, False)
raktarszam = munkalapnev
...
Next
hibavan:
sorszam = sorszam + 1
resume nextNem világos, hogy a munkalapnev változód milyen típusúnak van deklarálva. Ha variant akkor nem okoz futási idejű hibát, viszont az értéke hibaérték lesz és azt kell megvizsgálni
if not iserror(munkalapnev) then raktarszam=munkalapnevViszont megoldható másképp is, ha a munkalapnev nem variant tipusu:
On Error Resume Next
For sorszam = 2 To osszsorszam
Sheets(masodikadatbazis).Select
raktarszam = Cells(sorszam, 2).Value
munkalapnev = Application.WorksheetFunction.VLookup(raktarszam, Sheets("Raktárak").Range("$M$2:$N$90"), 2, False)
if err= 0 then raktarszam = munkalapnev else sorszam=sorszam+1
...
NextÜdv.
-
Fferi50
Topikgazda
Szia!
Amit az előbb írtam, az sajnos nem megy - a vba help becsapott - bocs.
Viszont a másik ötletem a következő (hátha nem fogytak még el a libák.
):Ha az oszlopaid értékét egymás alá másolod, úgy, hogy a sorcimkéket is tovább másolod velük, majd minden adat mellé a mellette levő oszlopba beírod a hónapot (ami eddig a fejléc volt), akkor az így keletkezett adatoszlopot a sorcimkék és az új - a fejlécet sokszorozó - oszlop alapján kívánság szerint összegezheted.
Remélem érthető, amit írtam.
Üdv.
-
Fferi50
Topikgazda
Szia!
Csak egy ötlet:
Csoportosítsd át a tábládat úgy, hogy az összegzendő oszlopok egymás mellé kerüljenek. Akkor összefüggő tartományként megadhatod összegzendő paraméternek a 6 oszlopot. (A kiválogatást megcsinálhatod speciális szűrőt használva az adott oszlopokra a jelenlegi táblád végére is.)
Üdv.
-
-
Fferi50
Topikgazda
Szia!
A SZUMHATÖBB függvény arra jó, hogy egy összegzendő tartományt több feltétel - azaz több feltételtartomány-kritérium páros - szerint is vizsgálva adjon összeget.
A példádban több összegzendő tartomány van (a hónapok adatai) szerintem és a kritériumok azonosak (vagy nem).
Ezek összegét úgy kaphatod meg, ha a SZUMHATÖBB (vagy a SZUMHA, ha egy kritérium van) függvényt alkalmazod az oszlopokra és az eredményt összeadod:
=SZUMHATÖBB(elsőoszlop,elsőkritérium,elsőfeltétel,másodikkritérium,másodikfeltétel)+SZUMHATÖBB(harmadikoszlop,elsőkritérium,elsőfeltétel, másodikkritérium,másodikfeltétel) + így tovább...
Mivel külön SZUMHATÖBB függvényekről van szó, az egyes oszlopok összegezési feltételei akár el is térhetnek egymástól.Üdv.
-
Fferi50
Topikgazda
válasz
dellfanboy
#24424
üzenetére
Szia!
Ha a munkafüzet le van védve - és jelszó is van hozzá - akkor a jelszó ismerete nélkül nem tudod a munkalapot "felfedni".
Próbáld meg a következőket:
Ha ugyanabban a munkafüzetben van üres munkalap, akkor annak az első cellájába írd be ezt a képletet:
=védettlapneve!A1
Ha itt megjelenik adat, akkor minden adatot kinyerhetsz a munkalapról úgy, hogy a képletet végigmásolod minden cellán.
Ha nincs üres munkalap (és valószínűleg nem tudsz beszúrni sem újat), akkor nyiss egy új üres munkafüzetet és annak az egyik munkalapjára írd be a fenti képletet, kiegészítve a munkafüzet nevével.Ha átmész a Visual Basic nézetbe (Alt F11), akkor az immediate ablakban kiadhatod a következő parancssort:
sheets(védettlapneve).usedrange.copy sheets(üreslap).range("A1")
Ez elvileg a képleteket is átmásolja.Persze, ha másolás ellen is védve van, akkor nem fog menni, de azért egy próbát megér szerintem
Üdv.
-
Fferi50
Topikgazda
válasz
Hegyirabló
#24417
üzenetére
Szia!
Ha fülek nevére gondolsz, akkor igen. Ráállsz a lapfülre. Jobb egérgomb, átnevezés: itt olyan nevet adsz neki amilyet szeretnél.
A fülek (és így a munkalapok) sorrendje is megváltoztatható: A fülön állva bal egérgomb lenyomva, húzással oda teszed, ahova szeretnéd.Üdv.
-
Fferi50
Topikgazda
Szia!
Kicsit favágós, de működik ("kézi hajtással"):
A feltételes formázás szabálya: a formázandó cellák kijelölése képlettel
A képlet: =SZÖVEG.KERES(szinescellák;A1)>0
Beállítod azt a szint kitöltésnek amit szeretnél.
A szinescellák tartalma kétféle módon adható meg:
A szinezendő cellákról csinálsz egy másolatot. Utána a másolaton adatok-ismétlődések eltávolítása.
Ezzel megvannak az egyedi értékeid, abban a sorrendben, ahogyan az eredeti helyen következtek.
Minden második értéket "kigyomlálod" - vagy összefűzöd egy cellába vesszővel elválasztva.
1.Ekkor a szinescellák helyén ez a cella szerepel, abszolút módon megcímezve.
=SZÖVEG.KERES($K$1;A1)>0
2.Ha nem akarod, hogy a cella ott maradjon, akkor az értékét teszed be a szinescellák helyére.
=SZÖVEG.KERES("Németország,Olaszország,Portugália";A1)>0
A képlet megadásánál kijelölöd az egész formázandó tartományt. Az A1 helyébe a formázandó tartomány első celláját írod, nem $ cimként.Ha bővülne a tartomány, akkor a cellát, vagy a szöveget csak kiegészíted az új értékkel, amit másként kell színezni.
Ennél jobb most nem jutott eszembe.
Üdv.
-
Fferi50
Topikgazda
Szia!
Ez bizony a súlyozott számtani átlag alapján van sorbarakva, a helyezési szám minél kisebb, annál jobb a helyezés.
A súlyozott számtani átlagot az Mszorzat (súlyok,helyezési számok) / szum(súlyok) képlettel tudod kiszámítani. Ehhez a helyezési számokat át kell tenni függőleges helyzetbe.
A helyezést pedig sorbarendezéssel és a sorszám függvénnyel tudod megoldani.
A helyezések az első sorban vannak, a súlyok az adott tényezőhöz tartozó számok.
Üdv.
-
Fferi50
Topikgazda
válasz
Thrawnad
#24391
üzenetére
Szia!
Akkor most nem egészen értem:
"Sőt ha kézzel csinálom akkor is ez van hogy mentek, mentek másként, bezárok.
Így létrejön, és be is veszi az SAP és már hibát sem kapok
Csak a végét kellene automatizálni."Ezt amit kézzel csinálsz megoldja egy pár sor a makróban:
Activeworkbook.Save
Activeworkbook.SaveAs filename:=név, fileformat:=forma
Activeworkbook.Close FalseEzzel bezártad a fájlod.
Ha csak az aktív munkalap A oszlopát akarod kitenni egy fájlba, akkor viszont:
Activesheet.Copy ' ezzel az adott munkalapot egy új munkafüzetbe másolod, ami azonnal aktív is lesz.
Activesheet.Usedrange.Offset(0,1).ClearContents 'az A oszlopon kívüli adatok törlése
Activeworkbook.SaveAs filename:=név, fileformat:=forma 'elmented
Activeworkbook.Close False
Ezek után ismét az eredeti munkafüzeted lesz az aktív munkafüzet. Csinálhatsz benne bármit, amit szeretnél.Üdv.
-
Fferi50
Topikgazda
válasz
Thrawnad
#24384
üzenetére
Szia!
Ne haragudj, hogy értetlenkedek és visszakérdezek:
Milyen típusu textfájlt szeretnél kapni. Ez azért fontos, mert annak megfelelő módszereket kell alkalmazni.
Közvetlen fájlkezeléssel bármit ki tudsz íratni fájlba, anélkül, hogy az alapfájlod megváltozna.
Nézz körül az Open - Print -Put - Close utasítások körül (nem a Workbook.Open metódus, hanem a fájl megnyitó Open).
Ha felteszel egy mintát, szívesen segítek. DE: meg kell mondanod, hogyan nézzen ki a text fájl: azonos szélességű rekordok, határolójellel elválasztott értékek - és ha igen, akkor mi legyen a határolójel,oszlop vagy sor alapján kerüljenek ki az adatok a fájlba stb.Üdv.
-
Fferi50
Topikgazda
-
Fferi50
Topikgazda
válasz
PETEE78
#24382
üzenetére
Szia!
Bocs, hogy visszakérdezek:
"kritérium1 : egyéb!U2=0;egyéb!V2=0;egyéb!W2=0;egyéb!X2=0"
Ez mindjárt három kritérium, de ezt tudja kezelni a SZUMHATÖBB függvény
"kritérium2 : DARABTELI(J2;1)"
Ezt nem tudom kritériumként értelmezni, mennyi legyen a darabteli értéke, vagy a J2-ben 1-nek kell lennie?
"kritérium3: DARABTELI(I2;"02 krumpli")"
Erre ugyanaz a kérdésem, mint az előbbinél, 02 krumpli -nak kell lenni az I2 cellában?Üdv.
-
Fferi50
Topikgazda
válasz
Thrawnad
#24381
üzenetére
Szia!
Ez sajnos a Mentésmásként (SaveAs) logikája, ha kézzel mented, akkor is ez történik!
Ezért a megoldás szerintem az, hogy először elmented a fájlodat activeworkbook.save, majd utána mented SaveAs metódussal textfájlként.
Eután visszanyithatod az első fájlodat.(Létezik ugyan egy SaveCopyAs metódus is, ami az eredeti fájlt érintetlenül hagyja, de ott nem adhatod meg, hogy milyen típusu legyen a mentett fájl.)
Üdv.
-
Fferi50
Topikgazda
válasz
looser
#24370
üzenetére
Szia!
Egy makró nélküli mód:
1. A1 - adatok - érvényesítés - érvényesítés lista és a lista helyére beírod Bor;Sör
2. A2 - adatok - érvényesítés - érvényesítés lista - kijelölsz egy 3 cellás területet -mondjuk S1:S33. S1 cella képlete: =ha(A1="Bor";"fehér";"alsóerjesztésű")
S2 cella képlete: =ha(A1="Bor";"vörös";"felsőerjesztésű")
S3 cella képlete: =ha(A1="Bor";"rozé";"spontán")ezután ha az A1-ben kiválasztod a bort, akkor az első értékek jelennek meg az A2 listájában, ha a sört választod, a második értékek jelennek meg a listában.
Makróval pedig a Worksheet_change eseménykezelőbe kell tenni az érvényesítés változtatását.
Üdv.
-
Fferi50
Topikgazda
válasz
Zola007
#24362
üzenetére
Szia!
Szerintem írhatsz kifejezéseket a hatvány függvénynél is mind az alapba, mind a kitevőbe, függvény formában beírva és ^ jelet használva is.
Nálam legalábbis megy, mind a 2010-es, mind a 2003-as excelben. Csak megfelelően kell zárójelezni a műveletek precedenciája miatt (inkább legyen egy zárójelpárral több, mint kevesebb...).
Pl. =((C36*3)/6)^(SZUM(C40:C41)-4)Üdv.
-
Fferi50
Topikgazda
válasz
Thrawnad
#24367
üzenetére
Szia!
Nem egészen értem, hogy mit "borzol össze" nálad amit leírtál.
Viszont azt gondolom, a Fileformat:=xlText megadása nagy valószínűséggel nem jó. A help szerint vagy
xlTextMac
xlTextMSDOS
xlTextPrinter
xlTextWindows
xlUnicodeTextlehet az értéke, sima xlText konstanst nem látok a fileformat típusok között.
Üdv.
-
Fferi50
Topikgazda
-
Fferi50
Topikgazda
válasz
Zola007
#24347
üzenetére
Szia!
Igen, a kitevő csak az e alapú logaritmusra működik. Minden másra ott a hatvány függvény, vagy rövidítve a "kalap": 4^2 = Négy a négyzeten. Elől az alap, utána a kitevője.
"De ha egy makrót illesztek be, akkor elég csak a makrót átírni és mindenhol változik"
Ez akkor igaz, ha a módosítandó celláid valamilyen rendszer szerint helyezkednek el. Egyébként pedig a makróba ugyanúgy meg kell adni a pár(száz) módosítandó cella címét, csak nem egérrel jelölöd ki. Igaz a makrót csak egyszer kell megírnod ilyen "részletességgel".....
De az is lehet, félreértelmezem amit írtál....
Üdv.
-
Fferi50
Topikgazda
válasz
Zola007
#24344
üzenetére
Szia!
"a gondom az, ha bármelyik képleten változtatni akarnék, akkor mindenre rá kell húzni a módosítottat, nem elég mondjuk 1 helyen"
Szerintem ez minden képlettel így van, akkor is, ha külön cellában van a képleted, akkor is, ha egy cellában van egy hosszú képlet.
Próbáld az Átlag függvényt, aminek a paraméterihez beírod a 7 függvényedet szépen egymás után (természetesen a W és R helyett az A1 és a B1 cella szerepeljen).
Pl: =ÁTLAG(A1*(36/(37-B1));A1*(1+0,0333*B1);(100 *A1) / (101,3 - 2,67123 * B1);A1*B1*0,1;(100*A1)/52,2+(41,9*KITEVŐ(-0,055*B1));A1* (1 + 0,025 * B1);(100 * A1) / (48,8 + (53,8 * KITEVŐ(-0,075 *B1))))
Viszont, ha angol exceled van, amire a tizedespontból következtetek csak, akkor nyilván nem Kitevő a függvényed neve.
Üdv.
-
Fferi50
Topikgazda
válasz
Zola007
#24342
üzenetére
Szia!
Egyrészt, hat képletről írsz, de hét sor van.
Másrészt, milyen excel verziód van.
Harmadrészt elég sok képletet be lehet "zsúfolni" egy cellába, miért gondolod, hogy ezt nem lehet.
Nálam az ehatvány (excel 2010-ben a KITEVŐ függvény) simán elfogad kifejezéseket, amelyekben cellára hivatkozok.Kérlek, pontosíts egy kicsit.
Üdv.
-
Fferi50
Topikgazda
válasz
LordVader80
#24337
üzenetére
Szia!
Az A1 képlete maradjon az, amit írtál.
B1-től a képlet: =ELTOLÁS($A$1;2;(OSZLOP()-1)*3;1;1)Üdv.
-
Fferi50
Topikgazda
Szia!
Ahol a makróban a forrrás és a cél munkalap neve van, ott az adott cellára kell hivatkozni, ahova a nevet beírtad.
Pl. sheets("Munka1").range("B1").copy helyett sheets(activesheet.range("A1").value).range("B1").copyA másolandó munkalap neve az activesheet A1 cellában van.
Ugyanígy a cél munkalappal is.Ha felteszed a makródat "kamu" nevekkel, akkor még pontosabb választ kaphatsz.
Üdv.
-
Fferi50
Topikgazda
Szia!
Neked bizonyára sokkal nagyobb gyakorlatod van a relatív meghatározású nevek használatával, mint nekem, mivelhogy én nem használok ilyeneket. A kérdésed kapcsán próbáltam megnézni a viselkedésüket, illetve visszaemlékeztem pár hasonló próbálkozásomra (de bizonyára rosszul fogtam meg a témát).
Hogy a kérdésedre válaszoljak:
Alapcella - amin álltál, amikor a névkezelőben megadod a nevet. Ehhez a cellához képest a névhez tartozó tartomány (ami lehet egy-vagy több cella) sor és oszlop eltérése a viszonyítási alap a szóhasználatomban.
Tehát, ha a C1-ben állva adsz az A1 cellának nevet (név), majd F1-ben beírod a képletet =név, abban pillanatban a név már nem az A1 cellára fog vonatkozni, hanem az F1-től 2 cellával jobbra levő D1 cellára.
Ha pedig beleállsz az E1 cellába és megnézed a név melyik cellára mutat, meglátod, hogy az - mielőtt bármit is csinálnál vele C1-re hivatkozik.
DE: a VBA már meg is "bolondult", mert nála már az utolsó oszlopok valamelyike az, amihez a név tartozik.
És itt jön be, amit a 24292-ben írt Fire/SOUL/CD : a relatív névből látszólag mindig egy van, a valóságban pedig mindig a legutolsó aktív cellához képest számolja ki a név hivatkozását, tehát "több" név létezik belőle. Ezért nem egyértelmű - pont a dinamizmusa miatt. Szerintem a VBA ezért nem tud vele igazán mit kezdeni.Ez igaznak látszik a munkalapon generált relatív nevekre. Nem tudom - most nincs már igazán időm rá -, hogy a VBA-ban makróval megadott nevek hogyan viselkednek.
Emiatt az általam korábban már megtapasztalt ellentmondás miatt inkább a VBA objektum hozzárendelést és ahhoz az offset tulajdonságot használom. Pl.
dim alap as range
set alap=range("A1")
msgbox alap.offset(0,2).address ' = $C$1De persze - mint az már többszörösen bebizonyosodott, ízlések és pofonok különböznek. Így aztán nyilván különféle megoldásai lehetnek ugyanazon feladatoknak.
Üdv.
-
Fferi50
Topikgazda
válasz
Pampipapi
#24297
üzenetére
Szia!
Ehhez így sajnos nem fogsz megfelelő függvényt találni.
Illetve a MOST de inkább a MA az jó a beírás napján,de ahhoz, hogy későbbi napokon ne változzon meg, minden bezárás előtt át kell alakítani értékké:
Másolás - irányított beillesztés érték. Ezután már mindig az adott értéket fogja mutatni a cella. (Ezt természetesen lehet automatizálni makróval - és ekkor makróbarátként kell a füzetet elmenteni és a makró futtatását engedélyezni kell stb...)Üdv.
-
Fferi50
Topikgazda
Szia!
A "relatív" névadás szerintem roppant mód veszélyes dolog - legalábbis a 2010-es excelben biztosan, 2003-as excelben pedig egész egyszerűen körkörös hivatkozást "képes" eredményezni.
Gondolj bele: a relatív hivatkozással "elhúzod" az alapcella címét is, amikor egy új cellába helyezed a képletet (ugyanúgy, mint más képletttel), csak itt "megy vele" a viszonyítási alap is. Erre aztán "el is veszti" a fejét a VBA.
Hogy ez aztán "bug", vagy csak "elfelejtették" megírni, hogy ne adjunk nevet relatív címzéssel azt nem tudom.
Szerintem nem véletlen, hogy a névkezelő állandóan abszolut módon adja meg a címeket.Üdv.
-
Fferi50
Topikgazda
válasz
tgumis
#24237
üzenetére
Szia!
Biztos, hogy számok vannak abban az oszlopban mindenütt, ahol a <>0 kritériummal szeretnél szűrni? Próbáld ki a szűrést "kézzel" a menüből, akkor kiderül a turpisság.
Mert egyébként nálam szépen szűri a számokat azzal a feltétellel is.Ha másolni akarsz, egyszerübb a
range("AY2:BD" & usor).specialcells(xlcelltypevisible).copy range.akármi
ahol az akármi helyébe írod a másolás célértékét. A szűrés után a látszó cellákat ezzel a módszerrel másolhatod át.
Nem kell a select....Sokszor hibát is okoz.Üdv.
-
Fferi50
Topikgazda
válasz
RootRulez
#24202
üzenetére
Szia!
Ha már C241 van a végén, akkor az elején is annak kellene lennie az A1 helyén!
De miért nem használod a KEREKÍTÉS függvényt, az kapásból jól kerekít le és fel:
=KEREKÍTÉS(C241*1,2;-2)-10
Ha pedig 30-tól szeretnél már felfelé kerekíteni, akkor
=KEREKÍTÉS(C241*1,2+30;-2)-10
Üdv.
-
Fferi50
Topikgazda
Még ezeket tenném hozzá:
A megnyitáskori frissítésre rákérdezést "el lehet nyomni" és le lehet tiltani a frissítést.
A hivatkozásokat meg lehet változtatni makróból is, meg a nyitott munkafüzetben menüből is.
Természetesen az értékké alakítás csak akkor járható út, ha nem gyakran frissülő adatkapcsolatokról van szó.
Mivel én ilyen célra nem használom az indirekt függvényt, így nem is tudom megmondani, hogy nem nyitott forrásfájlnál mit csinál. Ha azt mondod #HIV hibát "eredményez" , az már egy ok arra, hogy ne is használd, hiszen soha nem tudhatod, hogy nyitva van-e a forrásfájl, illetve akkor arról kell makróból "gondoskodni", hogy legyen mindegyik nyitva.
Ha tudod, hogy milyen forrást szeretnél mire változtatni - márpedig tudod, hiszen az "indirekt" cella tartalmát ismered változás előtt és azt is, amire szeretnéd cserélni, akkor működik a cellákban levő "direkt hivatkozás" cseréje is "egyszerű" range.cserél metódussal. Az "indirekt" értéket tartalmazó cellát ebben az esetben a régi hivatkozás forrásaként lehet használni, de nem ezzel kell összeállítani a cella képletét.
Üdv.
-
Fferi50
Topikgazda
Szia!
"Pl. minden megnyitáskor újrafrissítem ezeket makróból?"
Ez így van, akkor nincs mire rákérdeznie, ha nincs élő külső hivatkozás, a frissítés pedig a nyitási procedúrába belefér.
De lehet erre egy gombot is kijelölni /vagy billentyűkombiációt/, ami szintén végrehajtja a frissítést kérésre.
Üdv.
-
Fferi50
Topikgazda
Szia!
Nem kell a külső hivatkozásoknál nyitva lennie a hivatkozott fájlnak, csak akkor ugynevezett 3D-s neveket úgy kell használnod, hogy a fájlok teljes - elérési utat is tartalmazó - nevét kell betenned.
Kipróbálhatod a következőt: Megnyitod a cél és a forrás fájlt is. A célfájlban megcsinálod a hivatkozást.
Utána bezárod a forrásfájlt. Azt fogod látni, hogy megjelenik a teljes fájlnév a hivatkozásban. Ha ezt a hivatkozást tovább másolod a következő cellákba, akkor azokban is láthatóvá válik az eredmény. (Azaz ilyen módon "bele lehet látni" meg nem nyitott fájlokba is!)Én az indirektet ilyen esetekben nem szeretem használni - de ez ízlés kérdése -, inkább azt szoktam csinálni, hogy a képlet összetevőit tárolom különböző cellákban. Szükség esetén a megfelelő cellákba makróval beírom a képletet (pl. a fájl megnyitásakor), majd azonnal be is "helyettesítem" az értékükkel.
Tehát az adott cellára konkrétan írom be, cella.formula="Xyfájl.munkalapja!A1".Természetesen a formulában, ha kell szerepel az aposztróf és a szögletes zárójel is (általában kell).
Ha minden cellának megvan a képlete és az eredménye, akkor átváltom értékre.Üdv.
-
Fferi50
Topikgazda
válasz
Mela Kehes
#24167
üzenetére
Szia!
Talán a fordulók párosítását - azaz a sorsolást - szeretnéd megcsinálni?
Vannak erre különféle párosítási táblázatok, ahol csak egy számot kell az adott csapathoz/játékoshoz rendelned és a táblázatból máris kiolvasható a fordulók rendje és párosítása.
sorsolási táblaEz ugyan sakkra van, de messzemenően figyelembe veszi az otthoni-idegenbeli (sakkban ugye világos-sötét) játékeloszlás "igazságosságát" is.
Vagy itt van ez a link:kispályás foci
ami nem "kispályás" lehetőségeket kínál.Üdv.
-
Fferi50
Topikgazda
válasz
pirit28
#24165
üzenetére
Szia!
"="ennyi az idő "&VLOOKUP(B143;$A$19:$D$131;4;0)"
Ez már egy szöveg - szám összefűzés, amire nem érvényes a cellaformátum (mivel az idő az excel számára egy (tört)szám).
Módosíts így
="ennyi az idő "& TEXT(VLOOKUP(B143;$A$19:$D$131;4;0);"időformátum")Az időformátum helyére tedd a neked szükséges formátumot pl. hh:mm.
Üdv.
-
Fferi50
Topikgazda
válasz
slashing
#24161
üzenetére
Szia!
A "szépség" arra épít, hogy egyedi "azonosítók" vannak...Ami cégnevek esetében eléggé kézenfekvőnek tűnik, hiszen miért is vinném fel kétszer ugyanazt az ügyfelet - ha több telephelye és cime van, akkor hozzáteszem a telephelyét pl.
A dátumokkal kicsit más a helyzet, hiszen események történhetnek azonos napokon bőven. Meg lehet próbálni a ha függvénnyel megnézni, hogy az eredmény egyezik-e az előző értékkel, de ekkor szerintem nem +1 a hozzáadnivaló, hanem az új találat helye.
Másrészt az első oszloppal (igen - nem) szabályozni tudod a kiválasztást szerintem.Bocsi, most nem néztem meg a gyakorlatban, csak elméletileg futottam egy kört - lehet, hogy hibás következtetésre jutottam.
Üdv.
-
Fferi50
Topikgazda
válasz
slashing
#24158
üzenetére
Szia!
Az advanced filternek valóban az a "heppje", hogy a célnak - de csak annak - az aktív munkalapon kell lennie.
De, ha csak egy oszlopból szeretnéd kiválogatni az egyedi értékeket, akkor csináld a következőt (2007-es exceltől kezdve működik):
sheets("akarmi").usedrange.columns("A").copy sheets("akarmi").range("D1")
usor=sheets("akarmi").range("D1").end(xldown).row
sheets("akarmi").range("D1:D" & usor).RemoveDuplicates columns:=1,header:=xlNoÉs máris megvan az egyedi listád, ez a pár sor működik rejtett munkalapon is.
Üdv.
-
Fferi50
Topikgazda
válasz
slashing
#24154
üzenetére
Szia!
Ha a select előtt megnézed, hogy látható-e a sheet, ha nem akkor előtte láthatóvá és aktívvá teszed.
If sheet_akarmi.visible<>xlsheetvisible then sheet_akarmi.visible=xlsheetvisible
sheet_akarmi.selectÜdv.
Egyébként pedig szerintem meg kellene oldani a feladatot select nélkül. Az működik hidden és veryhidden állapotú munkalapnál is.
-
Fferi50
Topikgazda
Szia!
A formokon (és a munkalapokon) levő vezérlők eseménykezelésére nem hat az application.enableevents beállítása (sajnos).
Ezért ott trükkökhöz kell folyamodni.
Mielőtt kiadod az értékadó utasítást, megnézed a gomb jelenlegi értékét és az adott oszlop láthatóságát, ha megfelelő mindkett, akkor nem kell kiadni az utasítást. Ha nem jól áll valamiért (pl. a gomb benyomva, az oszlop pedig látszik - vagy fordítva), akkor az oszlop láthatóságát állítod és nem a gombnak adsz értéket.Üdv.
-
Fferi50
Topikgazda
válasz
PETEE78
#24143
üzenetére
Szia!
Ez akkor fordulhat elő, ha a frissítéskor megváltoznak a sor, de főként az oszlop viszonyok (több, vagy kevesebb lesz belőlük), vagy a frissítés folyamán az eredeti adatokat tartalmazó sorok/oszlopok törlődnek.
Normál esetben ilyennek nem lenne szabad előfordulni. A hivatkozás "fixálásra" nincs lehetőség, de nincs is rá szükség.
Esetleg leírhatnád konkrétan, hogy milyen a hivatkozás a másik munkalapon és mit csinálsz a frissítéskor, illetve milyen módon frissítesz.
Üdv.
-
Fferi50
Topikgazda
válasz
KaiotEch
#24134
üzenetére
Szia!
Nálam a J1:J5 -ben vannak a szummázandó értékek.
Akkor az első cella érvényesítésének képlete legyen ez:
=ÉS(J1>=0;SZUM($J$1:$J$5)<=X)
Beírod az első cella érvényesítésébe, majd nullát írsz a cellába és végigmásolod a további 4 cellába is.
A szum képlet helyébe azt a képletet írd, amivel szabályozod a 6. cellába írandó értéket.
Üdv.
-
Fferi50
Topikgazda
válasz
KaiotEch
#24132
üzenetére
Szia!
Ha az X-et tudod előre, akkor azon celláknál (az első 5-nél) az adatérvényesítés maximumába írd be az X-et. (Adatok - érvényesítés - egész szám: minimum - maximum).
Ha nem csak egész szám írható be, akkor adatok - érvényesítés -egyéni - és a képlet
=ÉS(J1>5;J1<100)
J1 az adott cella, amire az érvényesítés szól, az 5 és a 100 helyébe írd a saját minimum, maximum értékedet.Ha eredménytől függően szeretnéd a beírható maximumot korlátozni, az már keményebb dió.
Üdv.
-
Fferi50
Topikgazda
válasz
KaiotEch
#24129
üzenetére
Szia!
Az érvényesítés az rendben van úgy, ahogyan van. Viszont képletet tartalmazó cellában nem hatásos az érvényesítés.
Az eredményt a hatodik cellában akarod látni. Akkor oda kell a képlet is. De ez a képlet még egyszerűbb:
= min(szorzatképlet;x)
Ez mindig a kettő közül a kisebbet fogja mutatni eredményként.Üdv.
-
Fferi50
Topikgazda
válasz
nrg007
#24107
üzenetére
Szia!
Megcsináltam a képleteket:
F4 cella képlete: =INDEX($B$1:$B$21;HOL.VAN("igen";$A$1:$A$21;0))
G4 cella képlete: =INDEX($C$1:$C$21;HOL.VAN("igen";$A$1:$A$21;0))F5 cella képlete:
=HAHIBA(INDEX(INDIREKT("B"&HOL.VAN(F4;$B$1:$B$21;0)+1&":$B$21");HOL.VAN("igen";INDIREKT("A"&HOL.VAN(F4;$B$1:$B$21;0)+1&":$A$21");0));"")G5 cella képlete:
=HAHIBA(INDEX(INDIREKT("C"&HOL.VAN(F4;$B$1:$B$21;0)+1&":$C$21");HOL.VAN("igen";INDIREKT("A"&HOL.VAN(F4;$B$1:$B$21;0)+1&":$A$21");0));"")Ez utóbbi két képletet húzd le végig az egész F és G oszlopon.
Üdv.
-
Fferi50
Topikgazda
válasz
nrg007
#24107
üzenetére
Szia!
Értem a kívánságod, de:
biztos, hogy minden egyes cellaérték változáskor szeretnéd az F és G oszlop adatait változtatni?
nem lenne elég, ha az igenek kijelölése után megcsinálnád a szűrést?
Egyébként az egész folyamatot makróval is meg lehet csinálni, úgy hogy egy billentyűkombinációval tudod a listádat frissíteni - de az makrós megoldás (és makróbarát munkafüzetként kell menteni.)Képleten is gondolkodtam már, index és hol.van függvények kombinációjával kissé bonyolult képlettel úgy gondolom meg lehet oldani, de nem csináltam végig, mert úgy gondoltam, a szűrés egyszerűbb.
Mi a véleményed?
Üdv.
-
Fferi50
Topikgazda
válasz
PETEE78
#24100
üzenetére
Szia!
Javaslom az irányított/speciális szűrőt - ezzel egyszerre több oszlopot is szűrhetsz és van benne olyan opció is, hogy csak az egyedi értékeket (vagyis ami többször van azt nem szűri ki). Átmásolod egy új helyre és utána megnézed, hogy hány sort tett ki - vagy a darabteli, vagy más függvénnyel.
Üdv.
-
Fferi50
Topikgazda
válasz
nrg007
#24090
üzenetére
Szia!
Nézd meg légyszives a speciális szűrést (régebbi verzióban irányított szűrés). Ott van olyan opció, hogy másolja át egy új helyre.
Egy szűrőtartományt kell megadni, ahol az első cella a Szükséges? cimke, az alatta levő pedig az igen.
Kijelölsz egy cellát ahova másolni kell (mert az igen oszlop is másolódik), utána a két másik oszlopot bemásolod az F-G oszlopba, ahová kell.Üdv.
-
Fferi50
Topikgazda
Szia!
Ehhez egy kissé meg kell variálni az fkeres és ha függvényeket, (nem írtad, milyen excel verziód van. 2010-től működik a hahiba függvény is, én ezt vetettem még be.)
Az egyszerűség kedvéért elneveztem a vizsgálandó tartományokat, az első munkafüzet tartományának neve elso, a másodiké masodik, a harmadiké harmadik.
A kigyűjtött értékek az E oszlopban vannak, a képletek a G,H,I oszlopokba kerülnek:
F1 cella képlete:
=HAHIBA(FKERES(E1;elso;2;0);HAHIBA(FKERES(E1;masodik;2;0);HAHIBA(FKERES(E1;harmadik;2;0);"")))
G1 cella képlete:
=HA(HAHIBA(FKERES(E1;harmadik;2;0);"")=F1;"";HA(HAHIBA(FKERES(E1;masodik;2;0);"")=F1;HAHIBA(FKERES(E1;harmadik;2;0);"");HA(HAHIBA(FKERES(E1;masodik;2;0);"")="";HAHIBA(FKERES(E1;harmadik;2;0);"");HAHIBA(FKERES(E1;masodik;2;0);""))))
H1 cella képlete:
=HA(HAHIBA(FKERES(E1;harmadik;2;0);"")=F1;"";HA(HAHIBA(FKERES(E1;harmadik;2;0);"")=G1;"";HAHIBA(FKERES(E1;harmadik;2;0);"")))Ezeket kell végighúzni a 3 oszlopon.
A hahiba függvény a Ha( hibás(kifejezés), hibaesetén,nem hiba esetén) összetett függvényt helyettesíti.
Üdv.
-
-
Fferi50
Topikgazda
válasz
slashing
#23998
üzenetére
Szia!
Igazad van.
Csinálni kell egy segédoszlopot, amibe összefűzzük a négy oszlop celláit és abban keressük a vizsgálandó sor összefűzött értékét. Az összefűzésnél akár elválasztó jelet is alkalmazhatunk.
Tehát Delila példájánál maradva: H1 =D1&E1&F1&G1 ezt kell végighúzni a H oszlopban, majd az I4 cella képlete:
=HA(Darabteli($H$1:$H4;D4 & E4 & F4 & G4)>1;"x";"")Üdv.
-
Fferi50
Topikgazda
válasz
bteebi
#23981
üzenetére
Szia!
A Paste szintén olyan metodus, amelyik csak az aktív lapon működik.
Sajnos a vágólapra helyezett dolgokat (a Copy odateszi), csak ezen a módon tudod VBA-ból elérni.
A Diagram elég különleges "állatfajta" ebből a szempontból is, hiszen forrásadat nélkül csak "módosíthatatlan" képként tudod egyik helyről a másikra áttenni.Én is javaslom a Chart.CopyPicture alkalmazását.
Üdv.
-
Fferi50
Topikgazda
válasz
bteebi
#23976
üzenetére
Szia!
A select csak az aktív munkalapon használható. Itt pedig az aktív munkalap Sheets("Adatok").ChartObjects("Diagram 1").Activate alapján az "Adatok" munkalap.
Te pedig a Sheets("Diagramok").Cells(3 + (i - 1) * 28, 2).Select szerint a "Diagramok" munkalapon adod ki a selectet.Üdv.
-
Fferi50
Topikgazda
Szia!
Az Initialize csak egyszer fut le, akkor amikor betöltődik a form.
Az Activate mindig, amikor megjeleníted.Elképzelhető, hogy mást kell csinálnia az első megjelenéskor, mint a következőknél, ahhoz, hogy jól működjön.
Szerintem most az inicializálást el lehet hagyni. (De próba és már meg is tudod....)Üdv.
-
Fferi50
Topikgazda
Szia!
Tedd a kódot a Userform Activate eseménybe (is).
Egyébként lehetne rövidebben:
Private Sub togbutTranslate_Click()
Range("b_forditocellak").EntireColumn.Hidden = Not Range("b_forditocellak").EntireColumn.Hidden
End Sub
Private Sub UserForm_Activate()
Me.togbutTranslate.Value =Not Range("b_forditocellak").EntireColumn.Hidden
Me.labVersion.Caption = "Jegyzőkönyv verziója: " & Worksheets("MAGYAR").Range("N2").Value
End SubÜdv.
-
Fferi50
Topikgazda
válasz
snorbi82
#23970
üzenetére
Szia!
Itt ugyan a 25. sorban van Minta Janika, de sebaj, mindegy is melyik sorban van, azt majd megadod.
Nagy vonalakban a javaslatom:
Indulsz a meglevő, beolvasott csv adatokkal.
A változó deklarációkat rád bízom...set adatok=activesheet
utsor=cells(1000,1).end(xlup).row 'megkeressük az utolsó sort
For ugyfsor=18 to utsor ' ettőll eddig kell a ciklusnak menni
set ujws=workbooks.add.sheets(1) 'létrehozza az új munkafüzetet és aktívvá teszi
range(adatok.cells(ugyfsor,"J"),adatok.cells(ugyfsor,"Z").copy range("J18")
range(adatok.cells(ugyfsor,"AA"),adatok.cells(ugyfsor,"AB").copy range("J19")
range(adatok.cells(ugyfsor,"AC"),adatok.cells(ugyfsor,"AD").copy range("J20")
' és így tovább..... ha az első oszlopnál akarod kezdeni, akkor range("A18") a "J18" helyett stb.
' ha végig értél az ügyfélen
ujws.parent save as filename:=fájlnév ' (amit természetesen neked kell megadni)
ujws.parent close false
next 'és megy vissza az elejére a ciklusRemélem, tudsz belőle valamit használni.
Üdv.
-
Fferi50
Topikgazda
válasz
littleNorbi
#23900
üzenetére
Szia!
Makrókban erősen ajánlott az angol függvényneveket használni (de nem kizárt, mert a formulalocal paraméter a helyi nevekkel működik, csak nem hordozható).
A tisztánlátás kedvéért, ha jól lefordítod angolra, akkor nem lehet NAME hiba! De ha tudjuk, hogy angol az exceled, akkor az angol függvénynevet kapod a munkalapra beírandó képletekhez is, nem kell fordítani.
Üdv.
-
Fferi50
Topikgazda
válasz
littleNorbi
#23897
üzenetére
Szia!
Annyit azért elárulhattál volna, hogy angol nyelvű excelt használsz.....
(Mint az a következő hozzászólásodból ki is derül.)Üdv.
Új hozzászólás Aktív témák
- Fejhallgató erősítő és DAC topik
- Okos Otthon / Smart Home
- Mazda topik
- ASUS notebook topic
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Anime filmek és sorozatok
- Multimédiás / PC-s hangfalszettek (2.0, 2.1, 5.1)
- Honor Magic8 Pro - bevált recept kölcsönvett hozzávalókkal
- Milyen monitort vegyek?
- Elektromos autók - motorok
- További aktív témák...
- Xbox / Microsoft Store feltöltőkártya kód (digitális, HU) több címlet, több db, azonnal, olcsón
- Windows 10/11 Home/Pro , Office 2024 kulcsok
- MS SQL Server 2016, 2017, 2019
- Microsoft és egyéb dobozos retro szoftverek
- MEGA AKCIÓ! - Jogtiszta Windows - Office & Autodesk & CorelDRAW - Azonnal - Számlával - Garanciával
- Huawei Watch Fit 3 Okosóra!
- Apple iPhone 12 Pro 256GB, Kártyafüggetlen, 1 Év Garanciával
- 220 - Lenovo LOQ (15ARP9) - AMD Ryzen 7 7435HS, RTX 4070
- ÁRGARANCIA!Épített KomPhone i5 14600KF 32/64GB DDR5 RAM RX 9070 16GB GAMER PC termékbeszámítással
- BESZÁMÍTÁS! Részletfizetés 0% THM ÚJ GIGABYTE A16 3VH 16" notebook R7 260 16GB RTX 5060 3 év 27%
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
):



