- Prohardver app (nem hivatalos)
- Google Pixel topik
- Egy kabaré volt az Edge 50 család belgrádi bemutatója
- Milyen okostelefont vegyek?
- Telekom mobilszolgáltatások
- Apple iPhone 15 Pro Max - Attack on Titan
- Elnéztük a mai dátumot
- Vodafone mobilszolgáltatások
- Huawei P30 Pro - teletalálat
- MIUI / HyperOS topik
Hirdetés
-
Az üzleti szférának szól a SmartThings Pro
ma A kütyüket összefogó megoldásból irodák, üzletek és hotelek is profitálhatnak.
-
Letartóztatták, mert AI segítségével csalt az egyetemi vizsgán
it A török hatóságok letartóztattak egy diákot, amiért egy egyetem felvételi vizsgáján AI segítségével válaszolt a kérdésekre.
-
Retro Kocka Kuckó 2024
lo Megint eltelt egy esztendő, ezért mögyünk retrokockulni Vásárhelyre! Gyere velünk gyereknapon!
-
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
-
Fehér Mancs
tag
-
Fehér Mancs
tag
válasz benczeb #2285 üzenetére
A kijelölt tartománynál a cellaformátumra (Format -> Cells vagy ctrl+1) ki kell választani a Szám/Number fül alatt az utolsó kategóriát (angolban Custom). A formátum beadásánál be kell gépelni: XXX;WWW;ZZZ -> az első rész fog állni a pozitív, a mázodik a negatív számok, a harmadik pedig a 0 helett. (Ha csak XXX-et írsz be, akkor a negatívnál -XXX jelenik meg).
-
Fehér Mancs
tag
válasz Illusion1010 #2301 üzenetére
Közvetlen függvény nincs, de macro-ként lehet írni saját függvényt, ami megadja az infót az adott cellára egy új oszlopban, arra pedig már lehet szűrni.
A macro pl.:
Function Boldolt(Cella As Range) As Boolean
If Cella.Font.Bold = True Then
Boldolt = True
Else
Boldolt = False
End If
End Function
Ezután a függvényre lehet hivatkozni, pl ''=Boldolt(A1)'' megadja azt.
(Lehet, hogy magyar nyelvezetű excelnél néhány kifejezéset máshogy kell írni.) -
Fehér Mancs
tag
Én is a Kimutatásvarázslót/Pivot Table-t javasolnám neked, azzal pillanatok el lehet ezt készíteni.
A lényege, hogy először kijelölöd, hogy milyen adatokat kell megadni, majd megadod a megjelenítését/Layout-ot -> Sorok közé bedobálod, ami alapján kell összegezni (ezetleg átlagot, darabszámot, stb.-t számolni), az adatmezőre pedig berakod az összegezendőt.
Nem túl bonyolult, viszont nagyon megéri megtanulni. -
Fehér Mancs
tag
A probléma az, hogy az FKERES mindig az első találatból indul ki.
Két megoldást tudok javasolni.
Egyik, ha tudsz saját függvényt írni a macronál, akkor azzal lehetne szabályozni, hogy a korrigált FKERES az általad sorszámként megadott egyezőséghez keresse ki az értéket.
Másik az lehet, hogy azt az FKERES keresési listáját hekkeled meg:
Az első függvény marad az eredeti H5=FKERES($K$2;$B$6:$D$10;3;0)
a többi függyvények pedig az előző találatokra hivatkoznak: H6=FKERES($K$2;OFSZET($B$5;HOL.VAN(H5;$D$6:$D$10;0)+1;0;1000;1);3;0), ezt lehúzva az általa várt eredmény születik. A probléma csak ott lehet, ha egy érték többször is szerepel a listádban, ilyenkor egy ciklusba kerül a függyvény.
A lényege ennek, hogy az OFSZET egy cellatartományt ad vissza (mintha manuálisan jelölnéd ki), ami a B5 mezőtől lefelé csúsztatva annyi sorral kezdődik, mint amelyikben megtalálta (HOL.VAN függvény) az FKERES előző eredményét. Figyelni kell arra is, hogy az OFSZET függvény utolsó előtti paramétere (jelen esetben 1000) azt határozza meg, hogy hány sor magas oszlopba keresse az adott értéket, így azt megéri akkorára állítani, hogy mindenképpen beleférjen az összes (de vigyázni arra, hogy az excel sorkorlátját ne lépje túl). Az OFSZET utolsó paramétere pedig az oszlopszámot határozza meg, így annak meg kell egyeznie az FKERES-ben használt oszlopszámmal.
(Ha a lehúzás után keletkező hibákat (#N/A) el akarod rejteni, akkor a =HA(HIBÁS(függvény);'''';függvény) függvénnyel meg lehet ezt oldani.) -
Fehér Mancs
tag
Szia,
Nem akarok kontárkodni, a másik megoldás is biztosan helyes, de van egy egyszerűbb és könnyebben érthető is.
A legelső cella képlete: (C1) =LARGE($a$1:$a$30;1) ->A legnagyobb számot adja meg
Az alatta lévő cellába: (C2) =LARGE($A$1:$A$30;COUNTIF($A$1:$A$30;''>=''&C1)+1) ->megnézi, hogy mennyi, az előző számtól nemkisebb szám van, és ez+1-edik legnagyobb számot keresi meg. Ezt pedig le lehet már húzni.
Ha a sor végét is le szeretnénk kezelni, akkor a futó cellákba a (C2) =IF(OR(SMALL($A$1:$A$13;1)=C1;C1='''');'''';LARGE($A$1:$A$13;COUNTIF($A$1:$A$13;''>=''&C1)+1)) kell beérni (ha az előző a legutolsó, vagy már ott sem volt semmi kitöltve, akkor nem tölti ki, amúgy pedig az előző képletet használja).
Üdv -
Fehér Mancs
tag
Szia,
A Feltételes formázást próbáltad már? Lehet, hogy ez a megoldás a problémádra.
Pl.: feltételes formázás formulájaként meg lehet adni, hogy ha ''=A1=$C$1'' (aktív cella megegyezik a vizsgált cellával), akkor legyen piros színű a cella. Ezután a formázást lehet másolni a többi cellára is. -
Fehér Mancs
tag
válasz RoyalFlush #3846 üzenetére
Sziasztok,
Ilyen jellegű problémára ad megoldást az FKERES/VLOOKUP függvény is, ráadásul sokkal átláthatóbban, a kezelése/karbantartása is sokkal egyszerűbb. A lényeg, hogy előzetesen le kell gyártani a paramétertáblát, a függvény utolsó értéke pedig 1 kell, hogy legyen, így intervallumokban keres.
-
Fehér Mancs
tag
válasz cortez25 #4114 üzenetére
Feltételes formázással 3-nál több érték esetén is megoldható a a színezés, a feltételbe ezt kell beírni:
=NOT(ISERROR(HLOOKUP(A2;$T$1:$T$20;1;0)))A2 helyére az aktuális cellát kell beírni, ami kikeresi a T1:T20 cellákból az értékekekt, és ha megtalálta (nem hibás a képlet->van adat), akkor élhet a feltételes formázás. sajnos a függvények magyar neveit nem tudom, de könnyen ki lehet találni.
-
Fehér Mancs
tag
válasz mimi_bacsi #4182 üzenetére
Szia,
Ha nem akarsz makrós megoldást, képletekkel is meg lehet oldani, ráadásul ez másolható is.
(A1 a hivatkozott cella)
Első szám képlete (pl. B1-be) : =LEFT(A1;FIND("/";A1)-1)*1
Második szám képlete (pl. C1-be) : =MID(A1;FIND("/";A1)+1;999)*1Magyarban azt hiszem, ezek a BAL, SZÖVEG.TALÁL, és KÖZÉP függvények.
-
Fehér Mancs
tag
válasz Delila_1 #4205 üzenetére
Egy apró hiba van a képletben, az, hogy szöveget hasonlítasz össze egymással, így pl.: "9" nagyobb "30"-nál, "1000" pedig kisebb nála. A feltételbe is bele kell tenni a számmá való átalakítást (eggyel való szorzást):
=HA(KÖZÉP(F1;SZÖVEG.KERES("/";F1)+1;20)*1>30;"";30-KÖZÉP(F1;SZÖVEG.KERES("/";F1)+1;20)*1)
B1-be (30 mínusz F1 számlálója):
=HA(BAL(F1;SZÖVEG.KERES("/";F1)-1)*1>30;"";30-BAL(F1;SZÖVEG.KERES("/";F1)-1)*1)[ Szerkesztve ]
-
Fehér Mancs
tag
válasz bagyulajuve #4217 üzenetére
Ezt a formázást csak makróval lehet megoldani. Először 3 oszlopba fel kell vinni az adatokat, majd készíteni rá egy egyszerű oszlopos diagrammot, és utána a lenti makró megformázza azt.
Sub Macro8()
' 2. adatsor
With ActiveChart.SeriesCollection(2)
.ChartType = xlLineMarkers
.AxisGroup = 2
.MarkerForegroundColorIndex = 3
.MarkerStyle = xlDash
.MarkerSize = 10
.Border.LineStyle = xlNone
End With
' 3. adatsor
With ActiveChart.SeriesCollection(3)
.ChartType = xlLineMarkers
.AxisGroup = 2
.MarkerForegroundColorIndex = 3
.MarkerStyle = xlDash
.MarkerSize = 10
.Border.LineStyle = xlNone
End With
' Dropdown lines
With ActiveChart.ChartGroups(2)
.HasDropLines = False
.HasHiLoLines = True
.HasUpDownBars = False
End With
' Minimum és maximum tengelyértékek megadása
If ActiveChart.Axes(xlValue).MinimumScale < ActiveChart.Axes(xlValue, xlSecondary).MinimumScale Then
ActiveChart.Axes(xlValue, xlSecondary).MinimumScale = ActiveChart.Axes(xlValue).MinimumScale
Else
ActiveChart.Axes(xlValue).MinimumScale = ActiveChart.Axes(xlValue, xlSecondary).MinimumScale
End If
If ActiveChart.Axes(xlValue).MaximumScale > ActiveChart.Axes(xlValue, xlSecondary).MaximumScale Then
ActiveChart.Axes(xlValue, xlSecondary).MaximumScale = ActiveChart.Axes(xlValue).MaximumScale
Else
ActiveChart.Axes(xlValue).MaximumScale = ActiveChart.Axes(xlValue, xlSecondary).MaximumScale
End If
End Sub[ Szerkesztve ]
-
Fehér Mancs
tag
[IMG:c:%5Cuntitled.JPG][/IMG]
[ Szerkesztve ]
-
Fehér Mancs
tag
A színes kérdést is lehet dinamizálni úgy, hogy a második paramétert opcionálissá tesszük, és ha nem adunk meg értéket, akkor az "értékes tartományban" keres. Az eredeti makró egy kicsit megspékelve:
Function CountCCC(Mintacella As Range, Optional Tartomany)
Dim rngCell As Range
If IsMissing(Tartomany) Then
Set Tartomany = ActiveSheet.UsedRange
End If
nColor = Mintacella.Interior.Color
nResult = 0
For Each rngCell In Tartomany
If rngCell.Interior.Color = nColor Then
nResult = nResult + 1
End If
Next rngCell
CountCCC = nResult
End FunctionA képletek újraszámoláról pedig úgy tudom, hogy akkor kalkulálódnak újra, ha bármelyik hivatkozott mező értéke változik (egyéb tulajdonság pl. szín nem számít). Pl. ha a fenti függvénynél nem adjuk meg a második paramétert, akkor nem fog frissülni az érték a változásokra, hiszen csak átételesen hivatkozunk a tartományra.
-
Fehér Mancs
tag
válasz Gabcsika #4318 üzenetére
Képlettel is ki lehet hámozni a zárójeles részt (A1-ben van az adott szöveg):
=MID(A1;FIND("(";A1);FIND(")";A1)-FIND("(";A1)+1)1. paraméter, az adott cella
2. paraméter megkeresi, hogy honnan kezdődik, vagyis a nyitó zárójel pozíciója
3. paraméter, hogy milyen hosszú részt kell kiemelni -> záró zárójel pozíciója minusz a nyitó zárójel pozija +1[ Szerkesztve ]
-
Fehér Mancs
tag
A probléma az, hogy a macro a számokat angolosan látja, vagyis tizedesvesszőként pont szerepel; ha azt kicseréled, akkor elvész a nagyságrend. (A visszaírásnál is így kell megadni).
Két megoldást látok:
- egyik, hogy az excelbe való betöltésnél kezeljük ezt le (Tools->Options->International menüpontban be kell állítani a konvertálás idejére a ","-ős ezresválasztót és "."-os tizedesvesszőt.- másik, hogy a macro csak a szöveges mezőket alakítja át, angolos lelkületűre (futtatás előtt ki kell választani az átalakítandó cellákat):
Sub Macro6()
Dim rngCell As Range
For Each rngCell In ActiveWindow.RangeSelection
If VarType(rngCell.Value) = vbString Then
rngCell.Replace What:=".", Replacement:=""
rngCell.Replace What:=",", Replacement:="."
End If
Next rngCell
End SubReméljük ez megoldja a problémát.
-
Fehér Mancs
tag
válasz Fehér Mancs #4383 üzenetére
Most látom, hogy az is működik, ha a pontot kicseréljük pontra
Sub Macro6()
Selection.Replace What:=".", Replacement:="."
End SubEzt add össze!
-
Fehér Mancs
tag
válasz Gabcsika #4442 üzenetére
Az excel 2007-es verziójában képlettel is ki lehet ezt számolni ezt:
=SZUM(HA(értékek=vizsg_érték;HA(tartomány<>"";1/DARABHATÖBB(értékek;vizsg_érték;tartomány;tartomány);0);0))
(Tömbképlet, vagyis shift+ctrl+enter-et kell használni)Az értékekben keressük meg a vizsg_értéket, és csak ezeket vesszük figyelembe a darabszámlálásnál (tartományban a különbözők kiszedése).
Ha nem lehet érteni, ne aggódj, én sem igazán értem, de működik
[ Szerkesztve ]
-
Fehér Mancs
tag
válasz Gabcsika #4442 üzenetére
Még egy észrevétel, ha macroval számoltatjuk ki ezt, akkor saját függvényt érdemes használni, mivel az nem módosítja az adataidat, változásnál újra is számol, másolható, stb.
Erre egy megoldás:
Function CountDistinct(Ertekek As range, Tartomany As range, Vizsg_ertek) As Variant
Dim Taroltak()
Dim i, j, Talalat
Dim VanMar As Boolean
Talalat = 0
For i = 1 To Ertekek.Rows.Count
If Ertekek(i) = Vizsg_ertek Then
If Talalat = 0 Then
ReDim Taroltak(1)
Taroltak(1) = Tartomany(i)
Talalat = 1
Else
VanMar = False
For j = 1 To Talalat
If Taroltak(j) = Tartomany(i) Then
VanMar = True
Exit For
End If
Next j
If Not (VanMar) Then
ReDim Preserve Taroltak(Talalat + 1)
Taroltak(Talalat + 1) = Tartomany(i)
Talalat = Talalat + 1
End If
End If
End If
Next i
CountDistinct = Talalat
End Function -
Fehér Mancs
tag
Azt hittem, hogy ez már megoldódott... A lényeg, hogy amikor macro-val cserélsz, akkor az excel angol formátumú számokban gondolkodik, neki a pont a tizedesvessző és a vessző az ezres elválasztó, ilyen formáumra kell hozni a cserével a szöveget. Csere után, ha általános formátumú a cella, mindig megvizsgálja a progi, hogy számmá vissza lehet-e e formában írni.
Vagyis, ha a 1.800,12-ben kicseréled a pontot macroval, akkor 1800,12-t akar visszaírni, ami számára nem szám/vagy pedig, ami még rosszabb, ezres elválasztónak érzékeli a vesszőt. Ha ilyenkor a pontot pontra cseréljük (mintha nem is csinálnánk semmit), akkor az angol számformátum alapján felismeri, hogy mi a valódi ezres elválasztó és a pont, és azt írja vissza.
Amúgy adatok importjánál nem lehet ezt már lekezelni? Ha előtte beállítod az ezres elválasztót és a pont formátumot, az excel rögtön felismeri, hogy szám (options->International menűpont).
-
Fehér Mancs
tag
válasz Panthera #4540 üzenetére
Az Érvényesítés funkciót lehetne erre használni (Adat -> Érvényesítés menűpont/Data->Validation).
Rá kell állni a cellára, majd meghívni ezt a menűpontot. A listából ki kell választani pl. az egész számot, és utánna meg lehet adni feltételként, hogy legyen kisebb a hivatkozottnál. Itt is él az abszolút/relatív hivatkozás, ha másolni akarod (speciális másolás -> érvényesítések másolása), akkor érdekes lehet ez is.
-
Fehér Mancs
tag
Több megoldás is van, az egyik, angolosan:
=NOT(ISERROR(MATCH(A1;$E$1:$E$5;0)))
A1 a vizsgált cella, E1:E5 amiben meg kell keresnie. A lényeg, hogy ráfuttat egy keresést (magyarban azt hiszem, hogy hol.van függvény), majd megnézi, hogy megtalálta-e (ha nem, akkor hibát ír vissza, ezt az ISERROR/HIBÁS függvénnyel meg lehet fogni). Mivel, ha nincs megfelelő, akkor ad IGAZ értéket, a NOT/NEM függvénnyel megfordítjuk ennek az "előjelét".
A MATCH/HOL.VAN függvény helyett a VLOOKUP/FKERES is ugyanazt az eredményt adja ( =NOT(ISERROR(VLOOKUP(A1;$E$1:$E$5;1;0))) )
[ Szerkesztve ]
-
Fehér Mancs
tag
válasz balage02 #4640 üzenetére
Tömbfüggvénnyel is meglehet adni, de egy kicsit bonyolult. Bár, legalább nem kell makró.
A lényeg, hogy az adott cellától (jelen esetben az A1) kell offszet-elni a tőle jobbra lévő első nem üres celláig:
=OFSZET(A1;0;MIN(HA(ÜRES(B1:$IV1);500;OSZLOP(B1:$IV1)))-OSZLOP(A1)) és tömbképlet, vagyis Ctrl+Shift+Enter-rel kell leokézni.
Ha nincs tőle jobbra kitöltött cella, akkor #HIV!-et ír ki.
-
Fehér Mancs
tag
Ha valami ciklust használsz, akkor bizonyos ciklusnál (minden 1000-dik esetben) be lehet iktatni a ActiveWorkbook.Save -et.
Másik lehetőség, ha bizonyos időközönként akasz menteni, a Timer használata (bár ehhez is folyton vissza kell térni -> cilus kell hozzá):
Start = Timer
SaveSecond= 60*60 ' óránkénti mentés
cilus kezdete
if Start > Timer+SaveSecond then
ActiveWorkbook.Save
Start = Timer
endif
cilus vége[ Szerkesztve ]
-
Fehér Mancs
tag
válasz Delila_1 #4668 üzenetére
Lehet rá függvényt is írni:
Function ElsőNemÜres(Tartomany As Range, TermIrany As Boolean)
Dim i As Integer
For i = 1 To Tartomany.Cells.Count
If TermIrany Then
If Not (IsEmpty(Tartomany(i))) Then
ElsőNemÜres = Tartomany(i).Value
Exit Function
End If
Else
If Not (IsEmpty(Tartomany(Tartomany.Cells.Count - i + 1))) Then
ElsőNemÜres = Tartomany(Tartomany.Cells.Count - i + 1).Value
Exit Function
End If
End If
Next i
ElsőNemÜres = CVErr(xlErrNA)
End FunctionMűködése a kövektező: kijelölsz egy tartományt, és a TermIrany alapján megkeresi benne az első nem üres cellát, és azt adja vissza. Amennyiben változnak az értékek, ez frissül.
(TermIrany -> ha IGAZ/TRUE, akkor balról jobbra, majd fentről lefelé keres, ha HAMIS/FALSE, akkor jbbról balra majs lentről felfelé. Amennyiben nem talált semmit, akkor a #HIÁNYZIK! üzenetet adja).
-
Fehér Mancs
tag
Az FKERES függvény intervallum keresésre is alkalmas, az utolsó paramétere mondaná meg ezt (ha 1 vagy IGAZ, akkor lehet így használni). A függvényhez persze hozzá kell még adni 150-et.
pl.:
Tábla:
0 15
10 20
20 50fkeres(0;tábla;2;IGAZ) = 15
fkeres(3;tábla;2;IGAZ) = 15
fkeres(12;tábla;2;IGAZ) = 20
fkeres(2000;tábla;2;IGAZ) = 50és
fkeres(0;tábla;2;IGAZ)+150 = 165 ... -
Fehér Mancs
tag
Az nem derült ki, hogy hova tegyük a köztes értékeket, de ez is megoldható képletekkel:
1. Ha van pontos találat, akkor FKERES-sel megkereshető.
2. ha nem, akkor meg kell keresni a következő nagyobb szám pozícióját (HOL.VAN)
3. majd OFSZET-tel rá lehet állni.Vagyis:
=HA(HIBÁS(FKERES(A1;$C$2:$D$10;2;0));OFSZET($C$1;HOL.VAN(A1;$C$2:$C$10;1)+1;1);FKERES(A1;$C$2:$D$10;2;0))
A1 a keresett érték,
$C$2:$D$10-ig pedig a lista -
Fehér Mancs
tag
A $C$1 a fejlécet jelentené, a következő sorban kezdődne az adat. Ennek a sorához adjuk hozzá az ofszet második paraméterében azt a sorszámot, amit a hol.van függvénnyel találunk meg (a keresett értéknél nem nagyobb legnagyobb szám) +1-et, hogy az azt követő sorra álljunk rá.
Az FKERES-ben pontos értékre keresünk (utolsó paraméter 0 / HAMIS), a HOL.VAN esetén pedig intervallumra (ott az utolsó paraméter 1-es).
[ Szerkesztve ]
-
Fehér Mancs
tag
Ha nincs a listában fejléc, akkor egy kicsit lehet ezen finomítani:
=HA(HIBÁS(FKERES(A1;$C$1:$D$10;2;0));OFSZET($C$1;HOL.VAN(A1;$C$1:$C$10;1);1);FKERES(A1;$C$2:$D$10;2;0))
(C110-ig vannak adatok)
Amúgy rendezett a lista? Ha nem, akkor hibaüzenetet kaphatsz vissza.
Ha így sem megy, küldd át az excelt.
[ Szerkesztve ]
-
Fehér Mancs
tag