- Red Magic 10 Air - gaming telefon is lehet kecses
- Megjelent a Poco F7, eurós ára is van már
- Samsung Galaxy A54 - türelemjáték
- Milyen okostelefont vegyek?
- Rekord vékony lesz a Z Flip7 is
- Bemutatkozott a Poco X7 és X7 Pro
- Xiaomi 14T Pro - teljes a család?
- Betiltották a Pixel 7-et Japánban
- Bemutatkozott a Fairphone 6
- Xiaomi 15 - kicsi telefon nagy energiával
-
Mobilarena
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
-
Mutt
senior tag
-
Mutt
senior tag
válasz
konyi79 #20981 üzenetére
Hello,
...hogyan tudom megadni neki, globálisan a munkalapnak, hány tizedessel számljon a cellákban lévő tartalomból?
Beállítások->Speciális->Megjelenés szerinti pontosság beállítás opcióval ezt tudod elérni, azonban ez globális beállítás ezért nem csak ezt a munkafüzetet, hanem az összeset érinti.
Amit el szeretnél érni azt javasolt inkább képlettel megcsinálni, ha nincs szükséges a tizedesekre akkor inkább a KEREKÍTÉS vagy egészrész (INT) függvényeket használd a megfelelő helyeken.üdv
-
Mutt
senior tag
Sziasztok,
Egy másik fórumon jelent meg egy olyan kérés, hogy meg kellene számolni egy oszlopban hogy egymás után hányszor szerepel pozitív illetve negatív szám, és a legtöbb előfordulást kellene megadni. Mindezt segédoszlopok nélkül. VBA megoldás született rá, de itt hadd mutassam be képlettel is.
Pozitív számra ez a képlet (Excel 2010 vagy felette):
=HA(DARABTELI(A:A;">0")=0;0;MAX(GYAKORISÁG(HA(A:A>0;SOR(A:A));HA(A:A<=0;SOR(A:A)))))Negatívra:
=HA(DARABTELI(A:A;"<0")=0;0;MAX(GYAKORISÁG(HA(A:A<0;SOR(A:A));HA(A:A>=0;SOR(A:A)))))Természetesen Ctrl+Shift+Enter-el kell bevinni.
A pozitív számokhoz egy példán keresztül megpróbálom elmagyarázni, hogy működik a képlet.
A képen A-oszlopban az adatok, a C-F oszlopokban pedig a lenti magyarázathoz részeredmények láthatók.
1. A képlet magja a GYAKORISÁG függvény, amely egy halmazból és egy keresési csoportból áll. A függvényről a súgóban lehet olvasni, példát látni. Ha az eredeti számokat adnánk meg, akkor csak azt tudnánk meg, hogy melyik szám hányszor fordul elő, ami most nem jó.
2. A megoldás, hogy a szám helyett a sor számát írjuk ki, annyival megspékelve hogy ha negatív a szám, akkor hibát iratunk (most a leghosszabb pozitív számsort keressük). Ennek a képlete HA(A:A>0;SOR(A:A)) és eredményét a C-oszlopban látjuk. Ez lesz a gyakoriság függvény első fele.
3. A második fele a gyakoriságnak pont az ellentétje a fentinek, tehát ha negtív szám van a cellában akkor a kell a sor száma. A képlet HA(A:A<=0;SOR(A:A)) és eredménye a D-oszlopban van.
4. Most jön a gyakoriság, amely a keresési csoportokat nézi (D-oszlop emlékeztetőül) és onnan csak a számokat veszi figyelembe (a HIÁNYZIK-ot kihagyja) és megszámolja hogy két csoport között az adathalmazban hányszor fordul elő szám.
A könnyebb érthetőség miatt az E-oszlopba beírtam a keresési csoportokat, amelyek számok a D-ből 2 eltéréssel: az első csoport (ami most az 1-et tartalmazza) az valójában kisebb és egyenlő 1 értelmezendő, a másik pedig hogy mindig eggyel több csoportot használ a függvény így a 13 után van még egy nagyobb mint 13 is.
A fentiek alapján a C-oszlopban lévő számokat számolgatja, ezt az F-oszlopban látjátok.
pl. a 6 melletti 4 azt jelenti, hogy 1 (az előző csoport) és 6 között 4 szám a C-oszlopban, vagy pl. 13-nál kettő nagyobb van.
5. Ezek az értékek pedig pont a pozitív számok előfordulását jelentik negatív számok között. Így már csak a maximum kell nekünk innen.
6. A végén a téves visszajelzés miatt - ami akkor lehet ha a listában egyetlen pozitív szám sincsen - van egy figyelés (DARABTELI(A:A;">0")=0) és egyből 0-t írunk.üdv
-
Mutt
senior tag
Hello,
Nem aktuális már, de ezért még jól jöhet.
Sub CreateCsv()
Const sorok = 2000 'ennyi soronként szabdalunk
Const utvonal = "c:\Temp\" 'ide mentunk
Dim FileNum As Integer
Dim DestFile As String
Dim vLastRow As Long
Dim c As Long, i As Long, j As Long
Dim ki As String
Const sep = ";" 'a mezők ezzel lesznek elválasztva
Dim formatum As String
'megnézzük hány sorunk van
vLastRow = Range("A" & Rows.Count).End(xlUp).Row
'egy kis csinosítás a fájlban lévő sorszámra, pl. 1 helyett 01-et írunk majd
formatum = String(Len(WorksheetFunction.RoundUp(vLastRow / sorok, 0) & ""), "0")
'változó hogy tudjuk hanyadik fájlt írjuk
c = 1
'változó hogy tudjuk melyik sorban vagyunk
i = 1
Do
DestFile = utvonal & "test" & Format(c, formatum) & ".csv"
FileNum = FreeFile()
'megnyitjuk írásra a fájlt
Open DestFile For Output As #FileNum
Do While i <= sorok * c And i <= vLastRow
'betesszük egy változóba az aktuális sor celláit, a cellák közé a tagolójelet beszúrjuk
ki = ""
For j = 1 To Cells(i, Columns.Count).End(xlToLeft).Column
ki = ki & Cells(i, j) & sep
Next j
'fájlba tesszük a sor tartalmát tagolójellel
Print #FileNum, Left(ki, Len(ki) - Len(sep))
'következő sorra ugrunk
i = i + 1
Loop
'bezárjuk a fájlt
Close FileNum
i = sorok * c + 1
'új fájlra van szükség
c = c + 1
Loop While i <= vLastRow '
End Subüdv
-
Mutt
senior tag
válasz
alfa20 #20934 üzenetére
Hello,
Olyan makrót tudok készíteni ami megkérdezi melyik oszlop(ok)ból szeretném törölni a nullákat és szépen kitörli?
Ezt tudod használni, csak a kijelölt cellában/oszlopban/sorban töröl:
Sub NullaTorles()
Dim rngTartomany As Range
Dim rngAdatok As Range
On Error GoTo NullaTorles_Error
'kérjük be a tartományt
Set rngTartomany = Application.InputBox("Honnan szeretnéd törőlni a nullákat?", "Választás", , , , , , 8)
'szűkítsük csak a használatban lévő részre
Set rngAdatok = Intersect(rngTartomany, ActiveSheet.UsedRange)
If Not rngAdatok Is Nothing Then
Application.ScreenUpdating = False
rngAdatok.Replace What:="0", Replacement:="", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False
Application.ScreenUpdating = True
End If
On Error GoTo 0
Exit Sub
NullaTorles_Error:
MsgBox "Kilépés"
End SubHa további nullákat akarsz keresni, akkor esetleg nézd meg így:
WorksheetFunction.CountIf(ActiveSheet.UsedRange, "=0")üdv
-
Mutt
senior tag
válasz
vilmaboy #20645 üzenetére
Hali,
csferke egy saját függvényt (UDF) osztott meg, amelyet mint az Excel többi függvényét képletként tudsz hsználni. Azonban ehhez a kódot az Excel makrókat tartalmazó lapjára (module) kell másolni.
Alt+F11-et nyomva megnyíilik a beépített visual basic szerkesztő. Ott az Insert menűben található Module-al lehet egy kódlapot nyitni. Erre kell másolni a kódot és a fájlt makróbarát formátumként elmenteni.
Innen letöltheted a minta fájlt.
üdv
-
Mutt
senior tag
válasz
fuli07 #20637 üzenetére
Hello,
...Megvizsgálja hogy a 2 nagyobb mint 1 akkor a hazai csapat cellaértéke 3 ha fordítva akkor nulla ha egyenlő akkor 1.
Kaptál már választ detroitrw-től, de itt van egy alternatív megoldás:
=VÁLASZT(ELŐJEL(A1-B1)+2;0;1;3)...ha nincs eredmény beírva akkor NE vizsgálja...
Erre a részre pedig a SZÁM függvényt lehet felhasználni:
=HA(ÉS(SZÁM(A1);SZÁM(B1));VÁLASZT(ELŐJEL(A1-B1)+2;0;1;3);"")üdv
-
Mutt
senior tag
válasz
alfa20 #20630 üzenetére
Hi,
...az adattáblát tudom használni másik munkafüzetben is vagy csak abban amiben létrehozom az adattáblát?
Hasonló módon működik mint az INDIREKT függvény, vagyis ha megvan nyitva a fájl akkor lehet rá hivatkozni
[Fájlneve.xlsx]Munkalap!Táblázatneve[Mezőnév] formában. Azonban, ha bezárod akkor #HIV hibát fogsz kapni.Ergo nem célszerű munkafüzeten kívül használni.
üdv
-
Mutt
senior tag
válasz
pczinder #20629 üzenetére
Hello,
...lehet az excel munkalapfüleket adott méretben (pp., cm, bármi) megjeleníteni...?
Rossz hír, hogy nem lehet ennyire testreszabni, mindig a lap nevének a hosszúságát veszi fel (max. 31 karakter).
A méretét azonban lehet csökkenteni, ehhez a Windowsban a Képernyő tulajdonságokban a Görgetősáv méretét kell változtatnod.Lépések Win7 alatt:
1. Jobb klikk egy üres részén az asztalnak, Személyre szabás
2. Ablak színe opció
3. Elemek közül a Görgetősávnak a méretét módosítsdüdv
-
Mutt
senior tag
válasz
*Frenszisz* #20600 üzenetére
Hello,
Az alabbiak lehetnek a gondok:
- az eredeti program kikapcsolja az esemenykezeleseket, nezd meg hogy van-e benne Application.Enableevents parancs.
- nem adja vissza a vezerlest a program. Ahol a varakozas meg van adva oda irjal be egy DoEvents parancsot.Mindket esetben hozza kell ferned az eredeti kodhoz, ami azt jelenti hogy akkor mar az eredeti programot egyszerubb lenne kiegesziteni a legkisebb ertek keresesel. A korabban megadott kodban csak aprot kell valtoztatni:
- Target reszt le kell cserelni Range("A1") -re
- az elso If-et hagyd eludv
-
Mutt
senior tag
válasz
*Frenszisz* #20595 üzenetére
Hello,
Szerintem a munkalap Change eseményét használd erre:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
If Target.Value < Range("B1").Value Or IsEmpty(Range("B1").Value) Then Range("B1").Value = Target.Value
End If
End Subüdv
-
Mutt
senior tag
válasz
the radish #20594 üzenetére
Hello,
Két megoldás van:
1. A Style tulajdonságát állítsd át fmStyleDropDownList -re és/vagy
2. A MatchRequired tulajdonságot True-ra.üdv
-
Mutt
senior tag
Hello,
Egy olyan fuggvenyre lenne szuksegem, amivel az excel kepes eldonteni, hogy az 1 flottahoz tartozo kocsik kozul melyiknek a legmagasabb a rendszama.
Ha legalább Excel 2007-et használsz akkor az ÖSSZESÍT függvénnyel megoldható a legnagyobb rendszám keresése (A oszlop flotta, B rendszám, C-E oszlopok dátumok; 5000 sorig múködnek a képletek):
=ÖSSZESÍT(14;6;$B$2:$B$5000/($A$2:$A$5000=A2);1)Bármelyik Excel verzióban pedig az alábbi tömbképlet működik:
{=MAX(HA($A$2:$A$5000=A2;$B$2:$B$5000;))}A fenti képletek vmelyikét választva a calculated cellád képlete:
=HA(csodakeplet=B2;E2-D2;E2-C2)Ha a rendszámod alphanumerikus, akkor ezt tudom javasolni:
=HA(SZORZATÖSSZEG(($A$2:$A$5000=A2)*($B$2:$B$5000>B2))=0;E2-D2;E2-C2)üdv
-
Mutt
senior tag
válasz
the radish #20572 üzenetére
Vmi ilyenre gondoltál?
-
Mutt
senior tag
válasz
Mr. Erikszon #20569 üzenetére
Hello,
20 percnél hosszabb hívások száma:
=DARABTELI(C5:C19;">20")Leghosszabb hívás ideje:
=MAX(C5:C19)Leghosszabb hívás időpontja, itt több egyszerű megoldás van:
=FKERES(MAX(C5:C19);C5:F19;2;0)
=INDEX(D5:D19;HOL.VAN(MAX(C5:C19);C5:C19;0))Költsége:
=FKERES(MAX(C5:C19);C5:F19;4;0)
=INDEX(F5:F19;HOL.VAN(MAX(C5:C19);C5:C19;0))Leggyakrabban használt fülke.
=MÓDUSZ(B5:B19)Vagy tömbképletettel:
=INDEX(B5:B19;HOL.VAN(MAX(DARABTELI(B5:B19;B5:B19));DARABTELI(B5:B19;B5:B19);0))Átlagos beszélgetési idő:
=KEREKÍTÉS(ÁTLAG(C5:C19);1)Medián:
=MEDIÁN(C5:C19)üdv
-
Mutt
senior tag
válasz
Mr. Erikszon #20567 üzenetére
Hello,
Valaki nem tudna segíteni először is abba hogy mire jó a SUM meg az ilyen fontosabb ,parancsok'
Elég tág a kérdés, nem könnyű megválaszolni, de sok könyv és oktató video elérhető az Excel kezdő és haladó használatához. Több mint 400 beépített függvény található az Excelben, ezek különböző csoportba vannak rendezve a könnyebb használat miatt.
Ha az angol nyelv megy, akkor Mike Girvin Youtube csatornáját javaslom, ott is az Excel Basics és Highline Excel videokat. A csatorna címe: http://www.youtube.com/user/ExcelIsFun/videosKezdésnek ezt vagy ezt tudom javasolni.
Magyar nyelven Kovalcsik Géza csatornája vagy ez a fórum tud segíteni.
Sok sikert!
-
Mutt
senior tag
válasz
the radish #20568 üzenetére
Hello,
Létrehoztam egy "userformot", bemásoltam az általad leírtakat, de nem tudom működésre bírni.
A macro-ba kell valami hivatkozás, hogy menjen?A userformot be kell tölteni, majd meg kell jeleníteni. Ezt mind egy modulban, a userformon kívül kell megtenned.
A betöltés elhagyható, csak akkor érdemes külön foglalkozni vele, ha a form elindítása időigényes és nem akarod hogy a felhasználó erre várjon.Tipikusan egy form elindítása így megy:
Sub SajatForm()
UserForm.Show
End SunEkkor a UserForm Initialize eseményében megadott eljárások futnak le és megjelenik a form.
A form bezárása annyiban tér el, hogy a UserForm egyik eleméhez (többnyire egy Bezárás gombhoz) írod, nem pedig egy külön modulba. A bezárás Unload paranccsal megy, el is lehet rejteni a Hide-al, ekkor memórában marad, de nem látható.
Ide felraktam egy egyszerű mintát.
...TextBox1.Text = Format$(Date, "yyyy.mm.dd")
miért csak a mai dátummal tölti ki a cellát amit ráadásul át sem tudok írni.A Date VBA függvény, amit használsz mindig az aktuális dátumot adja meg.
A szövegdonboz vezérlőnek valószínű a locked tulajdonsága True-ra van állítva. Esetleg az Enabled pedig Falsera, ekkor szürke a tartalma.Az egyik nagy hiányosság, hogy alapból nincs olyan vezérlő az Excelben, amely a dátumválasztást segíti. Korábbi változatokban volt egy DatePicker, de az megszűnt, helyette mindenki vmit összerakott és azt használja. Én ezt használom.
üdv
-
Mutt
senior tag
válasz
antikomcsi #20536 üzenetére
Hello,
A SZUMHATÖBB függvényt tudod használni.
J3-ba ez a függvényed:
=SZUMHATÖBB(Adatok!BQ:BQ;Adatok!$A:$A;">="&kezdodatum;Adatok!$A:$A;"<="&végdatum)A kezdődátum képlete:
=DÁTUM($B$15;HOL.VAN($B$17;{"január";"február";"március";"április";"május";"június";"július";"augusztus";"szeptember";"október";"november";"december"};0);1)A végdátumé pedig:
=DÁTUM($B$15;HOL.VAN($B$17;{"január";"február";"március";"április";"május";"június";"július";"augusztus";"szeptember";"október";"november";"december"};0)+1;0)A jobb olvashatóság miatt nem egy hosszú képletként adtam meg, de te nyugodtan beviheted egyben.
üdv.
-
Mutt
senior tag
Hello,
...napi rendszerességgel kell excelben megnyitnom és bizonyos oszlopokat kiszednem...
Ha php, akkor talán az awk -ot is tudnám javasolni. Promptból is futtatható, pl. a fájl 2 és 5 oszlopát így tudod kimenteni:
awk < bemenet.txt '{ print $2, $5 }' > eredmeny.txtHa Excel-ben akarod akkor pedig érdemes lenne makrórögzítővel felvenni a lépéseket és azt használni minden alkalommal.
A 17823-as hozzászólásban van egy általános makró is, amely a fájlt Excelbe olvassa. Azt is megpróbálhatod átalakítani, segítünk ha kell.
üdv
-
Mutt
senior tag
válasz
orkester #20485 üzenetére
Hello,
Viszont ha után a cellából át szeretném másolni a szöveget pl. egy txt-be, akkor az egészet idézőjelek közé teszi.
Van megoldás, hogy ez ne így legyen?Mentésre gondolsz, ugye? Másoláskor nem kerül bele plusz jel.
Mentéskor pedig csak azon sorokat teszi idézőjelek közé, ahol már eleve volt a szövegben.Makró nélkül nem lehet megoldani, hogy ne tegye bele.
üdv
-
Mutt
senior tag
válasz
the radish #20500 üzenetére
Hello,
1. A makró futását követően x ideig ne lehessen újra futtatni, akkor sem, ha újraindítjuk az excelt.
A registryben lehet rögzíteni adatokat a SaveSetting függvénnyel, kiolvasni GetSetting-el lehet, törolni pedig DeleteSetting-el.
Pihi = TimeSerial(0, 30, 0) '30 perc kell 2 futtatás között
'HKEY_CURRENT_USER\Software\VB and VBA Program Settings\ProgiM bejegyzés alatt lesz megtalálható az érték
'kiolvassuk az UtolsóFutás értékét, ha nem létezik akko 0-nak vesszük
'ha eltelt 30 perc akkor futhat, különben hibaüzenetet adunk
If CDate(GetSetting("ProgiM", "Defaults", "UtolsoFutas", 0)) + Pihi < Now Then
'eredeti makró rész jön ide
'mentjük az utolsó futtatás idejét
SaveSetting "ProgiM", "Defaults", "UtolsoFutas", Now
Else
MsgBox ("A makró futtatása még " _
& Format(CDate(GetSetting("ProgiM", "Defaults", "UtolsoFutas")) + Pihi - Now, "N") _
& " percig nem engedélyezett!")
End If2 ...az első vesszőig lévő tartalomra
Makró nélkül is megoldható.=HA(HIBÁS(BAL(A1;SZÖVEG.KERES(",";A1)-1));A1;BAL(A1;SZÖVEG.KERES(",";A1)-1))
A 18684-es hozzászólásban egy függvényt is bemutattam, amely itt is használható.
üdv
-
Mutt
senior tag
válasz
csferke #20436 üzenetére
Hello,
Lehetséges-e PivotTábla adataiból diagramot készíteni?
PivotChart-nak hívják, Youtube-on jópár videó van róla.Alternatív megoldás lehet sima diagram használata, amely dinamikus tartományokból dolgozik.
Ilyet a fórumon már mutattunk be jó 1 éve. Az én példám itt van, de Delila_1 is osztott meg ilyeneket.üdv
-
-
-
Mutt
senior tag
Hello,
Képletekkel nehézkesen oldható meg, de ez nagyjából működik ha Excel2010-ed van.
=INDEX(lista;HOL.VAN(NAGY(GYAKORISÁG(HOL.VAN(lista;lista;0);SOR(lista)-SOR(C2)+1);xxx);GYAKORISÁG(HOL.VAN(lista;lista;0);SOR(lista)-SOR(C2)+1);0))
Ahol
- a lista egy dinamikus tartomány,amelyet a nékezelőben tudsz definiálni az alábbi módon:
=ELTOLÁS(Munka1!$C$2;0;0;DARAB2(Munka1!$C$2:$C$999))
- az xxx pedig az n-edik leggyakoribb kereseztt érték.Azonban a 19478-as hozzászólásban van egy saját függvény, amely sokkal jobban végzi el ezt a feladatot.
üdv
-
Mutt
senior tag
válasz
konyi79 #20381 üzenetére
Hello,
Az alábbi CSE képlettel megoldható (vidd be majd Ctrl+Shift+Enter-t nyomsz és kapcsos zárójelbeteszi):
=INDEX(M!K:K;HOL.VAN(MAX(HA(M!F:F=E!B1;M!A:A;-9^99))&"@"&B1;M!A:A&"@"&M!F:F;0))
A működése az alábbi:
1. HA(M!F:F=E!B1;M!A:A;-9^99) rész az M munkalap F oszlopán megy végig ls ahol az E lap B1 cellájával egyezik ott veszi az M lap A oszlopából a sorban található értéket, ha nincs egyezés akkor egy nagyon kicsi számot (-9e99-et) használ. Mivel az eredmény egy halmaz, már itt használni kell a CSE bevitelt.
2. A kapott halmazból a legnagyobb számot keresi meg a MAX(előbbi képlet).
3. HOL.VAN függvény segítségével megkeressük, hogy az A oszlopban hol van az előbb kapott érték.
4. INDEX segítségével a K oszlopban addig a sorig megyünk el, ahol az A-ban a keresett érték van.Javaslom, hogy a gyorsabb számolás miatt ne a teljes oszlopot vizsgáld, hanem csak annyit amibe biztos beleférsz! pl. A:A helyett A$1:A$20000 legyen ha nem vársz 20000-nél több adatot.
üdv
-
Mutt
senior tag
válasz
mokus1 #20422 üzenetére
Hello,
...amivel súlyozott átlagot tudok számolni...
SZORZATÖSSZEG és a SZUM függvények kellenek neked.
pl. számok az A-oszlopban, szorzók a B-ben
=SZORZATÖSSZEG(A:A;B:B)/SZUM(B:B)...egy excel dokumentum amiből majd szeretném a képleteket a többi munkalapra másolni az értékek megtartásával....
A cella értéke a képletben használt változóktól függ, ha a változók rögzítve vannak akkor a képlet másolásakor a rögzített értékek nem változnak. Ha munkalapok között másolsz, akkor a cella hivatkozáskor a munkalap nevét is add meg.
pl.=SZORZATÖSSZEG(Munka1!A:A;B:B) képlet esetén mindig a munka1 lap A-oszlopának elemeit szorozza meg az aktuális lap B-oszlopával.Ha arra gondoltál, hogy a képlet eredményét akarod egy másik lapra másolni, akkor a beillesztés helyett az irányított beillesztés kell. Értékek beillesztése opció, a képleted ilyenkor elveszik a cél cellában.
üdv
-
Mutt
senior tag
válasz
the radish #20380 üzenetére
Hello,
Meg lehet azt oldani, hogy a helyette függvénnyel két, vagy több szót is kicseréljek egy menetben?
Saját függvénnyel megoldható.
Public Function Cserek(bemenet, ParamArray keres())
Dim i As Long
Cserek = bemenet
For i = LBound(keres) To UBound(keres) Step 2
Cserek = WorksheetFunction.Substitute(Cserek, keres(i), keres(i + 1))
Next i
End Function.Használata: =Cserek("56 alma 64 banán";"alma";"magyar";"banán";"déli")
Termeszetesen cella hivatkozásokat is használhatsz. Ha páratlanul adod meg a szövegpárokat, akkor hibára fut!
üdv
-
Mutt
senior tag
válasz
AttyVin #20265 üzenetére
Hello,
Makró nélkül megoldható-e, hogy egy adott munkafüzet valamelyik cellájának tartalmát automatikusan másolja át a program egy másik munkafüzet meghatározott cellájába?
Ha a linkelés/hivatkozás is jó neked, akkor igen.
A lényeg, hogy a másik füzetbe be kell írnod, hogy az értéke az első füzet adott cellájával egyelő.
Ez automatikusan frissül, amíg a hivatkozás érvényes marad.Ha értéket akarsz másolni, akkor csak makróval lehet automatikusan megtenni.
üdv
-
Mutt
senior tag
válasz
Térközjelző #20240 üzenetére
Hello,
Delila_1 javaslatai után én is bedobom a változatomat.
Letölthető innen.Lehet még rajta csiszolni. Sárgával kiemelt mezők segédszámítások.
Mivel az INDIREKT függvény csak megnyitott fájlokon működik, ezért én egy segédtáblába linkeltem be a menetrendeket. A 21, 21A, 32-es menetrendek egymás alatt vannak eredeti formában.
üdv
-
Mutt
senior tag
-
Mutt
senior tag
Szia,
...kereshető adatbázis valami javás dolog...
Megnéztem a linket és mivel az URL nem tartalmazza a keresett kulcsszót, hanem csak a dokumentum azonosítót, ezért csak az a megoldás járható hogy készítesz egy segédtáblát amelyben a szabvány száma és a dokumentum id szerepel.
A linkben a portlet_ref= után van a dokumentum id (pl. 060001).
Az alábbi UDF a dokumentum idhez tartozó szabvány számot adja vissza:
Function GrabWebData(URI As String)
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
With IE
.Visible = False
.Navigate URI
Do Until .ReadyState = 4: DoEvents: Loop
x = .Document.body.innertext
x = Replace(x, Chr(10), Chr(13))
x = Split(x, "Hivatkozási szám")
If UBound(x) < 2 Then Exit Function
y = Split(x(2), Chr(13))
.Quit
End With
If Len(y(0)) > 0 Then
GrabWebData = y(0)
Else
GrabWebData = ""
End If
End FunctionMost már csak a fenti függvényt kell egy ciklusba tenni, hogy a lehetséges dokumentum azonosítókon végigmenjen és meg lesz a segédtáblád.
üdv
ps. A ciklus leterhelheti a szervert, ezért óvatosan vele!
-
Mutt
senior tag
válasz
vigyori78 #20238 üzenetére
Hello,
...animált gif-et valamilyen módon hozzá lehet adni ?
Csak ActiveX vezérlőn keresztül lehet megoldani.
http://en.kioskea.net/faq/1402-inserting-an-animated-gif-in-excelüdv
-
Mutt
senior tag
válasz
the radish #20176 üzenetére
Hello,
... "X" ... legyen mondjuk a munka1 A1 celllában.
MyNote = "Helyezz a nyomtatóba " & Sheets("Munka1").Range("A1") & " papírt!"
üdv
-
Mutt
senior tag
válasz
BenJoe80 #20150 üzenetére
Megnézem ha akarod, de az Excelben a szum függvények, mindig 1 tartományt összegeznek.
Vagyis 2x kell használnod ugyanazt a képletet, csak az összegző tartományokban lesz eltérés.2007 előtt több feltételre való szűrést csak SZORZATÖSSZEG-el vagy CSE függvénnyel lehet eléni.
Nagyjából ez lenne az elképzelés: [Tartomány1 ÉS Tartomány2];kritérium;[Összeg1 ÉS Összeg2]
A fenti logikára ez a CSE képlet van:
{=SZUM(HA(Tartomány1&Tartomány2=kritérium&kritérium;VÁLASZT({1\2};Összeg1;Összeg2);))} -
Mutt
senior tag
válasz
Térközjelző #20120 üzenetére
Hello,
2007 vagy újabb Excelben a DARABHATÖBB függvény tud segíteni.
A képlet pl. 5-10 km közötti futások esetén:
=DARABHATÖBB(L:L;L:L;">=5";L:L;"<10")5 km-ig illettve 100 felett, pedig egyszerűen:
=DARABTELI(L:L;"<5") és =DARABTELI(L:L;">=100")Régebbi Excel verziókban a DARABHATÖBB helyett SZORZATÖSSZEG-gel fog műkődni:
=SZORZATÖSSZEG(--(L:L>=5);--(L:L<10))üdv.
-
Mutt
senior tag
válasz
nzsolt74 #20112 üzenetére
Hello,
...Az első oszlop 14 soronként ugyanaz, ezekből szeretnék egy új lapon 14 oszlopot fejléccel...
Makrós megoldásod van már, de ezt képletekkel is el lehet érni, mivel az adatod struktúrált.
A lényeg, hogy az új lapodon a második sorban a Név mezőbe a másik lap 1 sorát, a 15-et, a 29-et stb. kell kiíratni.
Ez az alábbi logikával írható le: 14*{0;1;2;3..}+1
Excelben a képleted: =14*(SOR()-2)+1 (2-t kell kivonnunk mert az elsőben fejléc van már)A születési idő a 2, 16, 30 stb. sorokban van, ahol a képlet a fentiektől csak annyiban tér el, hogy nem 1-et, hanem mindig 2-t kell adni az elsőrészhez.
Mivel a név az első oszlopban van, a születési idő a másodikban (és így tovább), ezért ha használjuk az OSZLOP függvényt akkor nem kell nekünk megadni, hogy egyik esetben 1-et, a másikban 2-t stb. kell hozzádni. Vagyis az univerzális képlet: =14*(SOR()-2)+OSZLOP()
Már csak cella hivatkozás kell, amelyre az INDIREKT függvény szolgál.
A végső képlet tehát: =INDIREKT("Masiklap!B"&14*(SOR()-2)+OSZLOP())Ezt másold le jó sokszor, hogy biztos lefedd a másik lapon összes sorát (10000 sor esetén elgé 715 sorba).
A képlet ott ahol üres a cella 0-t fog kírni, ezt el tudod tüntetni ha vizsgálod a SZÖVEG.E függvénnyel, hogy kaptál-e adatot vissza.
üdv.
-
Mutt
senior tag
-
Mutt
senior tag
válasz
BenJoe80 #20082 üzenetére
Szia,
Viszont azt nem tudom elérni, hogy ne csak a készpénz számla tartományát (E5:E35), hanem a bankszámlaszám tartományát (L5:L35) is vizsgálja.
Szerintem 2 SZUMHA kell neked, mivel nem egysoron belül akarod a 2 ellenőrzést:
=SZUMHA($E$5:$E$35;$B$5:$B$35;1000)+SZUMHA($L$5:$L$35;$I$5:$I$35;1000)
Ha mégis azt kell összesíteni amikor egy sorban mind a B, mind az I oszlopban mondjuk 1000 van, akkor
SZORZATÖSSZEG tud segíteni neked SZUMHATÖBB hiányában. Ebből is kettő lesz, különben az összegeket összeszorozná és nem szummázná:
=SZORZATÖSSZEG(--($B$5:$B$35=1000);--($I$5:$I$35=1000);$E$5:$E$35)+SZORZATÖSSZEG(--($B$5:$B$35=1000);--($I$5:$I$35=1000);$L$5:$L$35)Vagy egy nem szebb CSE függvény is ugyenerre jut:
{=SZUM(IF($B$5:$B$35=1000;HA($I$5:$I$35;$E$5:$E$35;0);0);IF($B$5:$B$35=1000;HA($I$5:$I$35;$L$5:$L$35;0);0))}üdv
-
Mutt
senior tag
válasz
Gandalf80 #20069 üzenetére
Hello,
..A oszlopban dátumok vannak...terjedö idöszakban számolja össze az adatokat. De ezt úgy,h két külön cellàba adom meg a kezdö és végdàtumot.
Ugyanazt a tartományt többször is felhasználhatod szűrési feltételenek, ha pl. a B-oszlopot akarod összeszámolni és a kezdődátum D1-ben, a végdátum E1-ben van, akkor:
=SZUMHATÖBB(B:B;A:A;">="&D1;A:A;"<="&E1)üdv.
-
Mutt
senior tag
válasz
kekec@ #20061 üzenetére
Hello,
Excel és Outlook összehangolására a legjobb oldal sok esettel és mintával ez:
http://www.rondebruin.nl/win/section1.htmüdv.
-
Mutt
senior tag
Hali,
..menjen végig az oszlop minden elemén a kiolvasás de csak a ":"-ig tartalmazó részt olvassa be és írja egy másik cellába...
Igazából makró nélkül függvénnyel is meg lehet oldalni, de itt makrós megoldás, amely a kijeltölt oszlopon megy végig és teszi tőle 2-vel jobbra az értékeket (ha nincs kettőspont a szövegben, akkor az eredeti szöveget másolja):
Sub KettosPont()
Dim rngAdatsor As Range
Dim cella As Range
Dim Szetvalaszt 'ebben a tömben tároljuk a tagolt eredményt
Const eltolas As Long = 2 'ennyivel jobbra lesz az eredmény
'a kijelölés és a használt cellák metszetén fogunk végig menni
Set rngAdatsor = Intersect(Selection, Selection.Parent.UsedRange)
For Each cella In rngAdatsor
'csak ha van adat a cellában, akkor célszerű feldolgozni
If Len(cella) > 0 Then
Szetvalaszt = Split(cella, ":")
cella.Offset(, eltolas).Value = Szetvalaszt(0)
End If
Next cella
End Subüdv
-
Mutt
senior tag
válasz
csferke #20059 üzenetére
Hello,
..D oszlop celláit szeretném feltételes formázással színezni.. ha nem üres és tartalma (dátum) kisebb (régebbi) mint a mai nap...
Az ISBLANK függvénnyel tudod megnézni, hogy a cella üres-e. Mivel neked nem az üres kell, ezért a NOT függvénybe ágyazva a nem üres cellákra fog igazat adni.
A következő lépés már csak, hogy akkor teljesüljön a formázás ha mindkét feltétel igaz. Ebben az AND függvény tud segíteni, mert csak akkor ad vissza igazat, ha minden paramétere igaz.A feltételes formázásánál a fentiek alapján így alakul a képleted:
=AND(NOT(ISBLANK(D1));D1<TODAY())(Ha azt akarod, hogy mondjuk az első 2 sor semmiképp ne legyen kiszínezve, mert ott fejléc van, akkor erre bővítheted: =AND(NOT(ISBLANK(D1));D1<TODAY();ROW()>2)
üdv.
-
Mutt
senior tag
Hello,
Megkésve, de vmi ilyen kóddal lehet automatizálni a feladatot.
Sub Masol()
Dim rngForras As Range
Dim wsTarget As Worksheet
'kijelöljük a forrás lapot
Set rngForras = ActiveSheet.Cells
'ha csak az aktuális tartomány kell akkor
'Set rngForras = ActiveSheet.Cells.CurrentRegion
'új lapot hozunk létre
Set wsTarget = ThisWorkbook.Worksheets.Add(after:=Worksheets(Worksheets.Count))
'másoljuk a forrást az új helyre
rngForras.Copy
With wsTarget
Application.ScreenUpdating = False
Dim vLastRow
Dim i As Long
Const DataCol As String = "C"
Const StartRow = 2
'beíllesztjük a forrást
.Paste
'kikeressük az utolsó sort
vLastRow = .Cells(.Rows.Count, DataCol).End(xlUp).Row
'beszúrás előtt számoljuk az F és G oszlop különbségét és M oszlopba tesszük, hasonló módon N-be is tudod tenni
.Range("M" & StartRow).Resize(vLastRow - StartRow + 1).FormulaR1C1 = "=RC[-7]-RC[-8]"
'a képleteket számmá alakítjuk
.Range("M" & StartRow).Resize(vLastRow - StartRow + 1) = .Range("M" & StartRow).Resize(vLastRow - StartRow).Value
'elindutjuk a keresést alulról felfelé menve
For i = vLastRow To 2 Step -1
'ha nem egyezik, akkor beszúrunk egy sort
If .Cells(i, DataCol).Value <> .Cells(i - 1, DataCol).Value Then
.Rows(i).Insert
'a számlálót is frissítenünk kell mert eggyel több sorunk lett
i = i - 1
End If
Next i
Application.ScreenUpdating = True
End With
End Subüdv.
-
Mutt
senior tag
válasz
nimmy001 #20066 üzenetére
Hali,
Felraktam ide egy Worksheet eseményeken alapuló mintát. Gyakorlatban nem próbáltam, de többfelhasználósan is múködhet.
Itt mindenkinek van egy lapja (saját névvel), ahova a fájl megnyitásakor a rendszer be is rakja; más munkalapjait nem láthatja a felhasználó. Továbbá van egy közös lap, ahol most egy egyszerú számítás és grafikon van.A másik példa már összetettebb, mert egy UserForm-ot használ és rejtett lapokról szedi/teszi az adatokat. Ez többfelhasználós környezetben rendesen működik, de sokkal bonyolultabb is.
üdv.
-
Mutt
senior tag
válasz
Mittu88 #20049 üzenetére
Hello,
Ezt használd az eseményben
Dim cbHiba As Boolean
Dim rngAdatsor As Range
Dim cella As Range
Set rngAdatsor = Worksheets("Igénylő").Range("B12:B15")
cbHiba = False
For Each cella In rngAdatsor
'ha a cella nem üres, akkor 4-el jobbra tőle is megnézzük a cellát
If Len(cella) > 0 Then
If Len(cella.Offset(, 4)) = 0 Then
'ha nincs kitöltve, akkor kilépünk
cbHiba = True
Exit For
End If
End If
Next cella
If cbHiba Then
MsgBox ("Add meg a fogadóállást a " & cella.Offset(, 4).Address & " cellában!")
Cancel = True
End Ifüdv
-
Mutt
senior tag
válasz
vigyori78 #20029 üzenetére
Hello,
...ha az olvasásra nyomok akkor kérje a jelszót tehát egyből lehessen választani hogy mire akarom megnyitni...
Szerintem olvasásra jelszavazd csak le a fájlt, hogy csak azok tudják megnyitni akik jogosultak rá.
Az írás részt pedig a munkalap/füzet védelemmel oldhatod meg (Korrektúra szalag).Csak makróval lesz interaktív, a Workbook_Open eseménynél be lehet kérni a lapvédelemhez kapcsolódó jelszót. A Workbook_BeforeClose előtt pedig vissza lehet zárni.
üdv
-
Mutt
senior tag
válasz
Sub-ZeRo #20008 üzenetére
Szia,
Olyan szűrés kellene nekem, ami ebből kiszűri, hogy mondjuk 2014.02.01-én melyek "járnak le" szóval amik csak addig érvényesek.
Én egy feltételes formázást javasolok, amelynél legalább a cellák színét változtatjuk meg. Utána már a többiek által említett szűrést lehet használni.
1. Legyen vhol a lapon egy cellába a lejárati dátum megadva (pl. E2).
2. Jelöld ki a táblát és a Kezdőlap szalagon válaszd a Feltételes formázást, azon belül az új szabályt.
Ott válaszd az utolsó opciót (Formázandó cellák kijelölése képlettel), a képlet pedig:
=ÉS($C1<=$E$2;NEM(ÜRES($C1)))Itt 2 dolgon módosíthatsz:
- ha nem E2-ben van a lejárati dátumod akkor módosítsd; fontos hogy a cella hivatkozásban dollárjelet tegyél az oszlop és a sorszám elé (ún. abszolút hivatkozás kell),
- ha nem a C oszlopban van a végdátum akkor javítsd, itt csak az oszlop név elé kell dollárjel (vegyes hivatkozás),A Formátum gombra válaszd ki, hogy hogy nézzen ki ami már lejárt (nálam áthúzott szöveg piros háttérrel).
3. Ok után kész is van.
4. Jöhet egy szűrő a táblára, jelöld ki a táblát és Kezdőlapon Rendezés és szűrésben a Szűrő opció. Ezek után ha van kiszínezett sorod, akkor lehet arra is szűrni.
üdv
-
Mutt
senior tag
válasz
Wollie #19998 üzenetére
Hello,
Olyan feladatom van, hogy egy oszlopban szereplő szövegek "féleségét" kell megszámolnom...
Egyedi rekordok számolására több megoldás is van.
1. Képlet
Delila1 által megadott szorzatösszeges képlet jó. Ugyanez CSE képlettel:
{=SZUM(1/DARABTELI(tartomany;tartomany))}Ha a tartományban van üres cella, akkor az ezt kezelő képlet a következő:
=SZUM(HAHIBA(1/DARABTELI(tartomany;tartomany);1/DARABÜRES(tartomany)))2. Pivot (Kimutatás) használata
3. Addin használata
Számos kiegészítő van, amelyben készen van erre megoldás. pl. Az ingyenes ASAP utilitiesben megtalálható.
4. Saját makró használata
Function Egyedi(Adatsor As Range, Optional UresCellaIsKell As Boolean = True)
Dim vLista As New Collection
Dim cella As Range
On Error Resume Next
For Each cella In Adatsor
If UresCellaIsKell Then
vLista.Add cella, CStr(cella)
Else
If Len(cella) > 0 Then vLista.Add cella, CStr(cella)
End If
Next cella
On Error GoTo 0
Egyedi = vLista.Count
End Functionüdv
-
Mutt
senior tag
válasz
the radish #20018 üzenetére
Hello,
A SZUMHA függvényben használhatóak a joker karakterek (* tetszőleges számú karaktert, a ? egy karaktert tud helyettesíteni).
A képleted tehát: =SZUMHA(A:A;"Horváth*";B:B)
Ha pedig az első szöközig van a keresési kifejezésed, akkor: =SZUMHA(A:A;BAL(A1;SZÖVEG.KERES(" ";A1))&"*";B:B)
üdv
-
Mutt
senior tag
Makró nélkül az alábbi módon lehet egy könyvtár tartalmát listázni.
1. Névkezelőben egy új nevet hozzál létre (pl. Lista).
Hivatkozásnak ezt add meg =FÁJLOK(Munka1!A1)
2. A Munka1 lapon az A1 cellába írj be egy elérési útvonalat, pl: c:\Dokumentumok
Használhatsz szűrést is pl. c:\Dokumentumok\*.xls*
3. B-oszlopba írd be ezt és húzd le: =HAHIBA(INDEX(Lista;SOR());"")Annyi csalás van, hogy valójában makrót használunk ezért makróbarát füzetként kell mentened a fájlt.
A FÁJLOK valójában egy régi makró (Excel4).
Innen lehet leírásokat letölteni.üdv
-
Mutt
senior tag
válasz
exceltanulo #19958 üzenetére
Hello,
A képleted így lesz jó:
=INDIREKT("'["&A3&".xlsx]A4'!B2")Azonban az INDREKT függvény bezárt fájlokon nem működik, ilyenkor #HIV hibaüzenet jelenik meg.
Megoldás lehet, hogy makróval állítod elő a hivatkozást, amely bezárt fájlokon is működik,
Sub hivatkozik()
Application.DisplayAlerts = False
For i = 1 To 30
Range("A" & i).Formula = "='[" & i & ".xlsx]A4'!B2"
Next i
Application.DisplayAlerts = True
End Subüdv
-
Mutt
senior tag
válasz
nimmy001 #19902 üzenetére
Hello,
Nem erőssége az Excelnek a collaboration, ezért jó eredményt nem fogsz tudni elérni.
Ha nagyon desktop Excel kell, akkor
- esetedben a sheet protect-unprotect nem fog működni,
- vagy minden felhasználónak létrehozol egy dedikált lapot ahova írhat és onnan kóddal másolod a végső helyére az értékeket (a Worksheet_Deactivate() eseménnyel meg tudod akadályozni, hogy elmászkoljon),
- vagy létrehozol egy beviteli űrlapot (userform) és azon keresztül töltöd az adatokat és
- a kimeneti eredményt egy olyan lapon kell megjelenítened, amely csak hivatkozik az adatokra de nem ott vannak (pl. első munkalapra viszik be az adatokat a felhasználók, amelyet te a másodikon pl. sorbarendezel és a harmadikon formázva megjelenítesz, ekkor a második lap lehet rejtett, a harmadik lap pedig zárolt).Ha van lehetőség, akkor Accessben már jobb eredmény érhető el, mert ott a több felhasználó és a jogosultság jobban van kezelve. Továbbá kevésbé sérülékeny a fájl, hátrány hogy kevesebb vizuális eszköz van.
üdv
-
Mutt
senior tag
válasz
tPedro_ #19901 üzenetére
Hello,
Én is Excel táblát javaslok a pivothoz ha az adatok folyamatosan változnak, mert ilyenkor az Excel automatikusan növeli/csökkenti az adatforrás tartományát.
Azonban ha mégsem Excel táblával akarod megoldani, akkor dinamikus tartománnyal is elérhető ugyanez. Dinamikus tartományt az OFSZET (2010-től ELTOLÁS) függvénnyel tudsz létrehozni.
Az alábbi előnyei vannak:
- korábbi Excel verziókban is elérhető,
- ha ugyanaz a tartománya több pivot táblának akkor közös pivotcache-t használ és ez ritkán nem előnyös: viszont ha több név alatt definiálod ugyanazt a dinamikus tartományt, akkor ezek független cache-be kerülnek.üdv
-
Mutt
senior tag
válasz
bandus #19898 üzenetére
Hello,
Használd ezt a függvényt, amely a hét kezdetét adja vissza (ha nem hétfővel akarod kezdeni akkor a vbMonday-t módosítsd a kívántra).
Function HetiDatum(ev As Long, het As Long) As Date
'előállítjuk a megadott év január 1-ét, majd korrigáljuk a legközelebbi hétfőre és hozzádjuk az eltelt napokat
HetiDatum = DateSerial(ev, 1, 1) - (Weekday(DateSerial(ev, 1, 1), vbMonday) - 1) + (het - 1) * 7
End FunctionA többi napot megkapod ha 1-et, 2-öt stb adsz hozzá.
üdv
-
Mutt
senior tag
Hello,
1. A B-oszlopban a dátum van vagy "XYZ"?
Az IF részben egyszer szöveget, keresel másszor dátumot.
2. A Format-os rész Datediff függvénnyel helyettesítendő.
3. Now helyett Date adja meg az aktuális dátumot.
4. Hátulról kell kezdeni a tőrlést.
5. Select-et érdemes mellőzni.Itt az én változatom (A-oszlopban dátum, B-ben szöveg):
If Menu.CheckBoxDateRangeFilter.Value = True Then
lastrow = Cells.Find(what:="*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
Do
If (Cells(lastrow, "B").Value <> "" And Cells(lastrow, "B").Value <> "XYZ") _
Or DateDiff("d", Date, Cells(lastrow, "A").Value) > Menu.TextBoxDaysAfter.Value Then
Rows(lastrow).Delete
End If
lastrow = lastrow - 1
Loop Until lastrow = 1
End IfAmi nem volt tiszta, hogy igazából mely sorokat kell törölni, a fenti kód azokat tőrli ahol
- van szöveg a B-ben és az nem XYZ (üres szöveges sorokat meghagyja)
- és ahol a dátum kívül van a megadott napokon.üdv.
-
Mutt
senior tag
válasz
cube70 #19878 üzenetére
Hello,
Próbáld ki a képletet a munkalapon vhol egy cellába beírva, hogy lásd milyen eredményt ad.
Ha így működik, akkor nem a képlettel van a hiba.A megadott képlet a H7-es cella formázására van, tehát előbb odavidd be és onnan terjeszd ki, hogy mely cellákra legyen érvényes. (Az Excel a feltételes formázásokban is használja a relatív és abszolút hivatkozásokat, de ha egy másik cella formázását nézed, akkor is az eredeti celláét mutatja. pl. K12-es cellánál is a H7-et fogja kiírni, de közben valójában a K12-essel számol.)
Próbálj meg egy mintát átküldeni és ránézünk, hogy mi lehet a gond.
üdv
-
Mutt
senior tag
válasz
Dark Archon #19868 üzenetére
Hello,
Adatfeliratokhoz javaslom az ingyenes XY Chart labeler-t, innen letölthető.
Excel 2013-ban ez a program felesleges, a Diagrameszközök->Tervezés->Diagram-összetevők hozzáadása->Adatfeliratok panelon külön tartomány adható az egyedi feliratoknak.
Hogy 128-al kezdődjön és 128,300-al végződjön a grafikon, ehhez 2 megoldás:
1. Marad a vonal diagram és az adasorod elé 128-at, mögé 128,3-at felveszed. Y értéknek pedig HIÁNYZIK-ot adsz.
2. XY diagramra állsz át (ekkor lépésközök helyesek lesznek). Kell 2 új adatsor is és az XY chart labelerer.Itt vannak a minták.
üdv
-
Mutt
senior tag
válasz
cube70 #19869 üzenetére
Hello,
Próbáld ki az alábbi feltételes formázást:
=DARABTELI(ELTOLÁS(H7;0;0;1;7);"*i*")=0Táppénz rövidítés nincs a példában, de a lényeg, hogy az ELTOLÁS függvénnyel egy 7 elemes tömböt hozunk létre mindig és megszámoljuk, hogy ebben hány esetben i-betüt tartalmazó cella.
Ha 7 napból 0 volt pihenő akkor van gond.A kiszinezés nem az egész hetet fogja kijelölni, hanem csak azt a kezdőnapot amitől jobbra 7 cellán belül nincs pihi.
üdv
-
Mutt
senior tag
válasz
Gandalf80 #19835 üzenetére
Hello,
2. Feladat:
Van-e arra mód, hogyha valaki áll egy cellába, akkor az adott sor színes legyen?Erre nem láttam még választ, de itt van pár lehetőség. A minta fájl letöltethető innen.
1. Tisztán VBA-val vhogy így megoldható:
Private korabbi As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim kijelol As Range
'elég csak 1 oszlopot megjegyeznünk
Set kijelol = Target.Resize(, 1)
'ha még nincs mit eltüntetni, akkor csak szinezünk
If korabbi Is Nothing Then
kijelol.EntireRow.Interior.Color = RGB(127, 127, 127)
Else
korabbi.EntireRow.Interior.Pattern = xlNone
kijelol.EntireRow.Interior.Color = RGB(127, 127, 127)
End If
Set korabbi = kijelol
End SubA kód a kijelölt sorokat átszinezi, ezért ha eleve ki van szinezve az adatsor, akkor ez elrontja azt.
2. Feltételes formázás
Ehhez kell egy rövid kód:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'válassz a lapon egy üres cellát, ahol tárolhatjuk az aktuális sor számát
Range("G1") = ActiveCell.Row
End SubHa ez megvan, akkor már csak egy feltételes formázást kell beállítani.
3. Add-in használata
A Kutools tud ilyet.üdv
-
Mutt
senior tag
válasz
the radish #19859 üzenetére
Hello,
Azaz a B oszlopban is csak addig az celláig legyen SZUM érték, ameddig a C oszlopban is van érték.
Delila_1 megoldása mellett ez is működik:
=SZUM(ELTOLÁS(B1;0;0;ÖSSZESÍT(15;6;SOR(C:C)/ÜRES(C:C);1)-1))C-oszlop első üres mezőjéig összesíti a B-oszlopot.
üdv
-
Mutt
senior tag
Hello,
Az eltolas elso parameterenek cellat kell megadni, a KICSI fuggveny szamot ad vissza es nem cellat. Az INDIREKT vagy INDEX fuggvennyel tudsz igazi hivatkozast eloallitani. A -6 -al nincs gond, addig ha lehet ennyit balra menni, vagyis legalabb a G oszlopbol kell indulni.
Udv
-
Mutt
senior tag
válasz
ngabor2 #19779 üzenetére
Hello,
Függvénnyel nem oldható meg.
Ha 2010-es Exceled van, akkor feltételes formázással meg tudod színnel jeleníteni, hogy mely adat ismétlődik a többi táblázatban. A DARABTELI függvény segít ebben. A jelölésre pedig tudsz szűrni és törölni.
A makróhoz kellene egy minta. A 1+3 táblázat egy lapon van? Automatikusan kell futnia?
üdv
-
Mutt
senior tag
válasz
Metathrone #19778 üzenetére
Set tbl = Cells.CurrentRegion
tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, tbl.Columns.Count).select -
Mutt
senior tag
válasz
T.Lacci #19775 üzenetére
Hello,
A makrót fel tudod gyorsítani a következőkkel:
1. képérnyőfrissítés kikapcsolása (ScreenUpdating)
2. események letiltása (EnableEvents)
3. objektumok létrehozása (Set parancs)
4. változók definiálása konkrét típussal (Variant mellőzése)
5. beépített függvények használata (pl. Sum egy saját összegzés helyett)
6. üres cellák ignorálásaEgy 100 ezer darabos halmazon futtattam a különböző variációkat az eredmények:
Könnyedén gyorsítható tehát az első 2 opcióval.
Sub Szorzas()
Dim tartomany As Range, cella As Range, szorzo As Double
Set tartomany = Range("D2:D" & Range("D" & Rows.Count).End(xlUp).Row)
Application.EnableEvents = False
Application.ScreenUpdating = False
For Each cella In tartomany
'Feltételek megdása
Select Case cella.Value
Case 1 To 10000
szorzo = 1.4
Case 10001 To 20000
szorzo = 1.3
Case 20001 To 30000
szorzo = 1.2
Case Else
szorzo = 0.9
End Select
'Szorzat beírása az E oszlopba
Cells(cella.Row, "E") = cella.Value * szorzo
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
End SubA függvényest pedig a 19740-es hozzászólásban találod.
üdv
-
Mutt
senior tag
válasz
Metathrone #19776 üzenetére
Cells.CurrentRegion.Select
-
Mutt
senior tag
válasz
Metathrone #19759 üzenetére
Hello,
Az ilyen feladat tipikusan a lap Change eseményével oldható meg.
Jobb klikk a lapon és "Kód megjelenítése" opcióval a laphoz rendelhetsz makrót. A lenti kódot másold be.Annyi pluszt tettem bele hogy ha üres a cella akkor mellőle kiveszi a dátumot.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
'csak a második, a B-oszlop esetén fusson
If Target.Column = 2 Then
'ha egyszerre több cella keül módosításra,
'akkor egyenként végigpörgetjük őket
For Each cell In Target
'ha nem üres akkor jobbra 1-el aktuális dátum, különben töröljük
If cell.Value <> "" Then
cell.Offset(, 1).Value = Date
Else
cell.Offset(, 1).Value = ""
End If
Next cell
End If
End Subüdv
-
Mutt
senior tag
válasz
T.Lacci #19737 üzenetére
Hello,
Különben az miért van hogy nem teljesen pontosan számol? (1000 x 1,4 = 1,399999999)
A kapott makróban a szorzo változót Single típusról Double típusra állítsd át.
...a táblázatomnak szöveges fejléce van...
A For sor = 1 To usor részben az 1-est írd át 2-re (vagy arra a sorra ahonnan a számok kezdődnek).
Az eredeti feladat nem követel makrót, akár egy FKERES segítségével is megoldható.
pl. E1-be: =D1*FKERES(D1;{0\1,4;10001\1,3;20001\1,2;30001\1,1};2)Itt a kapcsos zárójelekben van a keresési tartomány, 0 és 10000 között 1,4-et talál meg, 10001 felett 1,3-at és így tovább,
Ha mégis makró kell, akkor itt van egy gyorsabb:
Sub Szorzas2()
Dim rng As Range
'kiválasztjuk a csak számokat tartalmazó cellákat a D-oszlopban
Set rng = Columns("D").SpecialCells(xlCellTypeConstants, xlNumbers)
'jobbra tőlük számoljuk az új értéket; fkeres hasonló mint fent de a vba miatt máshogy kell megadni
rng.Offset(, 1).FormulaR1C1 = "=RC[-1]*VLOOKUP(RC[-1],{0,1.4;10001,1.3;20001,1.2;30001,1.1},2)"
'értékeket bemásoljuk
Columns("E").Copy
Columns("E").PasteSpecial (xlPasteValues)
Application.CutCopyMode = False
End Subüdv
-
Mutt
senior tag
válasz
Mittu88 #19539 üzenetére
Hello,
Kiegészítheted a korábbi makrót ezzel a sorral.
Worksheets("masik lap").Columns("A:D").AutoFilter Field:=1, Criteria1:=Range(cella).Value
Így lefut a szűrés minden alkalommal.
A gond, hogy pont emiatt erőforrás pazarló, ezért egy kicsit lehet hangolni rajta:
Dim EredetiErtek
Const cella As String = "A2"
Private Sub Worksheet_Calculate()
'kikapcsoljuk az eseménykezelést, mivel a következősor újabb eseményt (change) indítana el
Application.EnableEvents = False
'értéket másolunk eggyel a keresett cella alá
Range(cella).Offset(1).Value = Range(cella).Value
'eseménykezelést visszakapcsoljuk
Application.EnableEvents = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
'csak akkor engedjük futni a szűrést, ha változott a szűrési feltétel
If EredetiErtek <> Range(cella).Value Then
Worksheets("UDF").Columns("A:D").AutoFilter Field:=1, Criteria1:=Range(cella).Value
EredetiErtek = Range(cella).Value
End If
End Subüdv
-
Mutt
senior tag
válasz
Simba86 #19530 üzenetére
Hali,
A3-ban a képlet:
=C3/(1+$C$1)+D3/(1+$D$1)+E3/(1+$E$1)
B3-ban pedig:
=SZUM(C3:E3)-A3A képlet a nettóérték számításhoz nem a szorzásos változatot használja (mivel a szorzószám csak közelítőértékként van többnyire megadva) hanem az osztásost. Az első sorban rögzítve vannak az áfa kulcsok, így a képlet tud rájuk hivatkozni.
A nettóértéket kiszámolva az áfa már könnyen számolható a bruttóból kivonva.Esetleg az A3-ra egy kerekítést dobhatsz.
üdv
-
Mutt
senior tag
válasz
chris76 #19483 üzenetére
Hello,
Alapból nincs ilyen funkció az Excelben de lehet ilyet csinálni függvénnyekkel vagy makróval, illetve használni mások által készített programokat.
Itt van pár progi:
http://www.formulasoft.com/excel-compare.html
http://winmerge.org/downloads/ , kell hozzá a xdocdiff plugin is
http://www.suntrap-systems.com/ExcelDiff/
http://www.xlcomparator.net/
http://www.florencesoft.com/excel-differences-download.htmlEgyiket sem ismerem, ezért alaposan nézd meg őket.
üdv.
-
Mutt
senior tag
válasz
n0rbert0 #19490 üzenetére
Hello,
Tudnál mintát is mutatni?
A gondom, ha jól értem a kérdést, hogy a 31-114 tartomány 0-100 közötti egész számokkal nem képezhető le, mivel a sokaságuk nem azonos (81 vs 101). Ha azonos sokaság lenne, akkor egyszerű lenne, mert a régi 31-hez lehetne a 0-t és a 114-hez a 100-at rendelni és a többi számot már csak arányosan kellene elosztani.
üdv.
-
Mutt
senior tag
válasz
the radish #19489 üzenetére
Hali,
Jó lesz az, csak a csv formátumot is hozzád kell fűznöd vagyis kell elé a &-jel.
DIM valtozo$
valtozo$=Cstr(Range ("A1").Value) 'biztosra megyünk hogy szöveges értéket kapjunk
ActiveWorkbook.SaveAs Filename:=utvonal$ & valtozo$ & ".csv", FileForm.....Fontos, hogy az útvonal végén legyen backslash. Ezt így tudod ellenőrizni és javítani.
If Right(utvonal$, 1) <> "\" Then utvonal$ = utvonal$ & "\"
üdv
-
Mutt
senior tag
válasz
Nyomdász #19486 üzenetére
Hello,
A #NÉV? azt jelenti, hogy adott névvel nem talál függvényt. pl. az FKERES-t ha FKEREK-re elütöd, akkor ezt kapod. Mivel ez egy saját függvény, nem beépített ezért még az is gond lehet, hogy abban a füzetben ahol használod ott nem érhető el az Excelnek.
Ha mindig elérhetőnek akarod, akkor vagy a saját makrófüzetbe teszed vagy addin-ként használod. (Ha addinként is jó, akkor átírjuk.)Az #ÉRTÉK hiba sokminden lehet, de inkább arra tippelek hogy valamelyik bemenő paramétert nem szereti.
Nézd, meg hogy melyik paraméter esetén még jó és mikor nem.Excel 2010 és 2003-ban nekem műkődik, persze ez nem jelenti, hogy minden más esetben is kell hogy menjen. Csak emiatt még nem javaslom, hogy egy bevált rendszert cseréljél.
Ha lehetséges, akkor osszd meg az eredeti fájlodat és megnézem.Kérdés, hogy a mintám amit letöltöttél az rendben megy?
Ha abba bemásolod az adataidat, akkor is működik?üdv.
-
-
Mutt
senior tag
válasz
Nyomdász #19454 üzenetére
Hello,
Tömbfüggvénnyel esetleg megoldható, illetve az újabb változatokban van GYAKORISÁG függvény, de ez sem segít sokat.
A javaslatom egy saját függvény használata. Feltöltöttem ide egy mintával:
https://www.sugarsync.com/pf/D0303523_164_627981888A függvénnyel mind a legtöbbször, mind a legkevesebbszer használt számokat meg lehet kapni.
A kód a pedig:
Function GYAKORI(Tartomany As Range, Elem As Long, Optional Kicsi As Boolean = False, Optional Rendezetlen As Boolean = False)
Dim Adatok As New Collection 'egyedi számok tömbje
Dim arryAdatok() 'végső tömb
Dim rngAdatsor As Range 'adatokat tartalmazó terület
Dim cell As Range
Dim i As Long
'csak a kijelölt és számokat tartalmazó terület metszetét vizsgáljuk
Set rngAdatsor = Intersect(Tartomany, ActiveSheet.Cells.SpecialCells(xlCellTypeConstants, xlNumbers))
'a collection-be felvesszük a számokat, mivel csak egyedi értékeket
'tud fogadni, ezért ki kell kapcsolni a hibakezelést
On Error Resume Next
'végigmegyünk az adatterületen és felvesszük a collection-be
For Each cell In rngAdatsor
Adatok.Add cell.Value, CStr(cell.Value)
Next cell
'hibakezelés visszakapcsolása
On Error GoTo 0
'létrehozunk egy két dimenziós tömböt: számokat és gyakoriságukat fogjuk tárolni
ReDim arryAdatok(1 To Adatok.Count, 1 To 2)
'feltöltjük a tömböt
For i = 1 To UBound(arryAdatok, 1)
'számérték
arryAdatok(i, 2) = Adatok.Item(i)
'számérték gyakorisága - DARABTELI-vel határozzuk meg
arryAdatok(i, 1) = WorksheetFunction.CountIf(rngAdatsor, Adatok.Item(i))
Next i
'sorbarendezzük a számokat alapból (ha a rendezetlen IGAZ-ra van állítva akkor nem fut le)
If Not Rendezetlen Then
BubbleSort arryAdatok, 2
End If
'a gyakoriság (első dimenzió) szerint növekvő sorrendbe tesszük a tömböt
'buborék rendezés kódja innen származik
'http://social.msdn.microsoft.com/Forums/en-US/320f3328-cb4f-43ce-aedf-c0f00f253b64/sorting-a-2-dimension-array-in-excel-vba?forum=isvvba
BubbleSort arryAdatok, 1
'ha KICSI-ként használjuk a függvényt, akkor a tömb első elemei kellenek
'ha NAGY-ként akkor viszont az utolsók
If Not Kicsi Then
Elem = UBound(arryAdatok, 1) - Elem + 1
End If
'eredmény
GYAKORI = arryAdatok(Elem, 2)
End Functionüdv.
-
Mutt
senior tag
válasz
dudikpal #19405 üzenetére
Hali,
Azt mondtad, hogy a munkalapokat sorrendbe rendezted, tehát mindegyik lapon a termék adatai ugyanazon sorban vannak. Akkor nem jó neked, ha az eredmény munkalapon
A1-be =csz!A1
B1-be =me!A1
C1-be =mvm!A1 képletek vannak? Ezt lemásolva jön a többi termék adata is.Ha félreértettem, akkor elnézést.
üdv.
-
Mutt
senior tag
válasz
m.zmrzlina #19401 üzenetére
Hello,
Megoldás lehet az OSZLOP függvény használata is.
=OSZLOP(CV1)üdv
-
Mutt
senior tag
Hello,
Ha a forrás- és eredménytáblában ugyanazok az oszlopnevek, akkor akár a HOL.VAN függvény is segíthet a kívánt oszlopszám meghatározásban.
Itt egy példa a http://www.ksh.hu/docs/hun/xstadat/xstadat_eves/i_onp001.html oldalon elérhető adatsoron.
Az évet és a kategóriát legördülő listából lehet kiválasztani, és ezek alapján keresi ki a megfelelő értéket a C3-ban lévő FKERES.
üdv.
-
Mutt
senior tag
válasz
DIEGO15 #19406 üzenetére
Hello,
...A letöltendő weblap címe minden nap két karakterben módosul....
Esetleg ezt próbáld meg.Sub WebImport()
Dim URI As String
Dim wsCel As Worksheet
URI = ActiveCell.Value
If URI <> "" Then
Set wsCel = Worksheets.Add
With wsCel.QueryTables.Add(Connection:= _
"URL;" & URI, _
Destination:=Range("$A$1"))
.Name = "Adatok"
.FieldNames = True
.RefreshStyle = xlInsertDeleteCells
.SaveData = True
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = True
.WebDisableRedirections = True
.Refresh BackgroundQuery = False
End With
End If
End Subüdv
Új hozzászólás Aktív témák
Hirdetés
- ASZTALI GÉP / ALKATRÉSZ beárazás
- Path of Exile (ARPG)
- A fociról könnyedén, egy baráti társaságban
- sziku69: Fűzzük össze a szavakat :)
- RAM topik
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Mazda topik
- 3D nyomtatás
- Red Magic 10 Air - gaming telefon is lehet kecses
- Több mint 1 milliárd dollárnyi részvényüket adták el az NVIDIA belsős emberei
- További aktív témák...
- Gyermek PC játékok
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- Eladó Steam kulcsok kedvező áron!
- Adobe Előfizetések - Adobe Creative Cloud All Apps - 12 Hónap - NYÁRI AKCIÓ!
- Eredeti Microsoft termékek - MEGA Akciók! Windows, Office Pro Plus, Project Pro, Visio Pro stb.
- Lenovo Thinkpad P16 G2 - i9-13980HX, 64GB, 1TB SSD, 16" WQUXGA (3840 2400), RTX 4090 (ELKELT)
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7600X 16/32/64GB RAM RX 7700XT 12GB GAMER PC termékbeszámítással
- ÁRCSÖKKENTÉS LG 24" full HD LED IPS monitor (HDMI, DSUB, jack) eladó
- Asus ROG G20AJ - Intel Core i7-4790, GTX 980
- Azonnali készpénzes GAMER / üzleti notebook felvásárlás személyesen / csomagküldéssel korrekt áron
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: Promenade Publishing House Kft.
Város: Budapest