- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Xiaomi 14 - párátlanul jó lehetne
- Huawei Mate 9 - Mate evangéliuma
- Milyen okostelefont vegyek?
- Motorola Moto Tag - nyomom, követ
- Fotók, videók mobillal
- Yettel topik
- Android alkalmazások - szoftver kibeszélő topik
- Google Pixel topik
- Samsung Galaxy A54 - türelemjáték
-
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
válasz
KaliJoe #53580 üzenetére
Szia,
Tömb képletről van szó, de az újabb Excel verziókban (szerintem 2021es verziótól) már nem kell a Ctrl+Shift+Enter.
A képletben a {1/2/3/4/5} arra "kényszeríti" az INDEX függvényt, hogy egyszerre több oszlopot adjon vissza (alapból csak 1et fog). Gépeld be a kapcsos zárójelet, de nem kell CSE-t nyomnod. (Ha így is sem megy, akkor azért próbáld ki hogy belül gépeled a kapcsoszárójelet és a végén nyomsz CSEt.)
Egy hiba van a képletedben, a SOR(INDiREKT után A1 kell, nem A2. Az a rész valójában nem az A-oszlopról és az adatairól szól, hanem egy bevett szokás hogy egyesével növekvő számokat (1, 2, 3 stb) állítsunk elő. Későbbi Excelben erre már a SORSZÁMLISTA függvény van erre. Ha A2-vel indul, akkor az adathalmaz első sorát ki fogod hagyni.
Még annyi, hogy lehet nem volt szerencsés a második valtozót "Sorok"-nak hívni, amikor van ilyen függvény Excelben. Két helyen írd át mondjuk ""osszsor"-ra.
Üdv
-
válasz
KaliJoe #53538 üzenetére
Uppsz, ez Excel 2019-es.
Uppsz, akkor Fferi50 makróját használd
"Szerencsétlen" Mutt teljesen el fog alélni a boldogságtól, szvsz az avatarján is 90 fokot fordult a sapka... -
válasz
KaliJoe #53533 üzenetére
Az O2021 Magyar (Én is ezt használom) is ismeri a LET függvényt.
Ezt a képletet másold be bármely cellába:=LET(x;1;y;2;x+y)
Nem tudom, hogy csak beíráskor bakiztál, de a Te képleted a hozzászólásodban aposztróffal kezdődik valamiért, úgy biztos nem oké. '=LET(sgsfg)
#53528 Mutt
Szerintem az a képlet szép.Ha csúnya képletet szeretnél látni, akkor nézd meg ezt.
-
Fferi50
Topikgazda
válasz
KaliJoe #53522 üzenetére
Szia!
Ha használhatsz makrót, akkor az alábbi lehetőséget próbáld ki:
Sub szamkeres()
Dim rngalap As Range, rngkeres As Range, rrow As Range, keresrow As Range, kerescell As Range, talalat As Integer, total As Integer
Set rngalap = Range("A2").CurrentRegion
Set rngkeres = Range("H2").CurrentRegion
talalat = 0
For Each keresrow In rngkeres.Rows
For Each rrow In rngalap.Rows
For Each kerescell In keresrow.Cells
talalat = talalat + IIf(rrow.Find(what:=kerescell.Value, LookIn:=xlValues, lookat:=xlWhole) Is Nothing, 0, 1)
Next
If talalat = 3 Then total = total + 1
talalat = 0
Next
Cells(keresrow.Row, 12).Value = total
talalat = 0: total = 0
DoEvents
Next
End Sub
Ez a makró "egy menetben" végigkeresi a H2-től kezdődő tartomány számhármasait az A2 -től kezdődő adattartományban és az L oszlopban mellé írja a keresés eredményét.
A2 és H2 esetében a hozzájuk tartozó összefüggő tartományt használja, ezért nem kell megadni csak a kezdő címet. Ezért az A:E és a H:J tartomány mellé kell legalább egy üres oszlop! Emiatt írja az eredményt az L oszlopba. Így ismételt futtatás esetén sem lesz gond a tartományokkal.
Az alábbi függvény egy konkrét számhármast keres egy megadott tartományban:Function szamkereso(hol As Range, mit As Range) As Integer
Dim rnghol As Range, rngmit As Range, rngszam As Range, talalat As Integer, total As Integer
For Each rnghol In hol.Rows
For Each rngmit In mit.Cells
talalat = talalat + IIf(rnghol.Find(what:=rngmit.Value, LookIn:=xlValues, lookat:=xlWhole) Is Nothing, 0, 1)
Next
If talalat = 3 Then total = total + 1
talalat = 0
Next
szamkereso = total
End Function
Bemenő paraméterek:
hol = az adattartomány címe - ha $-os formában adod meg, akkor húzható lefelé a képlet.
mit = a keresendő számhármas címe
Ez egy felhasználó által létrehozott függvény, ugyanúgy használható, mint a beépített függvények.
Pl. =szamkereso($A$2:$E$100;H2:J2) a H2:J2 cellákban levő számhármas A2:E100 tartományban levő előfordulásának számát adja meg.
A függvény érték frissül, ha változtatod az alap tartományban vagy a keresési értékben levő számokat.
Az első makrót viszont változtatáskor ismét le kell futtatnod.
Fontos:
Hibakezelés nincs benne.
Ha 3 egyforma számot keresnél, akkor rossz értéket ad vissza.
A munkafüzetet makróbarátként vagy binárisként kell mentened!
Üdv. -
válasz
KaliJoe #53521 üzenetére
Egyáltalán nem mindegy, hogy Te mit értesz számhármason...
Definíció szerint a sorrend is számít, azaz, ha Mutt példáját vesszük alapul, ahol a 3,10,12 keressük, akkor pl. a 12,10,3 meg minden egyéb nem jó.Itt a képen (ha a sorrend is számít, azaz kizárólag 3,10,12 számot és ilyen sorrendben keresünk) csak az 5. sor felel meg a feltételnek, a 7. sor meg nem, azaz a találatok száma 1, nem pedig 2...
Szóval esetedben kell, hogy számítson a sorrend avagy sem?
(ha számít a sorrend, az olyan, mintha egy szöveges fájlban keresnénk, hogy hányszor fordul elő az abc karaktersorozat, nem pedig, hogy azt keressük, hogy minden sorban szerepel-e az a és b és c karakter, mert nagyon nem mindegy)
-
Mutt
senior tag
válasz
KaliJoe #53516 üzenetére
Szia,
Amikor több öszlopban keresed az értéket (vagyis DARABHATÖBB(A:E;H2) esetén), akkor soronként mindegyik oszlopra van egy eredmény a találatokról (pl. {IGAZ,HAMIS,HAMIS,HAMIS,HAMIS}).
Ha megadod a többi keresési értékeket, akkor pedig minden keresési értékre szintén visszakapod az oszloponkénti eredményt. Vagyis az 5 oszlop és 3 keresési érték alapján lesz 15 eredmény soronként.
A függvény ezen mátrixnak a produktumát adja vissza, amely MINDIG 0 lesz ha eltérő értékeket keresel, mert egy cellában egyszerre csak 1 db szám lehet, amely vmelyik keresendő számmal egyezik vagy sem, de egyszerre mindhárom keresendő számmal nem egyezhet.
Itt egy minta ami talán érthetőbbé teszi mint amit fent írtam:
Bal oldalon A-E-oszlopok (szürke háttér) ahol keresünk. Sárga amit keresünk.
Alatta pedig egy eredmény, hogy az A-E oszlop adott sorában megtaláltuk-e a keresendő számot. Ahol 1 ott igen, ahol 0 ott nem volt egyezés (bal oldalt zölddel ezek be is színezve). Ahogy látszik az első sorban a 3-as szám meg van az első oszlopban, a 10-es szám nincs sehol, a 12-es pedig a harmadik oszlopban van. Az első oszlopban van egy találat és kettő hiány, ennek a szorzata 0. A második oszlopban mindenhol 0 van, eredmény 0. A harmadik hasonló mint az első 1 talalát ellen van kettő hiány, megint 0 és így tovább.Ami neked kell, hogy mindegyik feltétel 1 találatot adjon vissza (lényegtelen hogy a számot a sor melyik oszlopában találjuk meg, az számít hogy van-e vagy sincs.
Vagyis az 1,0,0,0,0 helyett 1 vagy a 0,0,0,0,0 helyett egy 0 kell. Ezt SZUM-al lehet megcsinálni. Ezt láthatod lent, narancssárga helyeken már 1 db szám van.Neked azon sorok kellenek, ahol soronként mindenhol 1 van. Ezt egy szorzással lehet elérni, a K4-es cella képlete =H4*I4*J4. Majd ezt a K oszlopot összegezve megkapod a végeredményt. Vagy 1 lépésben SZORZATÖSSZEG, amelyet az L4-be látsz és aminek a képlete:
=SZORZATÖSSZEG(H4:H7;I4:I7;J4:J7)
Ha MS365-ön vagy, akkor viszont lehet egyszerűsíteni a BYROW függvénnyel, amely soronként végigmegy az adatokon:
A képlet:=SZUM(--BYROW(A2:E20;LAMBDA(r;(DARABHA(r;$H$2)+DARABHA(r;$I$2)+DARABHA(r;$J$2))=3)))
Más:
Szerintem érdemes lenne a Névkezelőben a INDIREKT("A2:E" & Öhsz;IGAZ) -nak egy nevet adni (pl. adatok) és onnantól már minden képleted egyszerűsíthető.üdv
-
Mutt
senior tag
válasz
KaliJoe #53505 üzenetére
Szia,
Nem írtál Excel verziót, de Excel 2021 vagy frissebben vagy, akkor van EGYEDI (UNIQUE) és akár SORBA.RENDEZ (SORT) függvényed.
Ez esetben
=ÖSSZESÍT(14;6;EGYEDI(U20:U85 );{1;2;3}
vagy=INDEX(SORBA.RENDEZ(EGYEDI(U20:U85);1;-1);{1;2;3})
MS365 változat esetén pedig TAKE (jelenlegi fordítása ÁTHELYEZ is van):
=ÁTHELYEZ(SORBA.RENDEZ(EGYEDI(U20:U85);1;-1);3)
üdv
-
Fferi50
Topikgazda
válasz
KaliJoe #53505 üzenetére
Szia!
"önmagában egy másik cellában hozza a :$A$47:$W$85 hivatkozást, az INDEX függvény azonban mégsem fogadja be, mint cellahivatkozást."
Igen, csakhogy az egy szövegérték és nem tartomány hivatkozás. Ahhoz, hogy hivatkozás legyen belőle, bele kell foglalni az INDIREKT függvénybe!
Üdv.
-
válasz
KaliJoe #53486 üzenetére
Hali!
Holnap reggel 8-ig él a megosztás, utána megszűnik: phonenumbers_with_LET_by_Fire.xlsx
Korábban írtam, hogy országkód és hossz párossal lehet operálni, de ez nem mindig elég. Ilyenkor a szabályok végrehajtási sorrendjét lehet segítségül hívni ill. ez esetben ha a szabály igaz, akkor nem kell a többi szabályt futtatni (Leállítás, ha igaz minden szabály esetén be van jelölve).
Telószámoknál is kellett a szabályok sorrendjére figyelni, mert pusztán az országkód és hossz alapján nem lehetne megkülönböztetni a budapesti-, zöld-, kék-, és vidéki telószámokat, hisz mindegyik 36-l kezdődik és 10 karakter hosszú.
Ezért elsőre a 361-l kezdődőre vizsgáljuk(Budapest), ha nem igaz, következő szabály, 3640-l kezdődre vizsgáljuk(Zöld), ha nem igaz, következő szabály, 3680-l kezdődőre vizsgáljuk(Kék), ha nem igaz, akkor már csak Vidéki lehet, de akkor is megvizsgáljuk, hogy 36-l kezdődjön és 10 karakter hosszú legyen.
-
válasz
KaliJoe #53475 üzenetére
Kivitelezhető, csak több melóval, mivel a nemzetközi telefonszám-formátumok országonként eltérnek. Nemzetközi számoknál az országkódot ki kell szedni, telószám hosszát lekérdezni és ebből a kettőből lehet meghatározni megjelenítési formátumot.
Feltételes formázással is kivitelezhető, de amint egy újabb ország telószáma bekerül, egyből új szabály(ok) hozzáadása szükséges.Az utolsó 2 szabály a 2 Németországi formátumot érvényesíti.
1.=LET(Nemzetközi_DE;BAL(A1;2);Nemzetközi_DE_HOSSZ;HOSSZ(A1);HA(ÉS(Nemzetközi_DE="49";Nemzetközi_DE_HOSSZ=12);1))
2.=LET(Nemzetközi_DE;BAL(A1;2);Nemzetközi_DE_HOSSZ;HOSSZ(A1);HA(ÉS(Nemzetközi_DE="49";Nemzetközi_DE_HOSSZ=13);1))
-
Mutt
senior tag
válasz
KaliJoe #53475 üzenetére
Szia,
Az én megoldásom azon alapszik, hogy van egy táblázat amely tartalmaz pár adatot ami alapján meg lehet találni, hogy melyik formátumot kell használni.
Mutatom.
Jobb oldalt van a táblázat, amiben a telefonszám első pár karaktere van megadva (lehet dzsóker karaktert - kérdőjel most csak - is használni). Aztán van hossz is, hogy az altípusokat meg lehessen különböztetni (biztosra mentem és tartományt lehet megadni).
Majd jön a kívánt számformátum, itt követni kell az Excel speciális számformátum szabályait. Meg lehet adni, hogy milyen háttérszíne legyen a cellának (három szám 0-255 között, vesszővel felsorolva a vörös-zöld-kék alapszínekhez). A komment pedig segít eligazodni a káoszban.A táblázatban fontos a sorrend. Ha több lehetőség is van akkor is az első találatot fogja használni a makró.
Ezek után a makró:
Option Explicit
Dim arrFormats
Sub FormatNumbers()
Dim s As Range
Dim r As Variant
Dim szinek As Variant
'megadott formátumokat memóriába töltjük
'ha más a tábla neve akkor a tFormats helyére a helyes kerüljön
arrFormats = ActiveSheet.ListObjects("tFormats").DataBodyRange.Value
Set s = Intersect(Selection, ActiveSheet.UsedRange)
If Not s Is Nothing Then
'kijelölt adatokon végigmegyünk
For Each s In Selection
r = FindFormat(s.Value)
If IsArray(r) Then
'a cél cella formázását levesszük
s.ClearFormats
'beállítjuk a formátumot
s.NumberFormat = r(1)
'ha van színezünk
If r(2) <> "" Then
szinek = Split(r(2), ",")
If UBound(szinek) = 2 Then s.Interior.Color = RGB(szinek(0), szinek(1), szinek(2))
End If
End If
Next s
End If
End Sub
Function FindFormat(p As String) As Variant
Dim i As Long
Dim pFormat(1 To 2) 'formátum és színkód
Dim pKezdo As String
Dim pHossz As Long
pHossz = Len(p)
FindFormat = ""
If pHossz = 0 Then Exit Function
'végigmegyünk a létező formátumokon
For i = 1 To UBound(arrFormats)
pKezdo = ""
'hossz alapján keresünk egyezést
If arrFormats(i, 2) >= pHossz And arrFormats(i, 3) <= pHossz Then
pKezdo = arrFormats(i, 1)
'kezdõ karakterek alapján keresünk egyezést
If Left(p, Len(pKezdo)) Like pKezdo Then
'ha van egyezés akkor elmentjük és kilépünk a ciklusból
pFormat(1) = arrFormats(i, 4)
pFormat(2) = arrFormats(i, 5)
FindFormat = pFormat
Exit For
End If
End If
Next i
End Function
Csak a kijelölt cellák formátumát változtatja meg! Vagyis előbb jelöljük ki a cellákat/oszlopokat és utána futassuk (Alt+F8-at nyomva vagy egy gombot kitéve).
-
Fferi50
Topikgazda
válasz
KaliJoe #53475 üzenetére
Szia!
Sajnos nem erre gondoltam, a maszkok teljesen érthetőek. De
Pl. 123456789, 345678289, 21345678912
Mondd meg légy szíves, melyik maszkot használjam ezekre, mindegyikre ugyanazt vagy melyikre milyent.
Melyik számról mit tudsz megállapítani?
Mi van, ha a magyar telefonszámhoz nincs a +36?
Üdv. -
Fferi50
Topikgazda
válasz
KaliJoe #53471 üzenetére
Szia!
Azt esetleg elárulnád, hogy az ömlesztett számsorból mi fogja megmutatni, hogy éppen melyik formázást kell alkalmazni?
Mert szabály nélkül nemigen lehet kitalálni.
A szabály ismeretében lehet eldönteni, hogy milyen formázás legyen. Szerintem mindenképpen szövegformázást kell majd alkalmazni, valószínűleg makróval.
Üdv. -
Fferi50
Topikgazda
-
Fferi50
Topikgazda
válasz
KaliJoe #48340 üzenetére
Szia!
Valószínűleg nem azonos a keresett érték és a keresési táblázatban szereplő elemek típusa. Számot csak számban, szöveget csak szövegben tudnak a kereső függvények megtalálni.
A HAHIBA függvény pedig elnyomja a hibát.
Esetleg mutatnál rá konkrét példát, mert ehhez most nem elég jó a képzelőerőm.... (7vége közeleg).
Üdv. -
Fferi50
Topikgazda
válasz
KaliJoe #48335 üzenetére
Szia!
Lehet wildcard karaktereket használni, de alapvetően csak a kereső függvényekben.
Az ilyen típusú "osztályozást" az Fkeres függvénnyel egyszerű megcsinálni. Táblázatban felsorolod az életkor határokat és a hozzájuk tartozó kategóriákat.
Az FKERES függvény negyedik paramétere ilyenkor 1 vagy nem írod be. A táblázatban pedig emelkedő sorrendben sorolod fel a kategóriákat.
A példa HA függvényedben pedig a SZÖVEG.KERES függvényt használhatod:=HA(HIBÁS(SZÖVEG.KERES("F";"Férfi"));HAMIS;IGAZ)
Üdv. -
Delila_1
veterán
válasz
KaliJoe #48152 üzenetére
Még mindig nem teljes. Mi van akkor, ha nincs 0-nál nagyobb értékű 5 oszlopod?
Átalakítottam úgy, hogy soronként jó eredményt kapj.A Z2 cella képlete
=HAHIBA(MAX(HA(HOL.VAN(0;A2:X2;0)<6;INDIREKT("A" & SOR()&":" & CÍM(SOR();HOL.VAN(0;A2:X2;0)-1;4;1)); INDIREKT(CÍM(SOR();HOL.VAN(0;A2:X2;0)-1;4;1) & ":" & CÍM(SOR();HOL.VAN(0;A2:X2;0)-5;4;1))));MAX(A2:X2))
ezt másolhatod lefelé.
Akkor is működik, mikor csakis nulla értékek vannak egy-egy sorban.
Zöld hátteret adtam a sorokban a MAX aktuális tartományának. -
Fferi50
Topikgazda
válasz
KaliJoe #34255 üzenetére
Szia!
"1. A NAGY függvény 2 paraméterű. A 2. paraméter az, hogy hányadik "nagy" értéket akarom megkapni.
2. Ezt javítottam is, mert mondjuk mindig az első nagyot kérem ki."Már megbocsáss, de az első nagy = max ha jól tudom. Akkor nem kell a nagy függvény, elég a max.
Viszont az eredménytáblában az első, második, harmadik stb. legtöbb szavazatot kapott személy nevére voltál kíváncsi - a függvény pedig pont ezt adja meg szerintem.Valószínűleg nem ismertük meg a feladat teljes egészét.
Csak mellékesen jegyzem meg, hogy én viszont az indirekt függvényt útálom és kerülöm, ahol csak lehet. Helyette nagyon sokszor jó az index - hol.van páros.
Üdv.
-
Delila_1
veterán
-
Fferi50
Topikgazda
válasz
KaliJoe #34235 üzenetére
Szia!
Próbáld meg lsz. az alábbi tömbképletet az O7 cellába:
=INDEX($B$1:$I$1;1;HOL.VAN(NAGY(($B$23:$I$23)-OSZLOP($B$1:$I$1)*0,0001;SOR()-6);$B$23:$I$23-OSZLOP($B$1:$I$1)*0,0001;0))
A tömbképletet a Ctrl+Shift+Enter billentyű kombóval tudod bevinni, az Excel kapcsos zárójelbe teszi.
Ezt a képletet húzhatod lefelé az oszlopon.Ha átmásolod az eredeti tábládba, akkor a határokra figyelj légy szíves. A Nagy függvény második paraméterében a SOR()-6 esetében az előző sor számát kell levonni.
Trükk: Mivel a keresendő értéket és a táblázatot is módositjuk az oszlop* 0,0001 értékével, így nincs két egyforma eredmény.Üdv.
-
0P1
aktív tag
válasz
KaliJoe #34238 üzenetére
"Viszont én, ha csak egy mód van rá nem akarok változtatni az adatrögzítő tábla mostani - rögzítés közbeni - véletlenszerű elrendezésén. A segítség az, ha úgy tudsz mondani megoldást, ha az adatrögzítő tábla közben nem változik."
Amit írtam, az pontosan olyan megoldás
De bővítmény nélkül csak Excel 2016-tól van bent ez a funkció
De ha 2010-esed van, akkor is megoldható PQuery bővítménnyel:https://www.microsoft.com/hu-HU/download/details.aspx?id=39379
-
0P1
aktív tag
válasz
KaliJoe #34235 üzenetére
Szia, ezt worksheet függvénnyel csak rendkívül körülményesen tudod megoldani.
Javaslom inkább Excel 2016 Beolvasás és átalakítás funkcióját:
1 Jelöld ki A2:I23 tartományt, Beolvasás és átalakítás -> Táblázatból (táblázat rovatfejekkel)
2 Átalakítás/Első sor használata fejlécként ->Fejlécek használata első sorként
3 Átalakítás/transzponálás
4 Kezdőlap / oszlopk kiválasztása ->válaszd ki első és utolsó oszlopt
5 Ha akarod elnevezheted az oszlopokat tetszés szerint (jobb egér az oszlopon / átnevezés) pl Név-re és szavazatra
6 Rendezd csökkenő sorrendbe szavazat alapján ( a kis szűrő nyilacskával kattintva az oszlop fejlécén)
7 Beolvasás és betöltés adott helyreÍgy a káposzta is megmarad és a kecske is jóllakik . Megmaradnak eredeti adataid is, sőt, ha az alapadat változik csak rá kell frissíteni (jobb egér -> frissítés) a lekérdezésre
-
Fferi50
Topikgazda
válasz
KaliJoe #25770 üzenetére
Szia!
Annál inkább nem ártana egy viszonylag pontos modellt összerakni és utána folytatni a történetet. Esetleg érdemes lenne utánanézni a neten, hátha másvalakinek is eszébe jutott már ilyesmi.
Maga a feladat pedig eléggé zsetonos formát kezd ölteni (úgy tűnik, nem "kisujjból kirázós").
Üdv.
-
csferke
senior tag
válasz
KaliJoe #25763 üzenetére
...akkor csak össze kell adni a C3+D3 értékeit...
Hogy én MEKKORA ökör vagyok
A legegyszerűbb megoldás a legkézenfekvőbb én meg valami bonyolult képleten törtem a fejem egész délután és nem jött össze. Nem láttam a fáktól az erdőt.D3=(C2-C1)+(D2-D1) (cellaformátum nn óó:pp)
Köszönöm, hogy volt türelmed velem foglalkozni.
-
Fferi50
Topikgazda
válasz
KaliJoe #25760 üzenetére
Szia!
Ezen még gondolkodni kellene, egyrészt azon, hogy hova lehet beilleszteni új elemeket, másrészt pedig miként lehet ezt makróval követni.
Jó lenne, ha mélyebben kifejtenéd a modell lényegét - akár folyamatábrával megtoldva -, mivel úgy lehet igazán programozni, ha ismerjük a folyamatot.
Üdv.
-
Fferi50
Topikgazda
válasz
KaliJoe #25754 üzenetére
Szia!
A következőt javaslom:
Az F oszlopba írd be a Szervezet munkalapról kivenni tervezett címeket:
F2 cella Szervezet!L2
A G oszlopba írd be a következő képletet:
G2 cella =CELLA("cím";INDIREKT(F2))
Ebben az esetben a B2 képletedbe a CELLA("cím";Szervezet!L2) helyett írhatod mindenhova, hogy G2,
vagyis a képlet: =JOBB(G2;HOSSZ(G2)-SZÖVEG.KERES("!";G2;1))
A D2 képlete: =SOR(INDIREKT(G2))Ezeket a képleteket (az F oszlop kivételével, ahová nyilván be kell írni tételesen minden cellába) végighúzhatod az adott oszlopon.
Üdv. -
-
Fferi50
Topikgazda
válasz
KaliJoe #25742 üzenetére
Szia!
Kicsit valóban nem világos, mit is szeretnél.
Az A oszlopban van egy képlet, aminek az eredménye a Szervezet munkalap L2 cellájának értéke.
A B oszlopban levő képleted eredménye a Szervezet munkalap L2 cellájának az abszolut címe
A D oszlopban levő képleted eredménye a Szervezet munkalap L2 cellájának a soraHa az a kérdésed, hogy a többi képlet az A oszlopban levő képletben hivatkozott cella adatait adja meg, akkor az a javaslatom, hogy egy oszlopban add meg a hivatkozott cella címét:
F1 értéke Szervezet!$L$2
A1 képlete =INDIREKT(F1)
B1 képlete =KÖZÉP(F1;SZÖVEG.KERES("!";F1)+1;20)
D1 képlete =KÖZÉP(F1;SZÖVEG.KERES("$";F1;SZÖVEG.KERES("$";F1)+1)+1;10)Üdv.
-
Fferi50
Topikgazda
válasz
KaliJoe #25479 üzenetére
Szia!
Ha tömbnek hoztad létre, akkor az Ubound(tömb) függvény mutatja, hogy hány eleme van az adott tömbnek.
Tehát elég, ha azt írod a redim utasításba, hogy
redim preserve tömb(ubound(tömb+1)).
De ezt minden egyes tömbelem - egész rekord! - beolvasása után meg kell tenned.A preserve azért kell, hogy megmaradjanak az addig bevitt értékek.
A byt_Ciklus változó helyett használhatod az Ubound(tömb) értéket számlálónak (bár a tömb nevét elnézve, nyilván a rövidebb a praktikusabb.Tehát közvetlenül az end if elé be kell tenned, hogy
redim preserve udef_MunkavállalóAdatbázis(byt_Ciklus)
Üdv.
-
Fferi50
Topikgazda
válasz
KaliJoe #25120 üzenetére
Szia!
Próbáld a következőt:
If activewindow.SelectedSheets("wsh_Ürlap").printpreview=true then
műveletek
endif
Ugyanis így adod meg a konkrét munkalapot.Ha több munkalap is ki van választva, akkor pedig
For each wsh in activewindow.selectedsheets
if wsh.printpreview=true then
műveletek
endif
next
Ezzel végigmész az összes munkalapon és megnézheted, hogy ki lett-e nyomtatva.Üdv.
-
Fferi50
Topikgazda
válasz
KaliJoe #25126 üzenetére
Szia!
A konstansnak (állandónak) pont az a lényege, hogy egyszer definiálod "direkt" módon az értékét és az soha de soha nem változhat meg a programban. Ezért nem lehet semmilyen változó tartalomhoz kötni a meghatározását, mert akkor már a konstans jelleg nem áll fenn. A makróba be kell "égetni" az értéket, csak úgy tudod változtatni, ha átírod a makróban ezt az értéket.
Ha tehát cella értékből akarod kivenni a "konstans" értékét, akkor azt csak változóba teheted bele, de ez a változó természetesen lehet az egész programra érvényes Global, vagy Public is és elég a program indulásakor értéket adni neki, többet nem kell vele foglalkoznod.
Nézz rá helpben a változók deklarálására.
Üdv.
-
Polllen
nagyúr
válasz
KaliJoe #25128 üzenetére
Szia,
az ActiveWindow.SelectedSheets.PrintPreview(wsh_Űrlap) így nem működik változó hibával, ahogy eredetileg is írtad. Mondjuk a SelectedSheets-nek elégnek kellene lennie a változó nélkül.
Viszont amit belinkeltem, az úgy működik, ahogy van, használtam többször is...A worksheets(xy) elég egyértelműen definiálja mire vonatkozik az utána következő PrintPreview...
If Worksheets(wsh_Urlap).PrintPreview = True Then vagy If Worksheets("Sheet1").PrintPreview = True Then -
Polllen
nagyúr
válasz
KaliJoe #25126 üzenetére
Mindig ugyanazt a sheet-t akarod kinyomtatni?
Ez alapján, igen:
...
Dim wsh_Űrlap As Variant
wsh_Űrlap = Worksheets("Űrlap Nyomtatáshoz")
...
If ActiveWindow.SelectedSheets.PrintPreview(wsh_Űrlap) = True Then
Worksheets("Alapértékek").Select
ActiveSheet.Unprotect
Worksheets("Alapértékek").Cells(4, "J").Value = Worksheets("Űrlap Nyomtatáshoz").Cells(2, "M").Value + 1
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
...Próbáld meg ezt:
Dim wsh_Urlap As String
wsh_Urlap = "Űrlap Nyomtatáshoz"
...
If Worksheets(wsh_Urlap).PrintPreview = True Then
Worksheets("Alapértékek").Select
ActiveSheet.Unprotect
Worksheets("Alapértékek").Cells(4, "J").Value = Worksheets("Űrlap Nyomtatáshoz").Cells(2, "M").Value + 1
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End IfBár ha fix, változó sem kell.
-
Fferi50
Topikgazda
válasz
KaliJoe #24982 üzenetére
Szia!
Nagyjából úgy kell kezelned, mint az application.enableevents kapcsolót. Hiszen azt is ki-be kapcsolgatod.
A userformban definiálsz az első sorok előtt pl. egy changetextbox_name boolean változót.
A textbox_name_change eseményben pedig először azt nézed meg, hogy ez true. Ha igen, mehet tovább, ha nem, akkor kilép.
Amikor olyan utasítást adsz ki, amelyik megváltoztatja a textbox értékét, akkor eldöntöd, hogy fusson-e le a chage esemény és az utasítás előtt megváltoztatod a changetextbox_name értékét ennek megfelelően.
De ugyanez igaz akkor is, ha magában az eseménykezelésben változtatod a textbox értékét, mert az képes rekurzívan meghívni magát... Tehát a változtatás előtt change... false. Ezáltal nem fog tovább menni.
Az eljárás végén pedig chage...true és akkor a következő változtatásnál belemegy az eljárásba.Remélem érthető.
Üdv.
-
Fferi50
Topikgazda
válasz
KaliJoe #24980 üzenetére
Szia!
Milyen excel verziód van?
Igen, sajnos a KeyAscii nem azonos a KeyCode - értékével - ezt valahol írtam is az előbb.Ez alapján viszont:
"
KeyPress EventOccurs when the user presses an ANSI key.
Syntax
Private Sub object_KeyPress( ByVal KeyANSI As MSForms.ReturnInteger)
The KeyPress event syntax has these parts:
Part Description
object Required. A valid object.
KeyANSI Required. An integer value that represents a standard numeric ANSI key code.Remarks
The KeyPress event occurs when the user presses a key that produces a typeable character (an ANSI key) on a running form while the form or a control on it has the focus. The event can occur either before or after the key is released. This event also occurs if you send an ANSI keystroke to a form or control using either the SendKeys action in a macro or the SendKeys Statement in Visual Basic.
A KeyPress event can occur when any of the following keys are pressed:
Any printable keyboard character.
CTRL combined with a character from the standard alphabet.
CTRL combined with any special character.
BACKSPACE.
ESC.A KeyPress event does not occur under the following conditions:
Pressing TAB.
Pressing ENTER.
Pressing an arrow key.
When a keystroke causes the focus to move from one control to another.Note
BACKSPACE is part of the ANSI character set, but DELETE is not. Deleting a character in a control using BACKSPACE causes a KeyPress event; deleting a character using DELETE doesn't.When a user holds down a key that produces an ANSI keycode, the KeyDown and KeyPress events alternate repeatedly. When the user releases the key, the KeyUp event occurs. The form or control with the focus receives all keystrokes. A form can have the focus only if it has no controls, or if all its visible controls are disabled.
The default action for the KeyPress event is to process the event code that corresponds to the key that was pressed. KeyANSI indicates the ANSI character that corresponds to the pressed key or key combination. The KeyPress event interprets the uppercase and lowercase of each character as separate key codes and, therefore, as two separate characters.
To respond to the physical state of the keyboard, or to handle keystrokes not recognized by the KeyPress event, such as function keys, navigation keys, and any combinations of these with keyboard modifiers (ALT, SHIFT, or CTRL), use the KeyDown and KeyUp event procedures.
"
Lehetséges, hogy mégis a KeyPress eseményhez kell menekülnöd, ezt tudja a backspace-t érzékelni.
A Backspace ansi kódja is 8.Próbáld ezt az eseményt úgy, ahogyan az előbb a másikra írtam.
Üdv.
Ps:A change esemény kezelésbe most nem mennék bele, mert nincs annyi időm jelenleg. De ígérem, ha egy kicsit szabadulok - visszatérek még rá.
-
Fferi50
Topikgazda
válasz
KaliJoe #24978 üzenetére
Szia!
A userformon nem hatásos az application.enableevent=false.
Ott csak trükkösen lehet megkerülni az eseménylefutást. Egy form szintű változót kinevezel eseményvezérlőnek, ha ez true, akkor fusson le az esemény, ha false akkor ne fusson le. Minde eseménykezelésnél ennek a változónak a vizsgálatával kezded a projektet.DE: Javaslom még mindig, hogy Textbox_KeyDown eseményt nézd meg, itt a keycode megmondja, hogy melyik billentyűt nyomták le.
A backspace keycodja a vbKeyBack vba konstans,ami numerikusan 8.A billentyűk Keycode megfeleltetését a help Keycode Constants cimszava alatt találod.
Private Sub object_KeyDown( ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As fmShiftState)
if KeyCode=vbKeyBack then
ide írod amit szeretnél csinálni ha BackSpace-t nyomtak.
endif
KeyCode=0
end subAz utolsó sor, a KeyCode=0 a lényeg, ezzel eliminálod a billentyű leütést! Minden olyan esetben kell, ha nem akarod, hogy a leütött billentyű hatása érvényesüljön!
(Pl. te beírod a textboxba a leütött betűt, vagy lecsökkented a hosszát, akkor már nem szabad, hogy a rendszer is megcsinálja ugyanazt!)
Ha meg kell, hogy csinálja a rendszer, akkor ezt a sort elhagyod.Hidd el, ez a legegyszerűbb megoldás a billentyűzet figyelésre. A change az macerás. Rengeteg hasznos info van a Help-ben. (A szokásostól eltérően.)
Üdv.
-
-
alfa20
senior tag
-
Fferi50
Topikgazda
válasz
KaliJoe #24872 üzenetére
Szia!
Néhány megjegyzés:
Az idézőjeleket kétféleképpen viheted be a szövegbe:
1. Megduplázod az idézőjelet - ahogyan Te is tetted, ez teljesen szabályos forma
2. A CHR függvénnyel CHR(34) hozzáfűzésével - ezt nem kell duplázni!A számváltozókat nem kell átalakítani a kifejezésekben:
&Trim(str(lng_AktuálisSor))
teljesen felesleges, egyszerűen beírhatod, hogy & lng_AktuálisSorTovábbá: VBA-ban a cella formula tulajdonság képlettel való megadásakor kizárólag angolfüggvénynevek használhatók. Tehát nem HA, hanem IF, nem VAGY hanem OR és így tovább.
Ha magyar függvényneveket szeretnél használni akkor a cella formulalocal tulajdonságát kell beállítanod.
A második példád egészen biztosan ezért ad hibát.
Viszont, ha magyar nyelvű képlettel írod be VBA-ból a kifejezéseket, akkor nem lesz hordozható az excel táblád, mert nem magyar környezetben, vagy a tiedtől eltérő beállításoknál nem tudja értelmezni majd a képletet.Ha lenne még kérdésed, írj bátran.
Üdv.
-
-
felora:)
tag
válasz
KaliJoe #24767 üzenetére
Szia!
Eddig fasza, nagyon jóóó, eljutottam addig, hogy meg van a legördülő menüm, az + pont, hogy címet is adhattam neki, de még annyi kéne, hogy pl. ha kiválasztom a legördülő listából, hogy "IGEN" akkor generálja be, az "A16"-os cellába, hogy pl. "OKÉ", ha a "NEM"-et választom ki, akkor azt generálja be, hogy: "NEM OKÉ". azt hogyan?
Ja! még annyit, hogy minden cellának majd a szöveget az "A16"-osba kell begenerálnia, szépen egymás után.
-
slashing
senior tag
válasz
KaliJoe #24757 üzenetére
Most nem a kukacoskodás miatt de mi a különbség ha egy ablakon bellül kettéosztod és a jobb oldala mindig ugyan azt mutatja és aközött hogy két külön ablakban nézed ugyanazt és a jobb oldala mindig ugyan az? Illetve ha egy ablakban valahogy mégis kettéosztod és fix a jobb oldala de már nincs szükséged rá akkor ugyan úgy kattingatnod(és amúgy is kattingatnod kell) kell szóval szerintem simán jó megoldás a két ablak.
Én elég sokszor alkalmazom sőt néha 3 ablakot nézek, jobb oldalon kettőt meg bal oldalon egyet. Igaz 1920x1200-as felbontásban és 24-es monitoron nézem ami megkönnyíti azért a munkát
és a +120pixel plusz az baromi sokat tud számítani, igaz filmnézésnél meg hátrány mert a 16:9-nél is van fekete sáv nem csak a 2.39:1-nél
Nem tartom kizártnak hogy van valamilyen elvetemült megoldás rá de, hogy őszinte legyek még ötlet szintjén sem merült fel bennem, sosem. Kézenfekvő volt hogy két ablakot használok. Az mondjuk már nekem is eszembe jutott hogy milyen jó lenne egy Tab-os megoldás az excel-ben kvázi úgy mint a böngészőkben...
-
slashing
senior tag
válasz
KaliJoe #24739 üzenetére
Fferi50 megelőzőtt , de azért nm törlöm a hsz.-t.
Ha pontos egyezést keresünk akkor mindegy milyen sorrendben van mert csak azt az egyet találhatja meg amire kíváncsiak vagyunk ha ugyan az a képlet egynél több pontos egyezésre is igaz akkor meg már nem is érdemes azt a kereső függvényt használni...
szerintem téged megzavart az hogy az fkeresnél a pontos egyezést nem az IGAZ logika adja hanem a HAMIS. Tehet ha igaz a keresési tartomány tehát közelítő keresést végzünk akkor sorban kell lennie.
-
Fferi50
Topikgazda
válasz
KaliJoe #24739 üzenetére
Szia!
Természetesen az excel súgónak tökéletesen igaza van és ugyanaz van benne amit én is írtam. Ha megnézed a range_lookup paraméterhez tartozó leírást, annak háromféle értéke lehet: Igaz, Hamis, vagy nem adod meg. A paraméter alapértelmezett értéke az Igaz (vagyis tartományban keres közelítő értéket), ami egyezik azzal, hogy nem adtál meg értéket.
Ha viszont Hamis értéket adsz neki - azaz pontos értéket keresel - akkor nem kell sorbarendezni az adatokat! Ez következik a megfogalmazásból:
"Fontos: Ha a tartományban_keres értékeIGAZ vagy hiányzik, a tábla első oszlopában lévő értékeknek növekvő sorrendben kell elhelyezkedniük, különben az FKERES hibás eredményt adhat."
Vagyis, ha az értéke HAMIS, akkor nem kell sorbarendezni.Üdv.
Bocs a megszólítás miatt, de itt általában ez a "barátságos tegeződés" járja.
-
slashing
senior tag
válasz
KaliJoe #24710 üzenetére
sajnos nem tudom kipróbálni mert nekem csak két oszlopból áll az egész táblám és nem is tudom hogy neked ez a képlet melyik oszlopba kerül. De így ránézésre elképzelhetőnek tartom hogy lehetne ezt egyszerűsíteni azzal hogy kiveszed a sor függvényt amivel ha jól gondolom egy eltolást csinálsz... mert szerintem a szumhatöbb függvénynél nem áll fenn az a hiba amibe én beleestem a sima szumha függvénynél hogy nem ott indult az összegtartományom mint a kritériumtartományom....
üdv.
-
KaliJoe
tag
válasz
KaliJoe #24706 üzenetére
A kész és teljes megoldás, amely bármelyik sorban, bármennyi adatsor esetén alkalmazható:
=HA(VAGY(ÜRES(A5);B4=HÓNAP.UTOLSÓ.NAP(B4;0));SZUMHATÖBB(INDIREKT(CÍM(4;8;4;1);IGAZ):INDIREKT(CÍM(SOR(B4);8;4;1);IGAZ);INDIREKT(CÍM(4;2;4;1);IGAZ):INDIREKT(CÍM(SOR(B4);2;4;1);IGAZ);">=" & DÁTUM(ÉV(B4);HÓNAP(B4);1);INDIREKT(CÍM(4;2;4;1);IGAZ):INDIREKT(CÍM(SOR(B4);2;4;1);IGAZ);"<=" & DÁTUM(ÉV(B4);HÓNAP(B4);NAP(B4)));"")
Köszönöm a segítségeteket... Nélkületek nem ment volna!
Kellemes Karácsonyi Ünnepeket kívánok!
Új hozzászólás Aktív témák
Hirdetés
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- NBA és kosárlabda topic
- Egy helyre gyűjti az eltérő áruházak játékait a Microsoft
- Motoros topic
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Xiaomi 14 - párátlanul jó lehetne
- A Perplexity felvásárlását fontolgatja az Apple
- Huawei Mate 9 - Mate evangéliuma
- Fejhallgató erősítő és DAC topik
- Autós topik látogatók beszélgetős, offolós topikja
- További aktív témák...
- Assassin's Creed Shadows Collector's Edition PC
- ROBUX ÁRON ALUL - VÁSÁROLJ ROBLOX ROBUXOT MÉG MA, ELKÉPESZTŐ KEDVEZMÉNNYEL (Bármilyen platformra)
- Bitdefender Total Security 3év/3eszköz! - Tökéletes védelem, Most kedvező áron!
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- ÁRGARANCIA!Épített KomPhone Ryzen 5 5600X 16/32/64GB RAM RTX 4060 8GB GAMER PC termékbeszámítással
- Napi 1000 -ft tól elvihető RÉSZLETFIZETÉS BANKMENTES MSI Cyborg 15 A13VE
- LG 40WP95XP-W - 40" NANO IPS - 5120x2160 5K - 72Hz 5ms - TB 4.0 - HDR - AMD FreeSync
- Szinte új, minőségi, állítható ritkítóolló
- LG 32GS95UE - 32" OLED / UHD 4K / 240Hz - 480Hz & 0.03ms / 1300 Nits / NVIDIA G-Sync / AMD FreeSync
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest