Az „Excel” fórum célja, hogy keretet adjon az Excel felhasználók széles táborának tapasztalataik megosztására, és lehetőséget a segítséget kérőknek. Az alábbi összefoglaló azért készült, hogy segítse a helyes kérdésfeltevést.
– Írd le szabatosan a problémát. Úgy fogalmazz, hogy ne csak te magad, de a szakértő is megértse, mire szeretnél választ kapni.
– Írd le, hogy milyen verziójú Excellel dolgozol. (Vagy ha nem – ill. nem csak – Excel, akkor micsoda?)
– Írd le, hogy milyen úton indultál el, és hol akadtál el rajta.
– A kérdés megértése szempontjából sokat segíthet, ha feltölteszt egy képet, amin látszik, hogy mit szeretnél, vagy illusztrálja azt.
– Még jobb, ha feltöltesz egy minta munkafüzetet valahová (pl. data.hu). Feltöltés előtt távolítsd el belőle a nem publikus adatokat.
– Ha a feladat jellege olyan, célszerű az "előtte" és "utána" állapotokat bemutatni. (Miből kellene csinálni mit?)
– Ha VBA kódon kell javítani, másold be a releváns kódrészt. Rövid kód mehet hozzászólásba, hosszú kód inkább ide: http://pastebin.com/
– Ha valami nem úgy működik, ahogy kellene, add meg a rendellenes viselkedés jellemzőit, a hibaüzenetet, és a hibát okozó programsort.
Csak ehhez buta az Excel. Ő csak 1 egész és 14 tizedesjegy pontossággal tud számokat tárolni. Így ha beírsz egy 24 számjegyű számot, akkor ő azt átformázza tudományossá és úgy tárolja el. A végét pedig egész egyszerűen lecsapja.
Vagy azt csinálod meg, amit a makród is félig meddig csinál már, hogy szövegként tárolod el és átformázod (ez lehet teljesen automatikusan is, csak kell bele tenni hibakezelést. Van olyan makró, ami a munkalap változásakor lefut automatikusan. Azt kell jól felparaméterezni, hogy csak akkor fusson le, ha azok a cellák változtak, ahol bankszámlaszám bevitel történik. Valamint, hogy ha mondjuk rossz a formátum, akkor se fusson le.). Vagy mondjuk 3 cellában viteted be az adatokat és a megfelelő helyre szövegként összefűzve kerül már be.
Itt jegyezném meg, hogy a 12345678-654-127 is érvényes bankszámlaszám formátum. Ugyanis a 8-as csoportoknál a kezdő nullákat nem kötelező kiírni. Ezt legjobban az OTP-s bankszámlaszámoknál figyelhető meg, ahol az esetek nagy részében az utolsó 8-as csoport csak nullákból áll, így egyáltalán nem szokták kiírni. Ezzel kapcsolatban volt egyszer vitám is volt kolléganőmmel. Kaptunk egy szerződést PDF formátummal, ahol különböző formázások be voltak állítva a beviteli mezőkbe. Nem lehetett neki megmagyarázni, hogy a bankszámlaszámunknak nincs semmi baja attól, hogy a középső blokkban a kezdő nullákat eltüntette a dokumentum. Így inkább kinyomtatta, ráírta pluszban tollal, majd visszascannelte...
Szia! Nyilván a jelszó nem kötelező, akkor a Password paramétert egyszerűen elhagyod.
Ami a másik makró működését illeti: Ha zároláskor nem tiltod azt, amit az a makró végez - vagyis a felhasználó is megtehetné - akkor a makró is meg tudja tenni.
Zároláskor alapból a cellák formázása nincs megengedve a felhasználónak:
Ha megengeded a formázást, akkor a formázó makród is működni fog zárolás esetén is.
Azt elfelejtettem mondani, hogy nem kellene jelszót kezelni a lapvédelemhez, csak jelszó nélkül lenne "levédve" a véletlen törlések ellen.
Megnyitási jelszó lenne rajta csak, de az nem hiszem, hogy befolyásolja a futást feloldás után.
Amúgy érdekes, mert egy másik makro is van a lapon és az tökéletesen működik lapvédelemmel is. (annyira nem értek a makróhoz, hogy tudjam, miért működik az egyik és a másik miért nem) :)
Szövegként tárolni azért nem jó megoldás, mert nem lehet közé tenni automatikusan a kötőjelet. Konkrétan ez lenne a feladat, hogy ha 24 szám van egy mezőben akkor tegyen 8 karakterenként egy kötőjelet. Szöveg formátumnál ez felejtős.
A lapvédelmet makróval kapcsold be és használd a UserInterfaceOnly paramétert.
A Thisworkbook kódlapjára a megnyitás eseménybe kell beírnod, pl.
Private Sub Workbook_Open() Sheets("Munka1").Unprotect Password:="Jelszó" Sheets("Munka1").Protect Password:="Jelszó", Userinterfaceonly:=True End Sub
Azért kell először feloldani, hogy a Userinterfaceonly paramétert meg tudd adni a zároláshoz.
Ez a paraméter True módban teszi lehetővé, hogy a makrók futhassanak a zárolt munkalapon is.
Mindaddig érvényben marad, amíg valamilyen módon fel nem oldod a zárolást, illetve bezárás utáni újranyitáskor "elfelejti" az alkalmazás, ezért kell a nyitáskor lefuttatni.
Érdemes átnézni a Worksheet.Protect utasításhoz kapcsolódó Helpet, mert abban részletesen le van írva, milyen paraméterekkel mit tudsz tiltani. Lehetséges, hogy a zárolási utasításban más paramétereket is meg kell adnod ahhoz, hogy az általad kívánt korlátozások érvényesüljenek.
Miért nem állítod be előre azt a néhány cella formátumát szövegre és akkor nem kellene a makrónak?
Illetve makróval fel lehet oldani a lapvédelmet és ismét vissza lehet kapcsolni. Ebben mondjuk az a veszély, hogy ha a feloldás után, de a vissza kapcsolás előtt valamiért leáll a makró, akkor kikapcsolva marad a lapvédelem.
Telefonon én 15 számos korlátba futottam bele. Egyszerűen nem kezel 15 számjegynél nagyobb számokat... Így szerintem marad a szövegként való tárolás.
Szeretném azt megoldani, hogy ha egy cellába beírok egy számsorozatot, ami 24 szám, azt formázza úgy meg, mintha egy bankszámlaszám lenne tehát 8 karakterenként tegyen egy kötőjelet.
De ugye 15 karakter után átvált az excel "tudományos" szám formátumra és nem jeleníti meg megfelelően a számokat. Aposztrófos megoldás sem jó.
Nem találtam semmilyen megoldás erre, ha esetleg tudtok valami megoldást az jó lenne (anélkül, hogy bármi mást kellene tenni azon kívül, hogy beírjuk a 24 számot, mert "nem excel használók" fogják kezelni)
Maradt a makrós megoldás, ez működik, de ha bekapcsolom a lapvédelmet, (ami szükséges) akkor hibaüzivel leáll ( range osztály NumberFormat tulajdonsága nem állítható be) még akkor sem ha amúgy nincs zárolva az adott mező.
Tudtok segíteni valahogy megoldani a problémát, akár makrós, akár nem makrós módon ?
For Each cell In Target For i = LBound(validCells) To UBound(validCells) If cell.Address(False, False) = validCells(i) Then raw = Replace(cell.Value, "-", "") If Len(raw) = 24 And IsNumeric(raw) Then Application.EnableEvents = False cell.NumberFormat = "@" ' Szöveg formázás cell.Value = Left(raw, 8) & "-" & Mid(raw, 9, 8) & "-" & Right(raw, 8) Application.EnableEvents = True End If Exit For End If Next i Next cell
Microsoft 365-öt használok, sokat dolgozok Excel-ben. Van egy most úgy 380.000 soros adatbázisom, amihez évek óta havonta úgy 12.000 sor jött hozzá. Az oszlopok száma úgy 20 db. A legutóbbi frissítéskor az egyik oszlopban olyan értékek bukkantak fel, amelyeknek nem kellene ott lenniük. Nyitottam új munkafüzetet, bemásoltam a nagyobb adatbázis kritikus oszlop eredeti értékeit érték másolással, majd egy másik munkalapra a frissítés oszlopát ugyanígy. Szűrővel megvizsgáltam mindkét állományt, és az értékek rendben voltak. Utána mindkettőben szortoltam, és kiszűrtem az ismétlődő értékeket, és így is rendben volt minden. Egy harmadik munkalapra újra bemásoltam az eredeti oszlopot, megint értékkel, és alul hozzá toldottam a frissítést ugyanúgy. Szűrővel megvizsgáltam a megnövekedett állományt, és találtam benne egy olyan értéket, amely egyik korábbiban sem szerepel, viszont az eredeti nagy táblában megtalálható, egy másik oszlopban. A vizsgált, teljesen új munkafüzetbe azonban csak a kritikus oszlopokat másoltam be. Az oszlopok másolgatásakor nagyon körültekintő voltam. Minden alkalommal csak max két fájl volt nyitva, és a gépet is többször újraindítottam, mert tapasztalatom szerint itt-ott szokott maradni szemét. Módszert változtattam. A két oszlopot lementettem külön csv fájlba, majd egy közös fájlban megvizsgáltam. Külön-külön egyikben sem volt semmi más, csak aminek ott kellett lennie. Amint összeraktam a kettőt, megint felbukkant a felesleges érték. Itt kapok fejlövést, mert ez lehetetlen. Normális körülmények között. Na de most vajon mi a helyzet? Tud valaki segíteni?
Szóval van egy csomó sorod egy adott oszlopban és azt akarod összeadni? Vagy van egy csomó sorod és véletlenszerű, hogy mely oszlopokban van vége a számoknak?
Ha esetleg egy képernyőképet közzé teszel, az sokat segítene.
Ha valaki szereti a kihívásokat, akkor meg lehetne írni, hogy működjön tört számokkal is :D
Gyors ötletelés fejben:
Ketté kellene szedni az alap számot. A fix() függvény megadja az egész részt. A "tort=szam-fix(szam)" pedig megadja a tört részt.
Ha tort > 0, akkor ki kellene írni az egész rész után, hogy "egész" és utána a "tort" részt meg kellene szorozni annyival, hogy egészt kapjunk.
Ezt én úgy csinálnám, hogy az alap számot ("szam") én decimal-lá konvertálnám. Így nem lebegőpontosan van tárolva. Ezután képezném belőle a "tort" számot.
for i = 1 to 12
if fix(tort*10^i)/10^i = tort then
exit for
end if
next i
tort = fix(tort*10^i)
És így, ha nem rontottam el semmit, akkor a "tort" számunk már egy olyan szám, ami a tizedes jegyeket tartalmazza már csak úgy, hogy megszoroztuk tíz legkisebb hatványával, hogy egészet kapjunk.
Ezután már csak végig kellene rajta futtatni ugyan azt mint az egész részén annyi különbséggel, hogy a legnagyobb helyiértéknek megfelelően ki kellene írni a legvégére pluszban, hogy tized, század, ezred, tízezred, stb... közül a megfelelőt.
Amíg én megírtam a szerző fájlja által a makrót, addig te közzé is tetted azt. Mindegy, ha már dolgoztam vele, akkor itt az én verzióm:
Option Explicit
Function szambetuvel(szam As LongLong) If (szam > 999999999999#) Or (szam < -999999999999#) Then szambetuvel = "hiba" Exit Function End If If szam = 0 Then szambetuvel = "nulla" Exit Function End If If szam < 0 Then szambetuvel = "mínusz " Else szambetuvel = "" End If Dim szamformazva, szam1, szam10, szam100 As String szamformazva = WorksheetFunction.Text(Abs(szam), "000000000000") szam1 = Mid(szamformazva, 3, 1) szam10 = Mid(szamformazva, 2, 1) szam100 = Mid(szamformazva, 1, 1) If szam1 > 0 Or szam10 > 0 Or szam100 > 0 Then szam100 = szam_szaz(CStr(szam100)) szam10 = szam_tiz(CStr(szam10), CStr(szam1)) szam1 = szam_egy(CStr(szam1)) szambetuvel = szambetuvel & szam100 & szam10 & szam1 & "milliárd" If Mid(szamformazva, 4, 1) > 0 Or Mid(szamformazva, 5, 1) > 0 Or Mid(szamformazva, 6, 1) > 0 Or _ Mid(szamformazva, 7, 1) > 0 Or Mid(szamformazva, 8, 1) > 0 Or Mid(szamformazva, 9, 1) > 0 Or _ Mid(szamformazva, 10, 1) > 0 Or Mid(szamformazva, 11, 1) > 0 Or Mid(szamformazva, 12, 1) > 0 Then szambetuvel = szambetuvel & " - " End If End If szam1 = Mid(szamformazva, 6, 1) szam10 = Mid(szamformazva, 5, 1) szam100 = Mid(szamformazva, 4, 1) If szam1 > 0 Or szam10 > 0 Or szam100 > 0 Then szam100 = szam_szaz(CStr(szam100)) szam10 = szam_tiz(CStr(szam10), CStr(szam1)) szam1 = szam_egy(CStr(szam1)) szambetuvel = szambetuvel & szam100 & szam10 & szam1 & "millió" If Mid(szamformazva, 7, 1) > 0 Or Mid(szamformazva, 8, 1) > 0 Or Mid(szamformazva, 9, 1) > 0 Or _ Mid(szamformazva, 10, 1) > 0 Or Mid(szamformazva, 11, 1) > 0 Or Mid(szamformazva, 12, 1) > 0 Then szambetuvel = szambetuvel & " - " End If End If szam1 = Mid(szamformazva, 9, 1) szam10 = Mid(szamformazva, 8, 1) szam100 = Mid(szamformazva, 7, 1) If szam1 > 0 Or szam10 > 0 Or szam100 > 0 Then szam100 = szam_szaz(CStr(szam100)) szam10 = szam_tiz(CStr(szam10), CStr(szam1)) szam1 = szam_egy(CStr(szam1)) szambetuvel = szambetuvel & szam100 & szam10 & szam1 & "ezer" If Abs(szam) > 2000 And (Mid(szamformazva, 10, 1) > 0 Or Mid(szamformazva, 11, 1) > 0 Or Mid(szamformazva, 12, 1) > 0) Then szambetuvel = szambetuvel & " - " End If End If szam1 = Mid(szamformazva, 12, 1) szam10 = Mid(szamformazva, 11, 1) szam100 = Mid(szamformazva, 10, 1) If szam1 > 0 Or szam10 > 0 Or szam100 > 0 Then szam100 = szam_szaz(CStr(szam100)) szam10 = szam_tiz(CStr(szam10), CStr(szam1)) szam1 = szam_egy(CStr(szam1)) szambetuvel = szambetuvel & szam100 & szam10 & szam1 End If
End Function
Private Function szam_egy(szam As String) Select Case szam Case "0" szam_egy = "" Case "1" szam_egy = "egy" Case "2" szam_egy = "kettő" Case "3" szam_egy = "három" Case "4" szam_egy = "négy" Case "5" szam_egy = "öt" Case "6" szam_egy = "hat" Case "7" szam_egy = "hét" Case "8" szam_egy = "nyolc" Case "9" szam_egy = "kilenc" End Select End Function
Private Function szam_tiz(szam As String, szam2 As String) If szam2 > 0 Then Select Case szam Case "0" szam_tiz = "" Case "1" szam_tiz = "tizen" Case "2" szam_tiz = "huszon" Case "3" szam_tiz = "harminc" Case "4" szam_tiz = "negyven" Case "5" szam_tiz = "ötven" Case "6" szam_tiz = "hatvan" Case "7" szam_tiz = "hetven" Case "8" szam_tiz = "nyolcvan" Case "9" szam_tiz = "kilencven" End Select Else Select Case szam Case "0" szam_tiz = "" Case "1" szam_tiz = "tíz" Case "2" szam_tiz = "húsz" Case "3" szam_tiz = "harminc" Case "4" szam_tiz = "negyven" Case "5" szam_tiz = "ötven" Case "6" szam_tiz = "hatvan" Case "7" szam_tiz = "hetven" Case "8" szam_tiz = "nyolcvan" Case "9" szam_tiz = "kilencven" End Select End If End Function
Private Function szam_szaz(szam As String) Select Case szam Case "0" szam_szaz = "" Case "1" szam_szaz = "száz" Case "2" szam_szaz = "kétszáz" Case "3" szam_szaz = "háromszáz" Case "4" szam_szaz = "négyszáz" Case "5" szam_szaz = "ötszáz" Case "6" szam_szaz = "hatszáz" Case "7" szam_szaz = "hétszáz" Case "8" szam_szaz = "nyolcszáz" Case "9" szam_szaz = "kilencszáz" End Select End Function
Ezt modulba kell menteni és akkor munkafüzetből meghívható a "szambetuvel" függvény.
2.) Miként a 38512-ben írtam képletekkel dolgozik. A makró arra kell majd, hogy az ábra szerinti bemenetre rakja a számokat, és az eredményt kimenetből átrakja a neked megfelelő helyre.
3.) A régi verzióban a szerző erre tökéletes példákat is adott. Gondolom azzal, hogy közzéteszem a régit, semmi tilalmast nem teszek.
Próbáltam a makrót elkészíteni de rengeteg hibával küzdök (az AI sem tud segíteni, legalább is a problémát nem tudja megoldani) :) De a tiédben működik minden ahogy nézem.
Ha van rá lehetőség akkor kód szinten megkaphatom a makrót, mert be kellene illesztenem egy másik fájlba.
Én lassan kezdem feladni. A lapvédelmet sikerült feloldanom, de ez nem változtatott semmit a megjelenésen. Ugyanúgy nem látszik semmi a megoldás részleteiről.
Még egy dolgot találtam, ami érdekes lehet, de azzal végképp nem tudok mit kezdeni. Amikor kibontottam a fájlt és töröltem a lapvédelmet, akkor rákantintottam az xls fájlra (https://drive.google.com/file/d/14RBH4QPLWnoR8Em8-bz3GvRRsfDoi094/view?usp=sharing), akkor megjelent egy kód, ami lehet, hogy a kulcsa a fájl használatának, csak ezt én már nem ismerem.
Egy lapvédelmet kb. fél perc törölni. Makró védelmet még sohasem próbáltam törölni, de gondolom az sem lehet bonyolultabb.
Nem árulok el azzal nagy titkot, ha azt mondom, hogy az xlsx formátum egy tömörített formátum. Így átnevezés után kicsomagolható. A kicsomagolt fájlok közül meg kell keresni a problémásat (talán sheet1, sheet2, ... elnevezéssel szerepelnek) és sima egyszerű jegyzettömbbel kell megnyitni. Majd meg kell keresni benne a jelszavas védelem hash kulcsát és nemes egyszerűséggel ki kell belőle törölni. Ha Notepad++-al nyitod meg, akkor jelzi is kulcsot tartalmazó elem végét is, ha pont az elejére állsz, mert sima xml (ha jól emlékszem) a kiterjesztés és azt tudja alapból.
Nem vagyok gép előtt, ezért nem tudom most fejből, pontosan melyik xml részt is kell törölni.
Anno volt egy-két partnerünk, aki az aktuális árjegyzékét mindig jelszavas védelemmel látta el és nem lehetett benne semmit sem kijelölni. Így viszont elég macerás volt átvenni az árakat képlettel. Így elég hamar tökélyre fejlesztettem a jelszó törlő képességemet. Ha tudja az ember, hogy mit keres, akkor nagyon hamar megtalálja az xml-ben és tényleg nem több fél percnél a kicsomagolástól számítva az ismét excellel megnyitható jelszó mentes fájlig.
Arra már nem emlékszem, hogy erre valamikor magamtól jöttem-e rá vagy úgy olvastam valahol.
Tavaly jártam egy szakmai továbbképzésre, aminek nagy része e-learning volt. A tananyagokat pdf formátumban osztották meg velünk One driveon keresztül. 7 fájlból 4-nél le volt tiltva a megnyitáson kívül minden (mentés, nyomtatás, kijelölés, stb...). Ekkor viszont eszembe jutott, hogy még a WIN98-as vagy korai XP-s időszakban, amikor marha lassú volt otthon a netünk, hogyan töltöttem le youtube-hoz hasonló videó megosztókról filmeket. Ugyan azzal a módszerrel simán le lehetett menteni one driveról is a pdf tananyagot. Ha érdekel, akkor e-mailben megírom. Ez egy olyan módszer, ami nem visszakövethető és több mint negyed évszázada működik nekem.
Köszönöm, ezt ismerem, eddig eljutottam, nekem is működik. Csak a feloldás módja érdekelt volna. Sőt azon a honlapon egy sor érdekes megoldás van, amik kipróbálhatók, de nem elérhetők a megoldások. Ezért remélem, hogy m54-b barátunknak van korábbi - nem védett - verziója.
Nekem 0365 van, a letöltés után a fájlon állva jobb egérgomb - tulajdonságok - alul a tiltás feloldása kocka bepipálva. Utána megnyitva és működik: Csak a sárga cellába (G5) tudsz írni számot és lent kiírja szöveggel.
1. Ha nincs a köztes cellákban olyan információ, ami bezavarhatna az eredménybe, akkor egyben megadod a teljes tartományt.
2. Ha az 1. pont nem járható, akkor minden tartományra külön felírod a függvényt és összeadod az eredményt =Darabha(vmi,1.tartomány9+Darabha(vmi,2.tartomány)..stb.
Hát én nem értem. Letöltöttem a fájlt onnan, amit te írtál, de nekem ez jelenik meg:
Nem látok munkalapokat, és az általad beírt Munka1!B3, Munka2!D21 jellegű hivatkozások hibaüzenetet generálnak. Biztos, hogy ugyanazt a fájlt látjuk? Vagy neked van valami más (régebbi) verziód?
Azt látom, hogy a szerző még Excel 2002 verzióval készítette, és 2019-ben frissítette utoljára. A freemail-es email címére nem is merek megpróbálni írni. Mitől lenne még most is elérhető?
Azt hogy sikerült megoldania a szerzőnek, hogy se a munkalapok, se a makró nem érhető el? Ügyes, de így sajnos nem használhatók a demói, mivel csak a végeredmény látszik.
Sziasztok, lehet, hogy a fórum életében már felmerült ez a kérdés, pár oldalt át is néztem de nem találtam.
Szóval az lenne a kérdés, hogy makró nélkül megoldható-e az, hogy ha beírok egy cellába egy számot (számokkal), akkor mondjuk alá/mellé kiírja, betűvel is ?
Létezik erre beépített függvény, vagy valami más megoldás ?
A Word körlevélre én is gondoltam, csak nem akartam belemenni a részletekbe. Ez a technika akkor lehet érdekes, ha rendszeresen és tömegesen kell ilyen munkalapokat kiállítani. Ebben az esetben nem közvetlenül írod a munkalapba az adatokat (a fejlécbe a szerelést végző és egyéb 8 adatot, valamint a listában lévő 30-40 adatot), hanem egy egyszerű Excel táblába (itt majd minden sor egy munkalap adatait tartalmazza). Munkalapként pedig készítesz egyetlen Word dokumentumot (munkalap sablon) ebben jelölöd ki, hogy az Excel tábla melyik oszlopának adata kerüljön a munkalap megfelelő rubrikájába.
Innentől pedig a Word levelező egyetlen paranccsal készíti el a több száz/ezer munkalapot. Akár közvetlenül nyomtatóra, akár fájlba (ez biztonságosabb), amiben kinyomtatás előtt még egyszer tudod ellenőrizni, hogy jó lett-e a kitöltés.
Ebben tudnék segíteni, ilyenekkel rendszeresen dolgozom.
Makróval meg lehet oldani viszonylag egyszerűen. A "gyors" megoldással lassú a nyomtatás szerintem. Van bonyolultabb makrós megoldás is, azzal gyors is a nyomtatás.
Az egyszerű makróval csak a sorszámokat módosítod egyesével és egyesével küldi rá a nyomtatóra. Szerintem ilyenkor lassú lesz a nyomtatás.
A bonyolultabb megoldás, hogy megszerkeszted, ahogy szeretnéd majd a makró csinál belőle egy másik munkalapra mondjuk 200 másolatot és megkérdezi (valamint felajánlja a következő) sorszámot. Ilyenkor a formázási beállítások is másolhatóak.
Persze azt is meg lehet oldani, hogy ne 200 darabot nyomtasson, hanem csak 1 db-ot, ami mondjuk elázott a kávétól.
Én már tudom mit szeretnél, egy "szigorú számadású" szervíz jegyzőkönyvet nyomtatni, ahol a jegyzőkönyv sorszáma változik csak, a többi nem.
Viszont nem vagyok gép közelben, és fejből nem tudok rá megoldást... Ha estig nem jön megoldás, akkor foglalkozok vele.
De ha már így megosztottad ezt a dokumentumot, akkor "belekötök" két dologba.
A kondenzátor mértékegysége előtt a prefixum nem M (mega), hanem m (milli).
A gumivezetékeknél pedig, ha tartalmaz zöld/sárga eret, akkor 3G1,5 a jelölés, nem pedig 3X1,5. (És nem kábel, hanem vezeték, mert a szabvány szerint a kábel az, ami közvetlenül mehet földbe. Ezt tömlőszerű vezetéknek hívja a szakirodalom)
Szóval megpróbálom megfogalmazni. Van egy A4 lap méretű munkalap(ezt adnám a szerelő fiúk kezébe) erre kellene egy emelkedő sorszám. Nem tudom, hogyan kellene rárakni, úgy hogy legyen belőle legalább
Számomra nem derül ki a kérdésedből, hogy a sorrendezéssel van-e a problémád, vagy a nyomtatással. Na meg mit is jelent, hogy A4 méretű a munkalapod? Ha azt, hogy A4-es lapra szeretnéd nyomtatni, az beállítható. Ha azt szeretnéd, hogy a fejlécet (első sor) minden lapon nyomtassa ki, az is beállítható.
Olyan kérdésem lenne, hogy van egy A4 méretű "Munkalapom".
Ezt kellene valahogy úgy kinyomtatnom, hogy legyen rajta egy emelkedő sorszám raktárszám/év/emelkedő sorszám 00001-től legalább 2000-ig.
Őszinte leszek lövésem sincs, hogyan fogjak hozzá. Kb ott tartok, hogy 100X egymás alá másolom a munkalapot és úgy számozom be, de ez így egy kicsit sziszifuszinak tűnik.
VBA-val próbálom dátum szerint csökkenő sorrendbe rendezni. A dátum oszlop a "B" oszlop.
Ezt úgy csinálom, hogy mindig megszámoltatom a "B" oszlop sorait és aztán rendezem csökkenőbe. De valamiért nem "bővíti a kijelölést" és a táblázaton belül csak a "B" oszlop adatait rendezi sorba.
Üdv, Pivotban kellene egy nagyon alap segítség (30+ év Excel, 30 perc Pivot tudás :).
Forgalmi adatokból létrehoztam az első pivotomat. Az egyik soromban dátumok vannak. Az Excel a csoportosításnak (hónapok) automatikusan mmm, a bontásnak (napok) nn-hhh (pl. 02-jan) formátumot adott, nekem viszont hhhh (pl. január) és hhhh nn, nnn (pl. január 25, kedd) kellene.
Rámegyek a sorra, ott Mezőbeállítások -> Számformátum, kiválasztom a megfelelőt, OK -> OK és nem történik semmi, továbbra is nn-mmm formátumban jelennek meg az adatok.
Az adatforrásban Excel dátumok vannak (pl. 45741) éééé-hh-nn formázással, az Excel magyar és a területi beállítások is magyarországiak (ezért sem értem, hogy miért jön a 02-jan formátummal). Mit csinálok rosszul?
Több fórumon is olvastam, hogy ez a probléma másnál is felmerült több Excel verziónál. Én egy 2016-os verziót tudtam kipróbálni, de volt aki 2007-esen tapasztalta. Nem tudom, hogy az eredeti fájlok melyik Excelben készültek, mert később változtattam a fájltípust, de klónoztam is őket.
Talán a Windows-ban kell keresni a hibát, de ez magas nekem, mint libának a kerítés.
Amit most kipróbáltam: Egy fájlt, amin volt projektvédelem, átneveztem, a régi lapokat kitöröltem, új lapkat, új funkciót adtam a fájlnak, megváltoztattam a projekt védelem jelszavát, és működik. Ugyanakkor mellette kreáltam egy új munkafüzetet, ugyanúgy berendeztem, mint a másikat, és nem tudom rá kiadni a projekt védelmet. Néztem az Excel beállításait is, de látszólag minden ugyanaz.
Van egy munkafüzetem, ahol egy fő munkalapra kerülnek számok, majd ezeket a további munalapokra függvény olvassa be onnan, hogy véletlenül se kerüljön a helyestől eltérő szám oda, ahol a fő munkalapról kell a helyes értéket bemásolni.
Sajnos előfordul, hogy a felhasználók elfelejtkeznek erről, és a függvényt átírják számra, ami tévedésekhez vezethet.
Sajnos nem tudok olyan ellenőrzést, hogy egy adott cella még függvényt tartalmaz-e, vagy már tévedésből át lett-e javítva számmá.
A CriteriaRange "táblázatot" függvényekkel töltöm fel, különböző szabályok szerint, többnyire egybeágyazott HA + ÉS/VAGY függvényekkel.
Ha beadok minden adatot, akkor mondjuk kijön az alábbi táblázat, mint CriteriaRange = A1:H6
Ahol "X"-ek vannak, ott a függvény eredménye X, mivel nincs feltétele a szűrésnek. Jelen példa szerint az összes adatot, ami Típus = B és oszlop7=15 kellene, h kilistázza eredményül. De vmiért semmit nem hoz eredményül.
Nem tudom miért nem :-(
(az X nem szerepel az adathalmazban, mint érték, azért rakatom be a függvényekkel, hogy azokra a sorokra ne keressen rá)
Évek óta használom az excelt a parancssor meghívására. Viszont most beleütköztem abba a problémába, hogy olyan parancsot szerettem volna futtatni amihez rendszergadaként kell futtatni a parancssort.
Kis kutatómunkával találtam rá megoldást. Ha esetleg másnak is szüksége lenne rá, akkor itt van a kód.
Private Sub RunAsAdmin(ByVal parancs As String) Dim oShell As Object Set oShell = CreateObject("Shell.Application") oShell.ShellExecute "cmd.exe", "/k " & parancs, , "runas", 1 End Sub
A munkám folyamán sokszor kell IP címet módosítanom, amit eddig kézzel oldottam meg, de meguntam, így írtam rá excelben makrót :) Egy listából kiválasztom a megfelelő paramétert és a makró teszi is a dolgát.
A references részen nálam 4 dolog van bekapcsolva:
-visual basic for applications
-Microsoft Excel 16.0 object library
-OLE Automation
-Microsoft Office 16.0 object library
Ha jól emlékszem, akkor az object library-ket most kapcsoltam be hozzá, de nem vennék már rá mérget.
Az érvényesítés beállításakor a hibajelzés lapon kiveszed a pipát. Ekkor kiválasztod a listából a neked megfelelő sablont, majd utána módosítod, ahogy akarod.
Sziasztok! Lassan időpontot foglalhatok a hülye kérdések minisztériumába (Monty Python után szabadon). A mostani agymenésem az, hogyan lehetne valami prediktív szövegbevitel szerűséget létrehozni az excelben. Arra gondolok, hogy adatérvényesítés jelleggel egy legördülő listából ki tudnám választani egy cella szövegének általános tartalmát, de utána hibaüzenet nélkül módosítani tudjam a szöveget. Nyilván ilyenkor az adatérvényesítés hibát jelez.
Ezt csak úgy itt hagyom, a köz okulására. Az Excel 2021 fantasztikus, többszálú feldolgozása (igen, be van kapcsolva az összes mag). Ez egy 10 magos, 20 szálon dolgozó 10900KF és 64GB RAM. Az Excel képes 2 magon és 4 szálon futni, azon is csak hézagosan. Ha én lennék a Microsoft, az Excel rég a grafikus procin (3080Ti) futna, meg az összes CPU magon.
Sajnos nem segít. Valóban üres volt még a projekt, de hiába írtam bele, nem tudom lezárni betekintés elől. Még annyit, hogy találtam egy régi fájlt, amiről azt írta az Excel hogy megbízhatatlan és csak akkor nyissam meg, ha..., mivel a fájlnévből egyértelmű, hogy az enyém volt, megnyitottam, de a projektbe nem tudok belenézni. Rá se kérdez a jelszóra, csak kiírja, hogy "project is unviewable".
Jómagam WIN10-et és Excel2021-et használok. Nem bírtam reprodukálni a hibát.
Egy esetben nem állított be jelszót, ha teljesen üres volt a VBA project. De amint írtam bele valamit, akkor már be tudtam állítani rá jelszavas védelmet.
Sub FormatDate(cell As Range, diff As Long) Debug.Print "Színezés - diff: " & diff If diff = 0 Then cell.Interior.Color = RGB(0, 0, 255) ' Kék - pontos egyezés Debug.Print "Kék: " & cell.Address ElseIf diff > 0 Then cell.Interior.Color = RGB(255, 0, 0) ' Piros - már lejárt Debug.Print "Piros: " & cell.Address ElseIf diff >= -30 Then cell.Interior.Color = RGB(255, 255, 0) ' Sárga - 30 napon belül Debug.Print "Sárga: " & cell.Address Else cell.Interior.Color = RGB(0, 255, 0) ' Zöld - 30 napon túl a jövőben Debug.Print "Zöld: " & cell.Address End If End Sub
A kérdést sem tudom feltenni:( De nem működik a színezés:( A lényeg ogy évváltás szökőév stb figyelembevételével valami miatt nam az igazi.
A lejárt dátum piros
ami hamarosan lejár sárga (ez esetben 30 napos intervallum)
aznapi kék;
ami meg több mint 30 napig érvényes legyen zöld:) Aktuális dátumhoz viszonyítva
Köszönöm!
Sub LejaroEllenorzes() Dim wsTotal As Worksheet Dim wsLejaro As Worksheet Dim lastRowTotal As Long Dim lastRowLejaro As Long Dim i As Long Dim currentDate As Date Dim cellValue As String Dim diffK As Long, diffL As Long, diffO As Long, diffR As Long Dim találatCount As Long Dim dateK As Date, dateL As Date, dateO As Date, dateR As Date
' Munkalapok beállítása Set wsTotal = ThisWorkbook.Sheets("Total") Set wsLejaro = ThisWorkbook.Sheets("Lejárat")
' Az aktuális dátum meghatározása currentDate = Date
' Lejárat munkalap törlése a korábbi adatok eltávolításához wsLejaro.Cells.Clear
' Az oszlopfejlécek másolása a Total munkalapról a Lejárat munkalapra wsLejaro.Cells(1, 1).value = "Név" wsLejaro.Cells(1, 2).value = "Szül. dátum" wsLejaro.Cells(1, 3).value = "EBK alap" wsLejaro.Cells(1, 4).value = "EBK MIR" wsLejaro.Cells(1, 5).value = "Orvosi érvényes" wsLejaro.Cells(1, 6).value = "Poliol spec. oktatás érv."
' A Total munkalapon az utolsó sor meghatározása lastRowTotal = wsTotal.Cells(wsTotal.Rows.Count, "Y").End(xlUp).row Debug.Print "Utolsó kitöltött sor az Y oszlopban: " & lastRowTotal
' Az Lejárat munkalapon az első üres sor meghatározása lastRowLejaro = 2 ' Az adatok a második sortól kezdődnek
' Találatok számlálója találatCount = 0
' A Total munkalapon végigiterálunk For i = 2 To lastRowTotal ' Ellenőrizni, hogy az Y oszlop "aktív" vagy "inaktív" cellValue = wsTotal.Cells(i, "Y").value Debug.Print "Row " & i & ", Y oszlop értéke: " & cellValue
If cellValue = "Aktív" Then ' Ellenőrizni, hogy a dátumok valódi dátumok és nem üresek If IsDate(wsTotal.Cells(i, "K").value) And wsTotal.Cells(i, "K").value <> "" Then dateK = DateValue(wsTotal.Cells(i, "K").value) diffK = DateDiff("d", dateK, currentDate) Debug.Print "K oszlop dátuma: " & dateK & ", diffK: " & diffK Else diffK = -9999 ' Ha nincs érvényes dátum, beállítunk egy nem létező eltérést Debug.Print "K oszlop érvénytelen dátum" End If
If IsDate(wsTotal.Cells(i, "L").value) And wsTotal.Cells(i, "L").value <> "" Then dateL = DateValue(wsTotal.Cells(i, "L").value) diffL = DateDiff("d", dateL, currentDate) Debug.Print "L oszlop dátuma: " & dateL & ", diffL: " & diffL Else diffL = -9999 ' Ha nincs érvényes dátum, beállítunk egy nem létező eltérést Debug.Print "L oszlop érvénytelen dátum" End If
If IsDate(wsTotal.Cells(i, "O").value) And wsTotal.Cells(i, "O").value <> "" Then dateO = DateValue(wsTotal.Cells(i, "O").value) diffO = DateDiff("d", dateO, currentDate) Debug.Print "O oszlop dátuma: " & dateO & ", diffO: " & diffO Else diffO = -9999 ' Ha nincs érvényes dátum, beállítunk egy nem létező eltérést Debug.Print "O oszlop érvénytelen dátum" End If
If IsDate(wsTotal.Cells(i, "R").value) And wsTotal.Cells(i, "R").value <> "" Then dateR = DateValue(wsTotal.Cells(i, "R").value) diffR = DateDiff("d", dateR, currentDate) Debug.Print "R oszlop dátuma: " & dateR & ", diffR: " & diffR Else diffR = -9999 ' Ha nincs érvényes dátum, beállítunk egy nem létező eltérést Debug.Print "R oszlop érvénytelen dátum" End If
' Ha bármelyik dátum 30 napon belül van, vagy már lejárt és 30 napon belül volt If (diffK >= -30 And diffK <= 30) Or (diffL >= -30 And diffL <= 30) Or (diffO >= -30 And diffO <= 30) Or (diffR >= -30 And diffR <= 30) Then ' A találatokat átmásolni a Lejárat munkalapra wsLejaro.Cells(lastRowLejaro, "A").value = wsTotal.Cells(i, "A").value ' Név wsLejaro.Cells(lastRowLejaro, "B").value = wsTotal.Cells(i, "E").value ' Szül. dátum wsLejaro.Cells(lastRowLejaro, "C").value = wsTotal.Cells(i, "K").value ' EBK alap wsLejaro.Cells(lastRowLejaro, "D").value = wsTotal.Cells(i, "L").value ' EBK MIR wsLejaro.Cells(lastRowLejaro, "E").value = wsTotal.Cells(i, "O").value ' Orvosi érvényes wsLejaro.Cells(lastRowLejaro, "F").value = wsTotal.Cells(i, "R").value ' Poliol spec. oktatás érv.
' Dátumok formázása színnel Call FormatDate(wsLejaro.Cells(lastRowLejaro, 3), diffK) ' 3 = C oszlop Call FormatDate(wsLejaro.Cells(lastRowLejaro, 4), diffL) ' 4 = D oszlop Call FormatDate(wsLejaro.Cells(lastRowLejaro, 5), diffO) ' 5 = E oszlop Call FormatDate(wsLejaro.Cells(lastRowLejaro, 6), diffR) ' 6 = F oszlop
' Sorok növelése a következő találatra lastRowLejaro = lastRowLejaro + 1 találatCount = találatCount + 1 End If End If Next i
' Ellenőrizzük, hogy van-e találat If találatCount = 0 Then MsgBox "Nincs találat!" Debug.Print "Nincs találat!" Else MsgBox találatCount & " találat van." Debug.Print találatCount & " találat van." End If
' Oszlopok szélességének beállítása a Lejárat munkalapon wsLejaro.Columns("A:F").AutoFit End Sub
Sub FormatDate(cell As Range, diff As Long) Debug.Print "Színezés - diff: " & diff If diff = 0 Then cell.Interior.Color = RGB(0, 0, 255) ' Kék - pontos egyezés Debug.Print "Kék: " & cell.address ElseIf diff < 0 Then cell.Interior.Color = RGB(255, 0, 0) ' Piros - már lejárt Debug.Print "Piros: " & cell.address ElseIf diff <= 30 Then cell.Interior.Color = RGB(255, 255, 0) ' Sárga - 30 napon belül Debug.Print "Sárga: " & cell.address Else cell.Interior.Color = RGB(0, 255, 0) ' Zöld - 30 napon túl a jövőben Debug.Print "Zöld: " & cell.address End If End Sub
Sajnos csak makróval megy a módosítás, mert csak úgy lehet összekötni a változásokat.
A munkalap kódlapjára másold be ezt:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = 11 And Target.Column = 1 Then Target.Offset(0, 1).Value = Application.Names(Target.Value).RefersToRange.Cells(1) End If If Target.Row = 11 And Target.Column = 2 Then Target.Offset(0, 1).Value = Application.Names(Target.Value).RefersToRange.Cells(1) End If End Sub
(Lapfülön jobb egérgomb - kód megjelenítése)
Ezután engedélyezned kell a makrók futtatását és makróbarátként kell mentened a fájlt.
Többszintű lista adatérvényesítésével kapcsolatban van kérdésem. Megoldható-e, ha egy magasabb szintű listaelemet módosítok, hogy az alacsonyabb rendűek törlődjenek? Na ez még nekem sem érthető... Inkább egy példa. Csináltam egy példa táblázatot. Első nekifutásra kiválasztottam a "Gyümölcs"-"Körte"-"Vilmos" adatsort. Eddig OK. Ám ha a legfelső szinten a Gyümölcsöt Zöldségre változtatom, a kiválasztás többi eleme (Körte-Vilmos) változatlan marad ami nyilván nem jó. Mit lehet tenni ez ellen?
Nem szeretném most arra terelni az eszmecserét, hogy mi lesz akkor, ha elmész/elküldenek a cégtől. Nélkülözhetetlen/pótolhatatlan ember nincs. :(
A védelemről:
Az Excel védelme alapvetően a felhasználók "véletlen" módosításainak megakadályozását szolgálja, elég szofisztikált módon, de nem megkerülhetetlenül/feltörhetetlenül.
A makrókat is lehet védeni a VBA nézet Tools - VBA project Properties - Protection fülön jelszóval is. De ez sem feltörhetetlen.
Ezért biztosabb az, ha magát a fájlt olyan környezetbe helyezzük, ahol a hozzáféréseket, láthatóságot vagyis a külső védelmet lehet erős eszközökkel megoldani, amire minden rendszerben, így MS-nél is megvannak a szabványos lehetőségek.
Nem küldözgetjük a fájlt, csak a végeredményt, pl. PDF formátumban mentve.
Lehet azt tenni, hogy az adatokat, amire szüksége van, külön fájlban tartjuk és csak a szükséges értékeket kérdezzük le a feldolgozáshoz. Sőt azt is lehet, hogy ez a feldolgozás is külön fájlban van. Az első fájl csak arra szolgál, hogy a hozzáférést ellenőrizzük és elindítsuk a másik /akár rejtett/, érdemi részt tartalmazó munkafüzetet.
Ez egyrészt így van! A fórum segítsége nélkül, olyan formában, ahogyan kérik tőlem, nem tudtam volna mindezt összerakni, hiszen hiányzó láncszemek voltak a folyamatban, amiket a fórumozók oldottak meg. Ezért baromi nagy köszönet Nekik!
Másrészt, ha nagyon le akarjuk sarkosítani a dolgot, akkor kellett hozzá az excel, ami a Microsoft szellemi terméke, szóval az érdem az övé, ha így nézzük. Persze ahhoz meg kellett egy gép, amin futnak a Microsoft termékek és a gép sem úgy született, hogy valaki egyik este lefeküdt, majd másnap meg felébredt és összerakott egy komplett, használható számítógépet, hanem több száz ezer ember folyamatos ötletei, fejlesztése, „szellemi termékének” a végeredménye. + a rengeteg youtubos video és feltöltőjük, amiket átnéztem, mert ha kicsi is az excel tudásom, én sem úgy születtem meg, hogy ez már a rendelkezésemre állt és bizony ők is segítettek benne az évek alatt…
Persze kellett hozzá egy keresőmotor is az interneten, hogy te is és én is rátaláljak a fórumra, az is szellemi termék. Meg persze az idex.hu is, ahol én is és te is együtt használva más szellemi termékét, tudunk most beszélgetni egymással.
Alapvetően a levédés nem az enyém, hanem az ő ötletük volt. Itt nyílván elsősorban ők féltik a céges adatokat. Szóval, ha nekik ez a megoldás jó, akkor nekem mindegy igazából.
"(béremelés, egyszeri jogdíj...stb.)" Ez sajnos nálunk nem kivitelezhető. Nagyon le vagyunk még maradva vállalati kultúrában a németektől / USA-tól. Ilyenért itt nem adnak nekem jogdíjat.... :(
egyelőre csak a cégen belüli pozíciómat tudom növelni vele, ami összefügg a fentiekkel is, hogy mi lesz akkor ha elmegyek.
Én örülök, hogy alapvetően olyan szituban vagyok most kicsit, hogy nekik van most rám szükségük elsősorban.
Ez egy kb 25-30 lépcsőből álló adathalmaz rendezés, átalakítás, műveletek elvégzése rajta, szűrés stb, ahol a lépések értelem szerűen egymásra épülnek és a sorrend nem változtatható. - Ez az, amit én raktam össze. És igazából maga az ötlet is tőlem származott, mert annyira ismertem az excelt, hogy átlássam, ezt vele meg lehetne csinálni. Ez az, amit viszont én nem feltétlenül szeretnék, hogy mások átlássanak és rajtam kívül más is össze tudja rakni, itt megint visszacsatolva a cégen belüli értékemre.
Alapvetően én örülök neki, hogy tudok segíteni a cégnek, ahol dolgozom, ahonnan a megélhetésem jön. Azzal, hogy ezt lehetőleg le kell védeni, nekem is azonosulnom kell, hiszen én ilyenkor mindig mint alkalmazott szerepelek, nem pedig mint egy külső szoftverfejlesztő mondjuk és követnem kell a vezetőség kérését.
Szia! Csak egy kérdésem van: Főnökeid mit szólnának ahhoz, ha bejelentenéd, hogy holnaptól nem dolgozol a cégnél, aminek következtében a szuperül kidolgozott, titokban tartott remek excel tábládat nem tudnák tovább használni? HIszen senki sem ismerheti, hogyan és milyen logikával működik.
Szerintem nem jó úton indultál el. Tárgyald meg a vezetőiddel, hogy az általad/általatok kifejlesztett rendszert milyen feltételekkel használhatja a cég - tudod létezik a szellemi termék tulajdon és annak védelme, ezért milyen juttatás (béremelés, egyszeri jogdíj...stb.) jár neked ezért.
Egyébként a munkafüzetbe építhetsz be jogosultságokat, ami alapján eldöntheti a makró, ki mire jogosult.
Az összes adatot tartalmazó munkalapot átteheted egy külön munkafüzetbe és a háttérben megnyitva számolhatsz vele.
Ha pedig igaz az, amit Garashannak írtál a munkatársak Excel ismeretéről, akkor semmi félnivalód nincs.
Üdv.
Ps. Azt gondolom tudod, hogy minden szoftverhez használati útmutatót illdomos adni írásban. Sőt a jövőbeni fejlesztések/esetleges javítások érdekében nem ártalmas egy pontos rendszer leírás készítése sem.
Igen, alapvetően hasonló dolgokban gondolkozom én is.
"bár azt nekem 10-15 mp eltüntetni" Szerencsére vagy nem szerencsére, alapvető, nagyon kezdő excel tudás van mindenkinek, ezért automatizálok mindent, gombokra lesarkítva. Nem tudják mi az, hogy makró stb. Kicsi az esélye, hogy bárki külsőst megkérnek, nem lehet-e feltörni a makrókat stb, mivel foglmuk sincs róla... így szerintem nem mennek tovább majd, hanem elfogadják, hogy oké, ezzel nem lehet mit kezdeni, csak "használni". Legalábbis ebben bízunk, ebből indulunk ki.
használni kell a file-t több mindenkinek. többfajta lekérdezésekből rakunk össze adatokat/információkat, amit aztán szűréssel kinyerve, csak a lényegi információt - eredményt használunk tovább. De ezt napi szinten változtatva.
Azt nem akarjuk, hogy össze tudják rakni, hogy hogyan jön ki a végeredmény + az alap adathalmazokat se lássák, hogy miből jön össze a végeredmény. (mi a folyamata az alap adatokból összeállításnak)
+ ha vki elmegy a cégtől, akkor ezt tovább vigye és felhasználja
Viszont az eredményt meg a napi munkához tudják használni, hogy vki könnyebb, gyorsabb, hatékonyabb legyen, mint az, ahogyan most dolgoznak.
Sejtem hogy arra gondolsz, hogy a pl. gmail asztali gépen betölti az excel előnézetét, ha csatolmányban van. Szerintem ez ellen nem igazán lehet védekezni. Legalábbis makró szinten egész biztosan nem, mert legjobb tudomásom szerint makrókat nem futtat a gmail.
De ha már úgyis telepakoltad makróval és azok szükségesek a működéshez is, akkor csináld meg úgy, hogy csak 1 darab munkalap van megjelenítve a munkafüzetben, az összes többit rejtsd el és jelszavazd le őket (bár azt nekem 10-15 mp eltüntetni) és makrók segítségével másolj át minden adatot arra az egy darab munkalapra. Lehet futtatni makrót automatikusan mentés előtt is, azzal pedig ki lehet pucolni azt az 1 darab munkalapot.
Most már tudom, hogyan lehet megcsinálni, hogy ne lehessen "másként menteni", ne lehessen "lementeni" + tudom azt is, hogy csekkolja, hogy csak akkro nyíljon meg a file, ha az elérési helye nincs megváltozva.
Most már csak arra kellene egy ötlet, hogy azt hogyan lehetne megcsinálni, ha e-mailben elküldi vki, akkor se működjön.
Lementeni nem lehet az e-mailből a gépre, de a levelező rendszerből, mit csatolmány, megnyílik az excel és mindig azt megnyitva tudják használni.
Esetleg erre vmi ötlet / módszer?
Mondjuk vmit szintén csekkoljon, ami nélkül nem nyílik meg, mert az is le van mentve valahová és azt is kellene mondjuk ugyan úgy elküldeni az emailben, de ezt nyilván nem tudja senki és azt nem küldik el. Esetleg vmi ilyesmi vagy hasonló? Szerintetek?
Illetve nem tudom, hogy a kérdezőnek mennyire tiszta a $ jel használata.
Ha az én vizualizált példámnál maradunk, akkor láthatod, hogy a szabály megadásánál nem használtam se az "A", se a "1" karakterek előtt dollár jelet. Ezáltal az érvényességben megadott első cellában, azaz a C1-ben a szabály az A1 tartalmát vizsgálja, míg a második cellában, a C2-ben pedig az A2 tartalmát vizsgálja.
Ha a képletem =A$1="igen" lett volna, akkor C1-ben, C2-ben, ... és C9-ben is az A1 cellát fogja vizsgálni. Azaz C1:C9 végig zöld lenne.
Vagyis a dollár jellel lefixáltuk az 1. sort.
Ha az A elé került volna dollár jel, akkor az az én példámat nem befolyásolta volna.
Viszont ha C1:D9 tartományt szerettem volna színezni az A oszlop értékeinek megfelelően, akkor kellett volna az "A" elé is dollár jel.
Másrészt, ha C1:D9 tartományt szerettem volna színezni a C oszlopot az A szerint, a D oszlopot pedig a B szerint, akkor nem kell elé dollár jel.
Gondolom csak elírás volt a részedről, az új sor kódja a 10-es.
Hogy a kérdező is értse, hogy miről beszélünk mindkét változatot megcsináltam neki.
A1 cellában van a szétszedendő szöveg
C1-ben az alt+enteres keresés, míg D1-ben a karakter(10)-es. Alatta pedig a használt képletek. Úgy ahogy a szerkesztő lécben is látszódnak. Azaz C2-ben van egy új sor.
Illetve vizualizáltam az automatikus formázás lépéseit is a kérdezőnek.
1. A képletet próbáld meg így írni: =bal(A1, Szöveg.keres(Karakter(160), A1)-1). Karakter(160) az Alt+Entert jelenti.
2. A feltételes formázást arra a cellára kell megadnod, amelyiknek változtatni szeretnéd a színezését. A formázás alapja viszont az a cella lesz, amelyikben a legördülő lista van!
Ha az A1 cellát formáznád és a legördülő a D1-ben van:
Kijelölöd az A1 cellát, utána Kezdőlap - feltételes formázás - új szabály - a formázandó cellák kijelölése képlettel
Tehát a feltételes formázás képletébe a legördülő cella címe legyen: pl. =$D$1=Igaz() zöld kitöltés. OK
Ezután - még mindig ki van jelölva az A1 cella, ismét új szabály =$D$1=Hamis() piros kitöltés OK
Azaz az A1 cellára két szabály van érvényben.
A szabályok szerkesztésében megnézheted, melyik szabály melyik tartományra vonatkozik.
Köszönöm, biztosan működnek, de én teljesen amatőr vagyok ezért bvbalami nem sikerül. :(
A képletedet gondolom egybe kell írni: =bal(A1, Szöveg.keres("", A1)-1) itt a két idézőjel között akár van akár nincs egy szünet (de gondolom nem az az ALT+ENTER) akkor is hibát jelez kijelölve már az első A1-t.
A szinezésnél az IGEN működik, csak nekem megjelenik a cellában az IGAZ felirat is, ami nem jó, mert az a cél, hohyha a NEM jelenik meg, akkor azért legyen pirossal szinezve a cella, hogy oda írjon be a kitöltő egy magyarázatot, hogy miért lett NEM a válasza. Azt nem értem, ha megcsinálom az IGEN-re, ugyanabban a cellában hogyan lehet megcsinálni a NEM-re is?
u.i.: remélem nem írtam el semmit, mert nem gépről írtam, hogy teszteljem is közben.
Az előző témához, pedig köszönjük a kedves szavakat. Utólag nem bánom, hogy a vissza pert kiírtam szóval is, mert csak most vettem észre, hogy a fórum motor kitörölte az összeset a hozzászólásomból... Olyan ritkán kell leírni, hogy el is felejtettem már, hogy azok törlődnek.
Ha képlettel akarod átmásolni, akkor arra van egyszerű megoldás:
Legyen az A1-ben a másolandó cella, akkor a függvény a következő:
=bal(A1, Szöveg.keres("
", A1)-1)
Nem elírás tényleg ALT+enter karakterre keresünk rá. A "-1" pedig azért kell, hogy az új sor karaktert ne másolja át az új cellába.
igen/nem alapján színezés másik cellában: a feltételes formázás lesz a barátod. Azon belül is a képlettel megadott változat. Először is jelöld ki azokat a cellákat, amiket színezni akarsz.
A függvényhez írd be, hogy '=A1="igen" ' A formázásnál pedig állítsd be a neked megfelelő formázást. Majd ugyan ezt csináld meg a "nem"-es változatra is.
Nem emlékszem, hogy melyik verziója az excelnek, de valamelyik a leokézés után átírta a függvényt új automatikus formázás létrehozásánál. De ha szerkeszted és újra beírod, akkor már jó lesz. Nyilván az A1 cellában feltételeztem az igen/nem szavakat.
Ha a cellában ALT+ENTER sortörés van, akkor hogyan tudom csak az első sort átmásolni egy másik cellába?
Ha egy cellánál választható legördülő lista van (pl. IGEN, NEM), hogyan tudom egy másik cella kitöltési színét megváltoztatni IGEN-nél Zöldre, NEM-nél Pirosra?
kipróbáltam és hiba nélkül lefutott Szóval nem tudom Garashan kódjával miért nem ment az előbb
valamit nyilván én toltam el
AMÚGY! Mindkettőtöknek köszönöm ismételten.
Nagyon nagy tudással rendelkeztek
+ segítően álltok mindenkihez
Ez a kettő egyben baromi ritka!
Nagyon hálás vagyok ( és szerintem a többiek nevében is szólhatok) az önzetlen és azonnali segítségért, amit itt ti ketten adtok (+ a többiek is, de ti ketten ahogyan követem egy ideje, viszitek a prímet)
Szia! Akkor mégsem megfelelően adtad meg az elérési utat.
A vizsgálathoz első lépés Excel beállításokban letiltod a makrókat.
Ezután megnyitod a fájlod.
If ThisWorkbook.Path <> "C:UsershalasDesktoptemp" Then MsgBox "Hiba a fájlban, a fájl bezáródik!" Application.DisplayAlerts = False ActiveWorkbook.Close SaveChanges:=False End If
részt így módosítod:
If ThisWorkbook.Path <> "C:UsershalasDesktoptemp" Then MsgBox ThisWorkbook.Path & vblf & "C:UsershalasDesktoptemp" ' ide a saját magad által használt elérési utat írd be. 'Application.DisplayAlerts = False "ActiveWorkbook.Close SaveChanges:=False
Stop End If
Ezután engedélyezed a makrók futtatását. Mented a fájlt. Lefuttatod az ellenorzes makrót.
Így látnif fogod, helyesen írtad-e be a feltételt. Ezt kijavítod a megfelelőre.
Ezután ismét lefuttatod.
Ha nem jelenik meg az üzenet, akkor jól csináltad.
Visszaírhatod az eredeti figyelmeztetést és kiveheted az aposztrofot a sorok elől ill. a Stop utasítást.
Köszi! sajnos vmiért nem megy, állandóan bezáródik :-( Pedig úgy adtam meg mindent, ahogyan mondtad nincs visszaper az utolsó mappa után elérési utat az információ - elérési út másolásából vettem
Private Sub Workbook_Open() ThisWorkbook.ellenorzes End Sub
Sub ellenorzes() If ThisWorkbook.Path <> "C:UsershalasDesktoptemp" Then MsgBox "Hiba a fájlban, a fájl bezáródik!" Application.DisplayAlerts = False ActiveWorkbook.Close SaveChanges:=False End If End Sub
Nyilván a C:... részt cseréld ki a te elérési útvonaladra. az utolsó mappa után ne tegyél vissza pert, ahogy látod a mintámban.
Ha elírod és úgy mented el, akkor csak a makrók letiltása után fogod tudni ismét megnyitni.
Ha biztosra akarsz menni, akkor az összes worksheet fülre is illeszd be ezt:
Private Sub Worksheet_Activate()
ThisWorkbook.ellenorzes
End Sub
Így elvileg nem csak megnyitáskor ellenőrzi az elérési utat, hanem ha aktiválod a munkalapokat is.
Igazad van valószínűleg. Szerintem is létezik hozzá kész program. Csak sok volt még az első hozzászólásomkor a nyitott pont is. Pl. az áruház nyitva tartása nem befolyásol semmit sem, ha előtte és utána is bent kell lennie a dolgozóknak, mivel számukra az pont ugyan úgy a munkaidejük része, csak éppen az nem derült ki, hogy előtte 1 órával kell-e érkezniük vagy éppen mennyivel.
Másrészt, ha az ember beosztás készítő programra adja a fejét, akkor utána kell olvasnia az aktuális jogszabályoknak, hogy ne legyen benne semmilyen törvénybe ütköző. Bár én azt vallom, hogy az átlag munkavállalónak amúgy is tudnia kellene a jogait és a kötelezettségeit is. Nagy részükkel én is tisztában vagyok, de amióta egyszemélyes EV-ként tevékenykedek azóta nem frissítem a tudásomat. Előtte volt olyan munkahelyem, ahol dolgoztam munkaügyisként is (ami kimerült munkaszerződés írásában és EFO-ban többnyire).
Tegnap éjjel elkezdtem "kézzel" csinálni beosztásokat. Hogy mégis hogyan jönne ki a matek. Olyan 6-8 ember kellene hozzá, de mivel sok a nyitott kérdés, így nagyobb energiát nem öltem bele.
Bocs, de ha jól értelmezem, a kérdező nem azért az Excel fórumba jött, hogy megismerje a munkaügyi kérdések problémáit (Legalábbis az első 7 pont alapján ez a gyanúm, bár a 7. pont utáni sort olvasva ebben elbizonytalanodtam).
Szóval inkább azt sejtem, hogy egy Excel makrót szeretne, ami megoldja ezeket. Viszont munkaügyi szoftver kérdésében laikusként az a sejtésem, hogy erre léteznek kész programok a piacon, és most a semmiből írni erre programot, meglehetősen nehezen lenne megoldható. Én biztos nem mernék belevágni.
Igen, ez járható út lehet. De megkerülhető, ha letiltásra kerülnek a makrók.
Persze, ha a makrók aktívan kellenek a dokumentum használatához, akkor nem tilthatóak le. Viszont, ha nem, akkor minden további nélkül letilthatóak és utána megnyitható a dokumentum az áthelyezés ellenőrzése nélkül.
abban tudnátok segíteni, hogy az excel file csak akkor legyen megnyitható, ha nem helyezték át?
Szóval ahová le van mentve, csak onnan. Ha áthelyezik, akkor hibára fusson és ne nyíljon meg.
Az elérési út beállítására gondolok, hogy azt csekkolja vba-ban, vagy valahogy gondolom így kellene, de nem igazán tudom, hogyan... Vagy ha más módszer?
Igen, én is így tudtam és a HR is elfogadta, amikor mondtam nekik, hogy a 6 órás műszakban nem szeretnék kivenni munkaközi szünetet, csak azért, hogy üldögéljek az öltözőben a kijelentkezésig még 20 percet.
Másik munkahelyemen pedig a munkaidő részét képezte. Azaz 8-tól 16-ig voltunk bent és 8 órát számoltak el ledolgozott időnek. (Papíron mondjuk 16:30-ig voltunk bent, nem is értem, hogy miért úgy írtuk a munkaszerződéseket...) Ott így mi sem éltünk vissza a helyzettel és akkor mentünk el kajálni, amikor úgymond nem volt sürgős dolog és ha kellett, akkor megszakítottuk az ebédet. Kicsi cég volt, összesen 3-an voltunk alkalmazottak és kialakult az a szokás, hogy reggelente munkaidő előtt együtt reggeliztünk és együtt is ebédeltünk. Addig úgymond megállt a munka. Nagyker volt a cég, így ha éppen nem esett be személyes vásárló vagy nem csörgött a telefon, akkor két feladat között meg tudtunk állni kajálni.
3: munkaidő-közi szünetet csak akkor kell tartani, ha több mint 6 órás a műszak. Legjobb tudásom szerint hat órásnál mondhatod a szünetre, hogy no, thanx.
Azt határozd meg, hogy egyszerre hány főnek kell bent tartózkodnia, akár sávosan is. Mert ennyi erővel mehetne reggel 2 ember, majd néhány óra múlva további 2 és le is van tudva a teljes nyitva tartás és a 4 fő.
OK
OK (Bár a franc se akar, csak azért +1 órát a munkahelyén dekkolni, mert annyi az ebéd szünet. Én biztosan kiharcolnám, hogy vigyék le a törvényi minimumra (20 percre). Egyszer dolgoztam egy helyen 6 órás műszakban, reggel 5:30-ra jártam. A HR mondta, hogy akkor 6 óra + 20 perc a bent töltendő idő. Én meg mondtam, hogy a 6 óra felett kötelező kiadni a munkaközi szünetet, így én azzal nem kívánok élni. Utána néztek a törvénynek, elfogadták, így otthon tudtam ebédelni)
Akkor határozd meg, hogy a dolgozó mennyivel menjen be hamarabb, mint a nyitva tartás és mennyivel maradjon tovább. Mivel az a rendes munkaidő része a számára.
Heti 2 pihenőnap kötelező, maximum 6 egymást követő nap után kötelező 1 nap pihenőidő.
Ezzel nehéz előre kalkulálni (értem mire gondolsz, de ha heti 40 órában foglalkoztatsz embereket, akkor ha napi 5-öt osztasz be, akkor jön ki a -20%-al a napi 4 ember. Nyilván lesz olyan, amikor 5 lesz bent egyszerre és olyan is, amikor csak 4.)
Az Excel korábbi változataiban ezeket tömbképletként kellett bevinni (Ctrl + Shift + Enter). Az új verziókban így az O365-ben is már saját maga felismeri, hogy tömbképletként kell megoldani, nem kell a külön billentyűkombó.
Már csak az volt a bajom, hogy ha beírtam a példaképletet, #ÉRTÉK! hibaüzenetet kaptam. Aztán rájöttem, hogy a magyar excel más elválasztó karaktereket használ mint az angol (tizedes pont helyett vesszőt, elválasztó vessző helyett pontos vesszőt stb.). Nagy sokára találtam egy példa táblázatot, ahol kiderült, hogy a hatványok együtthatóit (a kapcsos zárójelben levő számokat) a magyarban hanyatt törtvonallal "" (alt-Q) kell beírni. És szuper jól működik a függvény, nem kell tömb képletet használni, ha simán egy cellába beírja az ember a lin.ill függvényt és a képletben megadja hányadfokú trendvonalra kíváncsi, az együtthatókat automatikusan egymás melletti cellákba írja.
Ez szerintem szuper. Még nem találkoztam korábban a LIN.ILL függvénnyel, most ránéztem a helpre. Ott is van róla szó a legvégén, de ez a magyarázat kifejezetten tetszik. Dícsérjük meg a MS-t, ritkán adódik rá lehetőség. Ez sokkal egyszerűbb, mint makrókkal operálni.
Köszi, kipróbálom! Időközben írtam a Microsoft supportnak is, és csodák csodája 24 órán belül válaszoltak. Még nem próbáltam ki, de valami olyat írtak, hogy a lin.ill függvény csak nevében lináris (elsőfokú), valójában tetszőleges fokszámra paraméterezhető. Ez elég elegéns megoldás lenne. Részlet a levelükből:
1. Készítse elő az adatokat:
Tegyük fel, hogy az "x" értékek az "A" oszlopban, az "y" értékek a "B oszlopban" vannak, és az adatok a 2. sortól a 100. sorig terjednek (pl. "A2:A100" és "B2:B100").
2. Számítsa ki az állandókat a LIN.ILL függvénnyel:
Válasszon ki egy üres területet (pl. "D1:G1"), és írja be a következő képletet:
=LIN.ILL(B2:B100;A2:A100^{1;2;3};IGAZ;IGAZ)
Itt az 'A2:A100^{1,2,3}' azt jelenti, hogy illeszkedjen egy köbös polinomhoz ( 'y = c1 + c2x + c3x² + c4x³'). - Nyomja meg a 'Ctrl + Shift + Enter' billentyűkombinációt a tömbképlet megadásához. Az Excel egy tömböt ad vissza, amely a "c1, c2, c3, c4" állandókat tartalmazza.
3. Dinamikus állandók használata képletekben:
Feltételezve, hogy a "LIN.ill" által visszaadott állandók a "D1:G1" tartományban vannak tárolva, ezeket az állandókat más cellákban is használhatja. Például az "x=2" előrejelzett értékének kiszámításához:
= $D$1 + $E$1*2 + $F$1*2^2 + $G$1*2^3
Ily módon az adatok frissítésekor a "LIN.ILL" automatikusan újraszámítja az állandókat, és frissíti a képleteket.
Sub TrendlineEquation() Dim objTrendline As Trendline Dim strEquation As String With ActiveSheet.ChartObjects(1).Chart Set objTrendline = .SeriesCollection(1).Trendlines(1) With objTrendline .DisplayRSquared = False .DisplayEquation = True strEquation = .DataLabel.Text Range("A5") = strEquation End With End With End Sub
Ez a makró az A5 cellába írja a trend egyenletet (a cellát tudod változtatni természetesen), ami szöveg formátumban tartalmazza az egyenletet.
Ebből szöveg darabolással ki tudod hámozni a számodra megfelelő megoldást, ha nem menne, légy szíves írj ide egy valós egyenlet szöveget, mert polinom függő a szétdarabolás.
Arra is lehet makrót írni és akkor egy futással lehet az egyenletnek megfelelő együtthatókat megadni.
A munkafüzetet természetesen makróbarátként kell menteni.
Lehet, hogy rosszul kérdeztem (vagy a válaszodat értem félre). Nem azt szeretném, hogy egy meglévő trendvonalat kibővítsek az adathalmazt megelőzően vagy utána. A problémám az, hogy az adathalmazomban mérési eredmények (az X tengelyen ultrahang sebesség, az Y tengelyen a hozzá tartozó szilárdság) van. Idővel ezek a mérési eredmények egy adott értéktartományon belül "sűrűsödnek", az x értékek egy tartományon belül változnak, tehát a táblázatban nincsenek érték szerint sorbarendezve, lehetnek ismétlődések is. Ahogy egyre több pontpár kerül a táblázatba a trendvonal (ami harmadfokú polinom) ezzel együtt változik.
Azt szeretném, ha egy szerkezetnél csak ultrahang sebességet mérek, a legutóbbi (aktuális) trendvonal függvényével tudjak szilárdságot becsülni. Ha újabb UH sebesség/szilárdság pontpárral bővül a táblázat (és ezzel módosul a trendvonal) a korábbinál pontosabb becslést lehetne kapni.
Sajnos nem látom, hogy közvetlenül lehetne paramétert kiolvasni a trend egyenlethez. Viszont a Trendline objektumhoz van Backward2 és Forward2 tulajdonság, amivel léptetni tudod a trendet az általad meghatározott egységgel.
Az Environ("COMPUTERNAME") megadja az adott gép nevét. Ezt azonban csak a fájl megnyitása közben (a makró futtatásakor) tudod lekérdezni és összehasonlítani az általad engedélyezettel.
Célszerűen a Workbook_Open eseménykezelőben lenne értelme elhelyezni. A fájlt rejtett ablakban nyitod meg és ha nem jogosult gépről nyitják meg, akkor üzenettel bezárod, ha pedig jogosult, akkor láthatóvá teszed az ablakot.
A jogosult gépek nevét persze tárolni kell valahol egy munkalapon vagy "fixen" beírni a makróba vagy egy külső fájlba, amit jogosultság ellenőrzésnél megnyitsz.
Az a kérdésem, hogyan/honnét lehet a trendvonal paramétereit kiolvasni? Ha van egy táblázatom, az abból készített grafikonhoz tudok olyan trendvonalat rendelni ami viszonylag jól illeszkedik. A trendvonal egyenletét is meg tudom jeleníteni amivel szeretnék számítást végezni (egy "x" változóhoz a trendvonal egyenletével kiszámolni "y"-t). Jelenleg csak úgy tudom megoldani, ha kézzel beírom a trendvonal egyenletét egy függvénybe. Ez egészen addig jó, amíg az adatokat tartalmazó táblázatban nem történik változás pl. új adatsor kerül bele. Ilyenkor a trendvonal változhat, de a kézzel bepötyögött képlet nyilván nem. Tudtok rá valami megoldást? Általános esetben kérdezem, ismerem a trend függvényt de az csak a lineáris regresszióhoz jó, általános (többfokú polinom) trendvonalhoz nem.
Azt meg tudtam csinálni, hogy ne engedje az excel bezárás előtt menteni a változtatásokat ás ne is lehessen lementeni "mentés másként"-el.
Így csináltam:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
ThisWorkbook.Saved = True
If SaveAsUI.Saved = True Then
Cancel = True
MsgBox ("Nem lehet másként menteni")
ElseIf ThisWorkbook.Saved = True Then
a = InputBox("Jelszó:", "Tudnod kell a jelszót, h engedje a mentést")
If a = "123" Then
MsgBox ("Mentve")
Else
Cancel = True
MsgBox ("Nem lehet menteni")
End If
End If
End Sub
Ezzel egyidejűleg, azt hogyan oldom meg, hogy csak én és mondjuk a megadott felhasználók tudják megnyitni? Environ-ra gondolok, hogy gépneveket adok meg, akiknek így adok jogosultságot a megnyitásra. Fontos, h gépnév legyen, ne felhasználó név.
Ezt még, hogyan és hová teszem hozzá?
Illetve még annyi, hogy gépneven azt a vezérlőpulton belül kikeresve - "teljes eszköznév" mellett szereplő nevet értjük, vagy az excelnek van egy "belső" gépneve, amit saját magának használ?
A beviteli munkalapon az A oszlopban vannak a partnerek, B oszlopban a hozzájuk tartozó kiadások, a másik munkalap neve Munka2 és az A1:B200 tartományban vannak a partnerek és a keretek, akkor a képlet a 2. sor első üres cellájába:
Ha táblázattá alakítod az adatbeviteli részt, akkor a függvény minden új sornál automatikusan megjelenik. (Ehhez a beállítások - speciális - adattartomány végén a formázás és képletek folytatása.
Kedves Fórumtársak! Az alábbiakban kérnék tanácsot.
Az egyik munkalapon van egy tábla, melyben a partnerek és kifizetési adataik kerülnek folyamatosan rögzítésre. A másik munkalapon van a partnerlista és az adott partnerhez tartozó keretösszeg.
A cél az lenne, hogy a kifizetési adatok rögzítésekor azonnal lehessen látni, ha az adott partner kerete elfogyott.
Ezt most úgy oldottam meg, hogy készítettem egy a partnereket csoportosító és a kifizetési adataikat összegző kimutatást, melyet minden egyes tétel rögzítése után frissítek.
1.Az első kérdésem, van erre valamilyen függvényes megoldás? (Groupby függvényt nem találtam.) 2. Ha nincs, akkor automatizálható a frissítés, úgy makróval, hogy ha az A2:A1000 tartomány nem üres celláinak száma változik fusson le a "kimutatás frissítése" (Alt+F5) parancs? (A kimutatás ua. oldalon van, ahol a tételek rögzítése történik.)
Logikus amit írsz és ez nyilván a sima HA egymásba ágyazásra is igaz. Viszont próbáld ki lsz. hogy az utolsó értéknél is nagyobbat írsz az L6 cellába. Ekkor hibaüzenet lesz a HAELSŐIGAZ eredménye. Ezért van az első felételnél a ">6" nálam.
Üdv.
Ps. Örültem, hogy az általam mutatott verziót kitaláltam. :))
Érdekes ez a HAELSŐIGAZ függvény. Kicsit próbálgattam a sajám mintaadataimmal, hogy nem lehet-e leegyszerűsíteni a VAGY(B2=A2;SZUM(B2:C2)>A2...stb. formula helyett VAGY(SZUM(B2:C2)>=A2 alkalmazásával. Aztán egyszer csak meglepetés ért. A függvény az egyenlőségjel nélkül is megtalálta a helyes eredményt. Azt állítottam be, hogy a kumulált érték az 5. hétnél pontosan legyen egyenlő az L6 értékével. Ezt írtam be: =HAELSŐIGAZ(P6>L6;0;SZUM(P6:Q6)>L6;1;SZUM(P6:R6)>L6;2;SZUM(P6:S6)>L6;3;SZUM(P6:T6)>L6;4;SZUM(P6:U6)>L6;5;SZUM(P6:V6)>L6;6;SZUM(P6:W6)>L6;7), mire kiadta az 5. hetet.
Az eredmény persze logikus, hiszen a 6. hét az első, ami nagyobb, mint az L6 értéke, így az 5. hét a jó eredmény, akár kisebb, akár egyenlő L6 értékével.
Csináltam egy új munkalapot a kumulatív vevői igényeknek (mert végülis ez egyönmagában is hasznos infó), és azon a lapon már probléma nélkül működik a dolog:)
Nem feltétlenül kell hozzá segédsor, egymásba ágyazott ha függvényekkel is megoldható, ha rövidebb időszakra tekintesz előre. A példában 6 napra van a képlet összeállítva, ha ennél messzebb szeretnél látni, akkor folytatni kell a HA(VAGY képlettel a ">6" helyén és az utolsó napra kerül a hamis ágra ">x"
"Ha jól értem egy kumulatív vevői igény segédsort készítesz." Pontosan. És ahogy írtam, bármelyik sorba kumulálhatod az igényeket. És akkor a P7:W7 helyett a megfelelő sor számát írod.
Ha végképp nincs a közelben üres sor, akkor írhatod a nullát akár az Akár AA oszlopba, a kumulált adatokat meg az AB-től, és akkor a képletben a P7:W7 helyett AB7:AO7, illetve amelyik oszlopig tartanak az adataid.
Meg lehet oldani képlettel, de kell egy kis ügyeskedés.
1. a 7. sorban (ha üres, egyébként lehet a 8., 9., stb.) az O oszlopba írj nullát, majd a P oszlopba az =O7+P6 képletet, majd ezt töltsd ki jobbra végig.
2. Az M6 oszlopba írd be a következő képletet: =HOL.VAN(L6;P7:W7;IGAZ) Az általam hasraütéssel beírt mintában ez a 6. hét.
Szia! A kérdező 2000-es Excelében levő KEREK függvény pedig magasabb verziókban már nem létezik, pedig az a magyar szabályok szerint kerekített... Az "új" Kerekítés függvény erre sajnos nem alkalmas.
Üdvözlet fórumtársak! Nem bírok egy feladattal, és ehhez kérek segítséget. A feladat: az A oszlopban lévő szám kerekítése, hogy az 5 alatt végződőt lefelé, az 5-re végződő marad 5-ön, az 5 felett végződőt felfelé. A "B" oszlopban lévő függvény "=KEREK(A2/5;0)*5" a "C" oszlopban "=KEREK(A2/10;0)*10" Létezik ilyen függvény, vagy trükk? A "C" oszlopban majdnem jó, de az 5-re végződőt is kerekíti.
Sajnos még nem kerültem megint a táblázat elé. Ezért nem reagáltam az írásodra. Köszi, hogy foglalkoztál vele.
Hogy mire jutottam a megoldásaitokkal, majd jelenetkezem. Már átszerkesztettem akkor, ahogy írtam az OFSZET-tel. De ha ezek vaslamelyike élhetőbb, akkor variálok rajta.
2. a tartomány amiben keressen (ha több oszlopból áll, akkor az első oszlopban keres)
3. hanyadik oszlopban lévő értéket adja vissza, ha találat van az első oszlopban
4. IGAZ/HAMIS vagy 1/0: HAMIS vagy 0 érték esetén pontos értéket keres, míg IGAZ vagy 1 érték esetén közelítő értéket keres.
Azaz a te példádban: FKERES(C3;$L$2:$N$9;3;1)
1. C3 értéket keressük 2. L2:N9 tartartományban (a példában a húzhatóság miatt rögzítve van dollár jellel a tartományt meghatározó két cella) 3. a 3. oszlopban lévő adatot adja vissza 4. 1, azaz IGAZ érték, így közelítő értéket fog visszaadni
Ha nincsenek növekvő sorrendben az értékek, akkor rosszul fog működni a képlet. Illetve valójában az M oszlopra nincs is szükség. Illetve ha az általad megadott adatokat vesszük alapul és 0-nál kisebb számot keresnénk, akkor #HIÁNYZIK hibát adna a képlet. Mivel 0-tól indul a keresendő érték megadása.
Szia! Így akkor csak egyszerű FKERES, a negyedik paraméter 1
A példádban D3 képlete:
=FKERES(C3;$L$2:$N$9;3;1)
Fontos, hogy a húzhatóság érdekében az L:N oszlop címe rögzítve ($) legyen.
Megjegyzés: Ebben az esetben az M oszlop nem szükséges, hiszen a határok az L oszlopban megfelelően meg vannak adva. Amire figyelni kell, hogy a határok növekvő sorrendben legyenek.
Ha 26000 a szám, akkor miért 24-24500 ill. 24500-25-höz tartozó értékeket adsz meg példának. Jó lenne egy nagyobb részét látni az L-M oszlopnak, a valódi formátumban (persze nem a tényleges számokkal). Milyen értékek vannak az L és milyen értékek az M oszlopban?
Egyébként valószínűleg egymásba ágyazott függvényeket kell használni majd. Pl. Fkeres függvénnyel megkeresni az első értéket, ezután INDEX függvénnyel meghatározni a keresési tartományt és utána ismét Fkeres függvénnyel a kívánt értéket. (Xkeres is működik hasonlóképp), de verzió függő, milyen függvényt lehet még használni, O365-ben pl. van SZŰRŐ függvény is.
Az lenne a kérdésem, hogy a következő feladathoz milyen függvényt kellene használni? Próbáltam sok mindent, de nem sikerült megoldást találnom.
Adott az L-M oszlop, mint két határérték / tartomány, adott egy szám, jelen esetben a 26000 és szeretném mellérendelni az N oszlopból azt, ami éppen igaz rá. Ha 24-24500akkor -2000, ha 24500-25 akkor -1000 stb.
1. Tegyük fel, hogy az első sorban vannak a havi értékek az A oszloptól kezdve. A példámban a 2. sort meghagyom fejlécnek, pl.: 2001, 2002 2003 stb.
2. A 3. sor A oszlopába bemásolod a következő képletet:
=INDIREKT(CÍM(1;1+(OSZLOP()-1)*12-3+SOR();1;HAMIS);HAMIS) ' A megvastagított egyesről még beszélek
3. Ezután a 3. sor A oszlopától jobbra kitöltöd a a bemásolt függvényt addig, amíg vannak új éveid.
4. Végül a 3. sortól lefelé kitöltöd az így kapott oszlopokaz 1-12-ig.
És voilá megvan a teljes átrendezett lista.
Megjegyzés: Ha az első sor nem az A oszlopban kezdődik, akkor először a 2. pontban bemásolt képletben a vastagon szedett 1-est átírod arra a számra, ahányadik oszlopon kezdődnek a havi értékek.
ezután hajtod végre a 2.és 3. pontot.
Íme az eredmény képe (én csak 3 évi mintát csináltam:)
Szóval a 10. sorban vannak az adatok. Ha jól értelmeztem, akkor így követik egymást. Az 1/1 jelenti az első év januárját, 2/3 pedig a 2. év márciusát, stb...
A13 cella képlete: =INDEX($10:$10;1;SOR()-12+(OSZLOP()-1)*2) Ezt a következő képen kell módosítani:
$10:$10: ide menjen az a sor, szigorúan $ jellel, ahol az adatok vannak
1: mivel egy sorban helyezkednek el az adatok, így ide 1-es kerül
SOR()-12+(OSZLOP()-1)*12: mivel a 13. sorba van a képletem, így az aktuális sorból ki kell vonni 12-t, hogy megkapjuk a hónap sorszámát. Az oszlop-1 kifejezés pedig meghatározza az év eltolását. Azaz az egymás melletti oszlopok pontosan 12 hónappal lesznek eltolva. Nyilván, ha nem az A oszlopban kezded a kimutatást, akkor nem 1-et kell kivonni az oszlop sorszámából, hanem annyit amennyi az első oszlop sorszáma. Pl. ha az M oszlopban kezded a kimutatást, akkor 13-at kell kivonni.
Egy sorban vannak egymást követően számok. Egy adott évhez tartozó havi értékekkel. Tehát 12 szám van (január - decemberi érték). Aztán tőle jobbra a következő cellában a következő év 1. havi, majd 2. havi értékei stb.
Ugyanezen munkalapon szeretném valami függvénnyel rendezni, hogy egymás alatt legyenenk az adott év hónapjainak értékei, aztán a mellette oszlopban a következő év hónapjainka értékei.
101 / 201 / 301
102 / 202 / 302
103 / 203 / 303
.
.
.
112 / 212 / 312
Jelenleg nem találtam rá függyvényt, Excel 2007-es.
Ha a oszloponként egy cellába bele kell nyúlni, az nem baj. De jelenleg egyesével mozgatom a függvény "négyzetét", hogy így nézzen ki a függvény:
=AA10 =AM10 =AY10
=AB10 =AN10 =AZ10
=AC10 =AO10 =BA10
... ... ...
=AL10 =AX10 =BJ10
Tehát valami olyan függvény kéne, ami lépteti a meghivatkozandó cella azonosítóját. Nem találtam ilyet. Makrós megoldás nem lenne jó, mert nem akarom bonyolítani.
Sziasztok! Létrehoztam egy táblázatot a telephelyünk elektromos hálózatáról. (honnan, mi, milyen leágazás jelről, milyen védelemmel, milyen kábelen keresztül van megtáplálva) 'Szekrény - leágazás név - leágazás jel - védelem - kábel' Szükségem van egy olyan megoldásra, hogy a táblázat adatai alapján másik munkalapon megjelenjen (a táblázat egyedi szekrénynév értékeit tartalmazó engedélyezési listából) kiválasztott szekrényhez tartozó összes (nem csak az elsőként megtalált) belőle induló, közvetlen betáplálás adata. Segítségetek köszönöm! Pit
A helyettesítő karakterek csak szövegben működnek, szám esetében nem!
Ha a számok szövegformátumban vannak, akkor működhet, de csak 1 db csillag kell a végére.
A helyettesítő karaktereknél ugyanis a csillag (*) akárhány karaktert helyettesít, az lehet 1 és lehet akár 100 is:
Pl. *10* minden olyan tételt kiválaszt, amiben előfordul a 10 karaktersorozat (szándékosan nem a 10 számot írtam, mert ugye szövegről van szó!!!)
10* minden 10-zel kezdődő szöveget kiválaszt, *10 minden 10-zel végződő szöveget választ ki.
Ha egy karaktert szeretnél helyettesíteni, arra a kérdőjel (?) való. Ahány kérdőjelet teszel a keresésbe, annyi karakter helyet kvázi figyelmen kívül hagy.
Ezeket megfigyelheed, ha az autoszűrőben a szövegszűrést választod és tanulmányozod a szűrés eredményét és a létrehozott szűrő feltételeket.
Tehát a számoknál a számtani műveleteket kell használni, szövegnél lehet a helyettesítő karakteres formát is.
Advanced filter multiple criteria-val szűrök makroval adatokat. A szűrés szám formátum alapon működik.
Az adatsoromban viszont szöveges formátumok is vannak, amik számokat tartalmaznak. Ez azért van, hogy ha egy számsor nullával kezdődik az adatsorban, akkor maradjanak meg a kezdő nullák is az adatsorban, hiszen ha számformátumban van tárolva, akkor a kezdő nulla /nullák elvesznek.
Így viszont az advanced filter nem működik ezeken a szöveg alapú cellákon (amik egyébként számokat tartalmaznak).
Hogyan tudom a kettőt összehozni?
Vagy Hogyan tudom az alap adatsorban átalakítani a szöveges formátumú cellákat szám formátumúvá, hogy megtartsa a kezdő nullákat?
Ha vakinek van kedve foglalkozni ezzel esetleg, így a bejglik között :-)
Ha makróval van az adatbázis kapcsolat megoldva, akkor a "Application.ActiveWorkbook.Path" kóddal lehet lekérni az elérési útvonalat a fájl neve és kiterjesztése nélkül. Míg a "Application.ActiveWorkbook.FullName" kóddal az elérési utat és a nevet is lekéri. Attól függően, hogy az ember mit szeretne ellenőrizni.
Persze ez csak akkor működik, amíg otthon nem "ugyan oda" másolja az ember a fájlt. Vagyis teszem azt a pendrive meghajtóját otthon átnevezi Z: meghajtóra (mert pl. a cégnél is az a becsatolt hálózati meghajtó) és ugyan olyan mappa szerkezetet hoz létre, akkor nem működik az ellenőrzés.
Valamint van lehetőség számítógép nevet is ellenőrizni. Azt a "Environ("computername")" kód adja vissza. Nyilván ennek a hátránya, hogy új gép (vagy újratelepítés esetén) módosítani kell a kódon, hogy beengedje azt az eszközt is.
Szóval: Azt, hogy lehet megcsinálni, hogy ha a "B" fájlt áthelyezik vagy átmásolják más mappába, akkor már megszakadjon az "A" adatbázis excellel a kapcsolata?
"Másik lehetőség: külső adatbázist használsz, amiben az adatok vannak. Access-el hozod létre és jelszóval véded már megnyitás ellen is. Nyilván ezt sem vered nagydobra Mellé XLSB-be mented a munkalapot és csak egy darab kört raksz le, ami futtat egy makrót. Minden funkciót zárolsz és csak jelszóval engeded szerkeszteni a munkafüzetet és a makrókat is jelszóval véded.
Makróval nyitod meg az access fájlt és userformokkal kéred le belőle az adatokat. Nyilván sokkal macerásabb, a prtacr-t szerintem nem lehet letiltani. Az XLSB-t viszont nehezebb feltörni."
Van két excel fájlt. Az "A" egy adatbázis, ami folyamatosan frissül. A "B" pedig össze van kötve az "A" adatbázissal és annak az adatait használja. Ezek két különböző helyen vannak, különböző mappákban.
Azt, hogy lehet megcsinálni, hogy ha a "B" adatbázist áthelyezik vagy átmásolják más mappába, akkor már megszakadjon az "A" excellel a kapcsolata?
A nyomtatási kép beállításakor problémába ütköztem.
Van egy táblázatként formázott 50 soros tábla 4 oszloppal. (nem én készítettem az eredeti táblát.) A Nyomtatási terület meghatározásakor kijelölöm az egész táblát (4 oszlop 50 sor) Amikor megnézem a nyomtatási képet akkor először csak 3 oszloppal(?), majd (a kijelölésnek megfelelően) 4 oszloppal mutatja ugyanazt a táblát. (Tehát normálisan 4 oldal lenne, de 8 lesz belőle)
Ha a Nézet/Oldaltörés megtekintését bekapcsolom, látom a 3. oszlop után a szaggatott vonalat, ami alapján a nyomtatási képen először a "3 oszlopos" változat látszik. Ha a szaggatott vonalat áthúzom a "helyére" már csak a 4 oszlopos táblát jeleníti meg, de kicsi méretben, összenyomva és az Oldalbeállítás/Nagyítás menüpontban hiába növelem oldalszámban a szélességét/magasságát nem történik semmi.
Igen, lehet érdemes lenne akkor megismerkedni vele... csak nem sok időm van még azzal is külön foglalkozni, mert az excellel is bőven el vagyok maradva, ahhoz képest amit kellene tudnom (bár az excel kb pont az, amit örökké lehet tanulni, annyi sok minden van benne és kimeríthetetlen- tipikusan, minél jobban megismered, annál jobban jössz rá, hogy igazából semmit se tudsz még belőle:-) ) és akkor most kezdjem az Access-t is :) :-) :-)
Az Accesst kb. úgy képzeld el mint egy Excel táblázatot.
Csak abban az oszlopoknak nem betű jelei vannak, hanem nevei.
Pl. egy partnertörzs esetén:
cég kód
cég név
adószám
cím
weblap
kapcsolat tartó
telefonszám
e-mail cím
Alapértelmezetten két féle táblázat létezik (legalábbis így éjfél után több nem jut eszembe). Az egyiknél van egy úgynevezett egyedi azonosító érték. Ez az én példámban a "cég kód" nevű oszlop. Ide nem kerülhetnek be ismétlődő elemek, így a táblázat egy-egy sora egyértelműen azonosítható. A másik féle táblázatban pedig nincs ilyen egyedi azonosító. Hogy erre is mondjak egy példát: ha egyedi árakat akarsz rendelni valamelyik termékhez és valamelyik vevődhöz, akkor a következő oszlopokra lesz szükséged: termék kód, cég kód, ár. Itt egyik sem rendelkezik egyedi azonosítóval, mert lehet benne ismétlődés. Pl. a termék kód ismétlődik, ha ugyan annak a terméknek több vevőhöz is van egyedi ár rendelve. A vevőkód szintén ismétlődik, ha több termékből is kap egyedi árat. Az ár meg ismétlődik, ha több terméknek is ugyan az lesz az egyedi ára.
Az egyedi azonosítós arra jó, hogy rögtön az azonosítóval tudd azonosítani az adott sort. Én pl. sok helyen a vevő kóddal azonosítom a vevőinket. Fejből nem tudom semelyik vevőnknek sem a kódját (kivéve a sajátomat (nyilván mint magánszemély szereplek a számlázóban) :D, mert amúgy szabadon módosítható a számlázóban a kód), azt a számlázó generálja.
A régi vevőinknek (akiket úgy importáltunk a számlázó váltás előtt még csak számból állt a vevőkódja. Az újaknak van előtte egy "v" betű is. Amúgy pedig egy szám.
Ha van egy Access táblázatot, akkor abból SQL parancsokkal és makró segítségével tudsz végrehajtani lekérdezéseket. Ezeket úgy kell elképzelni, mint egy fajta szűrés. Pl. ha a cím mező nem egy mezőből áll, akkor tudsz szűrni könnyedén vármegyére is. És az egészben az a jó, hogy egy lekérdezésben akárhány feltételt összekapcsolhatsz. Azaz le tudod kérdezni azokat, aki Zala megyeiek, az e-mail címük "*@google.com" végződésű és a telefonszámúk "+36 83*" kezdetű. Ha megvan ez a lekérdezés, akkor tudsz vele dolgozni. Pl. ki tudod listáztatni csak a cég neveket és a hozzájuk tartozó várost. A többi adat is ott van a lekérdezésben, mert "lejön" az is azzal együtt, de neked nem muszáj minden egyes "oszlopot" kiírni egy cellába (vagy akárhova).
Az Access adatbázis annyiban különbözik az Exceltől, hogy abban statikus adatok vannak. Pl. ha csinálsz egy olyat, ahol "A" és "B" oldalakat, valamint a területet tűnteted fel, akkor neked a terület nem fog automatikusan átíródni, ha "A" vagy "B" oldalak megváltoztak. Sok esetben származtatott adatokat nem is nagyon szoktak eltárolni adatbázisban. (Vagyis ez már inkább optimalizáció függő. Ha bonyolult a számítás (mármint erőforrás igényes), akkor lehet, hogy jobban megéri beáldozni azt a néhány bájtot a végeredmény eltárolására, mint mindig kiszámolni azt). Ha meg nem erőforrás igényes a számítás, de rengeteg adatod van (viszont nem kell mindig az összes), akkor inkább számoljon a gép, ne pedig statikusan legyen ott a végeredmény.
Pl. van egy honlapon, ahova csináltam magamnak menet táblázatot (egyelőre csak metrikus normál és metrikus finom menetekhez). Gyakorlatilag elegendő a menet típust (metrikus vagy metrikus-finom), a névleges átmérőt és a menetemelkedést elmenteni. Az összes többi adatot ki lehet ezekből számolni. Mint. pl. az orsó átmérőjét, a menet mélységét, lekerekítést, magfuratot, stb. Így feleslegesen nem terheltem az adatbázist ezekkel. Úgyis, ha szeretnék egyszer egy beviteles kalkulátort csinálni, akkor már megvannak a számítások, csak át kell őket emelni a kalkulátorba.
A VBA-hoz és az SQL lekérdezésekhez kell egy kis programozási szemlélet. De rengeteg hasznos információ fent van a neten, ha az ember fia/lánya beszél angolul. Illetve az itteni közösség segítőkész, szerintem nem igazán szoktak lenni megválaszolatlan kérdések, ha azok jól vannak feltéve. Csak tudni kell, hogy miből mit szeretnél kihozni.
VBA-ban még elég gyerekcipőben járok, de egyelőre, amire nekem kell/kellett, +a net segítségével (beleértve Titeket is), többé - kevésbé elboldogultam. Az Access-t meg egyáltalán nem ismerem :-( (nem tudom egyébként mennyi idő lenne annyira megismerni, amennyire nekem kell)
Szerintem is egyszerűbb lenne minden adatot Accessben tárolni.
Nekem van egy ilyen lekérdező makróm.
A bal felső userformban ki lehet választani a vevőt, illetve a témakört. A userform hívja meg az adatbázis lekérdező makrót (kap 3 paramétert is bemenetnek)
Végül kilistázza az utolsó 10 darab e-mailt ami az adott vevőnek lett kiküldve az excelből.
A rec.Fields("NÉV").Value adja vissza az adott sorhoz tartalmazó NÉV oszlopban lévő adatot. Így csak azokat az adatokat íratom bele az "ertek" nevű változóba, amire szükségem van. Végül a MsgBox segítségével van kilistázva. Nekem ennyi elegendő volt.
Itt maga a táblázat adja hozzá az adatbázis elemeket is az Access dokumentumhoz automatikusan. Ahhoz másik függvény van meghívva.
Az alap makró nem tőlem származik azért is vannak benne angol kommentek (: viszont elég jól testre szabtam. Illetve most vettem észre, hogy el is van írva a függvény neve, de nem módosítom, mert tudja a franc, hogy hol hivatkoztam már rá.
Jó pár dolgot szerintem te is tudnál belőle meríteni.
Nézetem szerint a Listbox - ugyanúgy mint a Combobox - alapvetően a szűrési paraméterek bevitelére szolgáló eszköz. Az eredmény megjelenítésére mást érdemes használni.
Annál is inkább, mert a Listbox annyi oszlopot jelenít meg a forrásból, amennyit beállítasz, ami lehet csak egy, de lehet több egymás melletti oszlop is.
Amire te gondolsz, annak inkább a lekérdezés felel meg, ami az adatokból annyit jelenít meg, ami a feltételeknek megfelel. Lekérdezést létre hozhatsz Excel verziótól függően manuálisan ill. VBA-val, az újabb Excel verziókban pedig Power Queryben, szintén manuálisan és M nyelven "makróval".
Javaslom az Adatok - Lekérdezések menüpont tanulmányozását akár makrórögzítéssel is. Közös használatú munkafüzetekben vannak korlátozások, de talán ez nem érinti a lekérdezéseket.
Másrészt, ha már több felhasználó és közös adatállomány, miért nem ACCESS-t (ami adatbáziskezelő!) használsz az adatok tárolására, amihez adatbevitelhez és lekérdezéshez is használható és hozzákapcsolható azh Excel? Cégnél ez szerinten nem lehet nagy probléma. Ráadásul nagyon nem is kell az ACCESS makrózást megismerni, minden működhet Excelben, az ACCESS pedig elvégzi a konzisztencia és egyéb ellenőrzéseket. A jogosultságokat is be lehet állítani benne az adatbázis szerkezet létrehozásakor akár.
A lényeg az, hogy tudjanak szűrni, de ne álljon nekik össze a háttéranyag (amit berögzítenek adatbázis) szerkezete. Több tulajdonságot beviszünk egy ID-hoz (kb 15-öt). Ellenben a szűrés közben kb 5 tulajdonságra szűrnek le maximum. Csak a szűrés eredményét akarom, h lássák, ami a leszűrt 5 tulajdonság + még 1-2 adat a maradék 15-ből.
(itt jön a jogos kérdés, hogy akkor minek kell 15 féle tulajdonság, de élő példa nélkül nehéz elmondani, miért kell a maradék adat, ha azokra nem szűrűnk és nem is jelenítjük meg szűrés alkalmából, de maradjunk annyiban, h kell)
Ezért rögzíttetem be az adatokat Userformmal, nem pedig csak soronként manuálisan az adatsorba, + soronként beszúrva, hogy ne lássák a teljes adatbázis. A userform majd hogy nem a mi helyzetünkben csak ezért kell.
Illetve ha a listboxban látják a szűrés eredményét, az a teljes adatsor megjeleníti, az ID mind a 15 tulajdonságát, amit pont nem akarunk, h lássanak, mert akkor ugyan ott vagyunk ismét, mintha az adatbázisban rögzítenének manuálisan. - vagy ezt nem jól gondolom? (Még nem próbáltam ki egyelőre csak elméletben gondolkozok.)
Szóval a lényeg, hogy a bevitt 15 adatsort soha ne lássák egyben az egyes ID-k hoz.
"A Userformot úgy kell kialakítanod, ne fedje el a munkalap azon részét, ahova a szűrés eredményét szeretnéd megjeleníteni." Úgy szeretném, hogy egyik munkalapon lesz a Userform és nem ugyan oda jeleníti meg az adatokat, hanem ha elvégezzük a leszűrést, akkor a szűrés eredményét egy másik munkalapon lehet megnézni. Szóval, hogy a userform használata közben ne lehessen semmit látni, se a userform munkalapon, se a userform listbox-ban sem.
"A szűrt adatokat pedig átmásolod erre a területre - akár pl. a Range:AdvancedFilter használatával - másik helyre másolással." Igen, úgy gondolom én is, hogy a Userformmal csak megadom az advance filternek a szűrési feltételeit és aztán csináltatom meg az adnavce filterrel a leszűrést egy másik munkalapra, mint szűrési eredményt.
Szóval alapvetően a userformmal kialakított szűrési feltételek, amit majd használok az advance filterrel, kerüljön egy külön munkalapra és a listboxban se jelenítsen meg eredményt az userform.
"Egyébként milyen műveleteket szeretnél még a szűrt adatokkal végezni?" A leszűrt eredményből majd csak e-mailcímek és telefonszámok kellenek, amit használni kell tovább.
Olyat tervezek csinálni, h minden egyéni felhasználónak legyen egy saját excel-file a gépén, névreszólóan, amivel adatot tud bevinni (userformmal). Ezek az adatok, amiket a felhasználók, személyenként a saját, névreszóló excellel berögzítenek, egy, a szerveren lévő "gyűjtő" file-ba kerülnek. Eddig ezt, azt hiszem, meg tudom csinálni.
Az egyéni exceleknek, lenne egy olyan felülete, ahol az adatbevitel mellett, a már bent lévő adatsorban lehetne adatokat kinyerni. Erre szűrő funkció is kell. Ezt szintén userformmal akarom megoldani, listboxxal. Úgy gondolom, ez is menni fog.
Viszont, amit szeretnék, hogy a leszűrés alkalmával, a leszűrés eredménye, ne a listboxon belül jelenjen meg, hanem egy másik munkalapon. Ezt, hogyan kell? Tudnátok benne segíteni?
Netről gyorsan kifotóztam egy listboxot, csatolva, hogy mire gondolok.
A volt főnököm szeret több munkalapot is nézni egyszerre. Általában nem elmenti a munkalapokat és utána zárja be őket, hanem a bezárásra kattint és ha kérdezi, hogy menti a módosításokat, akkor menti csak el azokat.
Ha több ablak is nyitva van, akkor addig nem tesz fel ilyen kérdést az Excel, amíg az utolsót be nem zárod. Vagyis, ha nem jó sorrendben zárod be őket, akkor a szűrő és a rögzítés beállításait bukod.
Bár nem győződtem róla, de had kérdő jelezzem ezt meg.
Bármelyiken bármilyen módosítást eszközöl, ugyanazt kell látnod mindegyiken. Munkafüzet szinten ezek egymás tükörképei. (Épp ez a lényege ennek a funkciónak)
Vagy lehet, hogy ez a szűrőnél direkt így működik, hogy több konstellációt is lehessen nézni pl ugyanazon a munkalapon? ... Hmm... nem tudom.
A funkció hasznos tud lenni, de okoz bosszúságot is.
Pl. alap esetben a szűrések az 1-es ablakban fognak megjelenni. Illetve az ablaktábla rögzítés is. A 2-es ablak ilyen szempontból szűz lesz. Ha a kolléga nem figyel és az 1-est zárja be hamarabb és úgy menti a doksit, akkor ugrottak ezek a beállítások
Sose használtam ezt a funkciót, de bizony nem kizárt ez a lehetőség, ami ebben az esetben nem is rendellenesség. Hanem lehet, hogy hzs65 olvtársunk valamelyik kollégája így használta, és mentette el az 1-es fájt, ami a leírt módon nyílt meg, mikor hzs65 használni akarta. Hiszen hálózati meghajtóról közösen dolgoznak.
Ebben az esetben a következő megjelenés igazolhatja ezt a feltevést: Az alábbi képen a képernyő tetején a megnyitott fájl neve (nálam Teszt.xlsx) mögött :1 kell hogy látsszon, alul pedig mindkét fájl megjelenik :1 és :2 kiegészítéssel. Ha ez történik akkor megtaláltad az okot. És az is érthető, hogy ha hzs65 lezárja a 2-es fájlt (:2 kiegészítéssel), majd menti 1-est, akkor utána már nem nyílik meg mindkét ablak az újabb nyitáskor. Egészen addig, amíg az a bizonyos kolléga nem nyitja meg, majd menti az általa használt módon.
Köszönöm. A rendszergazdánál már próbálkoztam. :-) Mindegy, egyelőre marad így, hátha majd a későbbiekben sikerül cégen belül találni valakit, aki tud is és hajlandó is segíteni. :-(
Ha sikerül egy olyan fájl megnyitásakor is reprodukálni, ami nem titkos, megpróbálom az egész fájlt becsatolni, a most hiába nyitom meg, csak az a munkafüzet nyílik meg, amit kértem.
Ez a munkafüzet egy kollegától érkezik e-mail csatolmányként. Ez minden megnyitáskor új munkafüzetként pluszban megnyitja az 1. munkalapot. Az újonnan megnyitott munkafüzetről készült a kép.
Nem könnyű így távolból találgatni, de azért próbálkozom. Tehát az 1-es munkafüzet első megnyitásakor jelentkezik az, hogy nem csak az 1-es nyílik meg, hanem valami más is, ha jól értem.
Ilyenkor jó lenne megtudni, hogy maga az 1-es dolgozik-e, vagy a háttérben valami. Erre én is javaslom Fferenc50 tanácsát alkalmazni, és Alt + F11-el megnézni, hogy mit mutat a VBA képernyő. Hátha van egy makró (azaz egy program), ami ami ezt a jelenséget okozhatja.
Azt írod még, hogy ez a jelenség az irodai gépeken is előfordul. Ha tényleg több gépen is jelentkezik, akkor érdemes lenne felvenned a kapcsolatot a rendszergazdával, és megkérdezni, hogy ő tud-e erről, és esetleg valami szándékos kiegészítésről van-e szó. Különös tekintettel arra, hogy mint írod hálózati meghajtón lévő fájlokról van szó, amihez VPN-en keresztül van hozzáférésed.
Köszönöm, megpróbálom. Ma azt tapasztaltam, hogy ugyanazon munkafüzet másodszori megnyitásakor nincs ez a probléma. Valahova mentettem egy képet tegnap, de nem találom. :-) Teszek majd fel képet, amikor újra előfordul.
Nagyon köszönöm a válaszod. Igyekszem majd elküldeni az egyik munkafüzetet. Több munkafüzet megnyitásakor tapasztaltam. Ezekből nem tudom mindet elküldeni, mert munkahelyi adatokat tartalmaznak. De amiben nincs, vagy úgysem azonosítható, azt elküldöm. Ma például azzal szembesültem, hogy ugyanazt a munkafüzetet ha másodszor nyitom meg, akkor már nem nyílik meg egy üres munkafüzet új fájlként. Ha legközelebb előfordul, akkor töltök fel screenshot-ot. Még azt nem írtam, hogy hálózati meghajtón lévő fájlokról van szó, amihez VPN-en keresztül van hozzáférésem. Ez előfordul az irodai gépeken is (asztali gép, laptop - Windows op.rendszerrel). Azt most nem tudom megmondani, hogy milyen Windows verzió van rajtuk. A laptopon azt hiszem Windows7, az asztali gépen nem tudom. Itthon Windows10 van. A munkafüzetek kiterjesztése vagy .xls vagy xlsx. Kösz a helyreigazítást, hirtelen nem jutott eszembe a munkalap szó, azért írtam füzetlap-ot.
1. Az egyik megnyitni kivánt munkafüzetben (nevezzük 1-es-nek), több munkalap van, abból a legelső munkalapot még pluszban megnyitja új munkafüzetben. Egy másik munkafüzetben (nevezzük 2-esnek) csak 1 munkalap van, ott egy üres munkalapot nyit meg pluszban új munkafüzetként.
2. Az újonnan megnyitott munkafüzetben nincs több munkalap, akár az 1-es munkafüzetben lévőt nyitja meg, akár a 2-es munkafüzetet akarom megnyitni, ott csak egy üres munkalap van az új munkafüzetben.
Tudnád példákkal - képekkel - szemléltetni, hogy mikor mi történik? Esetleg magát a problémát okozó munkafüzetet elküldeni, ha nem tartalmaz bizalmas adatokat. (Felhőbe másolva, és onnan a linket elküldve)
Ugyanis egy-két dolog nem világos a leírásodban:
1. "...a megnyitni kívánt munkafüzetben több füzetlap is található, a legelső lapot nyitja meg új fájlban. " Pontosítsuk: az általad megnyitott munkafüzetet (hívjuk 1-esnek) nevezed megnyitni kívántnak, vagy amit az általad megnyitott 1-es munkafüzet által megnyitásra kerülő másikat (nevezzük 2-esnek). Az utóbbiban van több munkalap (ez a általában használt kifejezés a füzetlap helyett). 2. A a 2-es munkafüzet megnyitásakor üres munkafüzetet nyit meg (ha jól értem egyetlen munkalapot látsz belőle), miből gondolod, hogy abban több munkalap is található? Abból nem következik, amit írsz, hogy ha ezt lezárod, akkor több lapot látsz. Abból az következik inkább, hogy talán még egy munkafüzet van nyitva, amit az 2-es lezárásáig nem láttál.
Amit jó lenne tudni, hogy mi az 1-es munkafüzet kiterjesztése? .xlsx, .xlsm, esetleg más?
Ja persze, mielőtt elfelejtem, érdekes lehet, hogy milyen Windows van a gépeden, és milyen office verzió alatt jelentkezik a probléma. (Feltéve persze ,hogy windows operációs rendszert használsz, és office-t)
Egy excel munkafüzet megnyitásakor egy másik munkafüzetet is megnyit. Eddig azt tapasztaltam, hogy a megnyitni kivánt munkafüzetben több füzetlap is található, a legelső lapot nyitja meg új fájlban. Ha ezt bezárom, akkor látom az eredeti munkafüzetet, amiben benne van az a lap is, amit külön megnyitott. Egy másik munkafüzet megnyitásakor viszont egy teljesen üres munkafüzetet nyit meg, pedig abban a fájlban is több füzetlap található. Sajnos eddig senkinek sem volt ötlete, hogy miért van ez, és hogyan lehetne megszüntetni. Ha valakinek van ötlete, hálás lennék érte.
Mivel az ISO hét szabálya szerint a hét mindig hétfővel kezdődik és ahhoz az évhez tartozik, amelyből több nap van benne.
Ha jan 01 hétfő-szerdára esik, akkor ez az új év első hete, ha viszont csütörtök-vasárnap, akkor ez még az óév 52/53. hete lesz.
Mivel 2025.jan.1 szerda lesz, ezért a Hét.száma függvény már 1-et fog adni eredményül. Ezért nem kell hozzáadni az évhez +1-et.
Viszont 2024.12.30 esetében az a helyzet, hogy ez is már az új év első hetéhez fog tartozni - itt tehát jogos a +1 hozzáadás az évhez.
Vagyis a +1 hozzáadás az első hét esetén akkor szükséges, ha az új év első napja hétfő-szerda valamelyike, így az óév utolsó napjai már az új év első hetéhez tartoznak ISO szabály szerint.
Olyat tudok elképzelni mondjuk, hogy: -az adatsort Access-ben tárolom a szerveren (jelszóval védve + esetleg rejtett fájlként tárolom - akkor az excel megtalálja amúgy?)
-a szűrést, ami az adatsoron egyetlen funkció, amit a felhasználok használnak, azt akkor userformokkal oldom meg -a leszűrt adatsort valahogy úgy jelenítem meg, hogy ne lehessen tovább dolgozni vele (másolni, kijelölni stb)
Aztán, ha azt prtscr-ezik már talán nem olyan nagy gond, nem hiszem, hogy fognak kb 100 féle szűrést végigcsinálni és mindent prtscr-ezni, hogy a teljes alap adatsoruk meglegyen és talán nem is olyan rafkósak.
Access-t még egyáltalán nem használtam, de amennyi nekem kell belőle, gondolom megtanulható userformokat sem használtam még soha, de talán képes leszek rá megoldani
Ha jelszóval véded szerkesztés ellen, akkor az kb. ½ perc alatt megkerülhető. Volt beszállítónk, aki mindig levéste a munkalapokat. Se másolni, se kijelölni, se szerkeszteni nem lehetett. Kézzel meg macerás lett volna az adatokat átvinni a saját rendszerünkbe. A legegyszerűbb az volt, hogy töröltem a védelmet és utána már tudtam szerkeszteni. Aki kicsit mélyebben is benne van a számítógépes ismeretekben az meg tudja ezt csinálni. Átlag Julika viszont nem fogja tudni.
Olyat viszont nem fogsz tudni megcsinálni, hogy megnyitni megnyitod, de lementeni már nem fogod tudni. Oké, makróval sok mindent lehet tiltani, de a makrók seperc alatt tilthatók. Utána olyan, mintha ott se lennének.
E-mailes csatolás: szerintem nem megoldható, hogy konkrétan azt a táblát ne tudd becsatolni és minden mást pedig de.
Ha védeni szeretnéd az adatokat, akkor írni kell egy programot, ami külső forrásból emeli be őket automatikusan, de ezt nem hozza a felhasználó tudomására. Le kell tiltani a kijelölést és a prtscr-t. Így az exe-t hiába másolná az adatbázis nélkül használhatatlan lenne.
Másik lehetőség: külső adatbázist használsz, amiben az adatok vannak. Access-el hozod létre és jelszóval véded már megnyitás ellen is. Nyilván ezt sem vered nagydobra Mellé XLSB-be mented a munkalapot és csak egy darab kört raksz le, ami futtat egy makrót. Minden funkciót zárolsz és csak jelszóval engeded szerkeszteni a munkafüzetet és a makrókat is jelszóval véded.
Makróval nyitod meg az access fájlt és userformokkal kéred le belőle az adatokat. Nyilván sokkal macerásabb, a prtacr-t szerintem nem lehet letiltani. Az XLSB-t viszont nehezebb feltörni.
Többféle védelem is létezik (munkafüzet, munkalap, VBprojekt, felhasználói engedélyek, stb) az Excelben, de "természetesen" ez csak a "mezei" felhasználók ellen véd. Ha valaki el akarja vinni, úgyis el fogja (tudom, ez nem vígasztal), de ez van. Nehezíteni lehet csak. Pl. Nem engeded menteni sajét gépre, másként menteni, csak adott felhasználók számára engeded megnyit stb. Ezeket mind makrókkal lehet megoldani.
Esetleg más progamon keresztül használni az Excelt védett módban. Ezzel kapcsolatban talán lesz itt is olyan, aki több tanácsot tud adni. A rendszergazdátok is tud biztosan tippet adni.
Más: Kérj a cégedtől jogvédelmet és valamennyi honoráriumot egy (szerzői jog) szerződés keretében, amiben meghatározzátok, milyen módon lehet használni amit alkottál.
Van-e az alábbira lehetőség (véleményem szerint nincs, de nagyon örülnék neki ha lenne):
- céges adatokból összeraktam egy adattáblát, ami több dolgozó munkáját segítheti, növelheti az egyéni eredményességet, így a céges eredményeket is
szeretném/szeretnénk úgy levédeni az adattáblát, hogy az mindenki számára hozzáférhető legyen, lehessen benne szűrni.
- ellenben fenn áll a veszély, ha bárki távozik a cégtől, akkor ezt az adatsort + információkat viszi magával és a jövőben egy másik cégnél használva, növelve ezzel az ottani eredményességét + a versenyhelyzetet velünk szemben
Szóval mondjuk a jelenlegi cégnél közös szerverre lementeni, ahonnan saját gépre nem másolható a tábla-csak onnan megnyitva használható, emailben nem lehet csatolni, de a szerverről megnyitható legyen és szűrhető legyen
Munkahelyről írtam a kérdést, sajnos most nem férek hozz a fájlhoz, hétfőn vagy kedden bővebben válaszolnék, de a képlet alapvetően működött - ahogy az az alatta levő két értéken talán látszik - ez az első dátum, aminél hibát vettem észre, igaz nem régóta használom.
Chat GPT meg google segítségével írtam, mert a mezítlábas verziója nem kezelte jól a szökőéveket meg az 53 hetes éveket/évváltásokat.
Az alapszitu, hogy van egy SAP-s pdf-es előrejelzésem/rendelésem, ahol az igények ideje (e a G oszlopba van átemelve) hol úgy van megadva, hogy Day 04.01.2025, hogy úgy, hogy Week 02.2025, hol úgy, hogy Month 05.2025 és ezeket akartam egységes forátumúvá varázsolni.
Még egy utolsó off tbando ügyében. A tiltással (rootolás?) kapcsolatos tbandoo hozzászólások 2013-ban történtek. De ennek feltehetőleg lett foganatja, mert tbando később mégis tudott írni. Én egy 2014. június 1-i hozzászólást találtam utoljára: https://forum.index.hu/Article/viewArticle?a=130519045&t=9009340. Nem tudom, van-e frissebb. Talán nincs.
1. Abból indultam ki, hogy mind a hosszúság mind a szélesség esetében oldalanként kell "lefedni" a méretet.
2. A méret minden esetben "lefedhető" az adott 6 méretű összekötővel
Ezekkel a feltételekkel használható az Excel Solver bővítménye.
A bővítményt a Fejlesztőeszközök - Excel bővítmények - Solver bővítmény bepipálásával kapcsolhatod be.
A makró futásához szükséges hozzá még egy referencia hozzáadása a VBA nézetben - Tools - References - ablakban megtalálod a Solvert, ide is kell egy pipa.
Elvileg abban a fájlban, amit küldtem, ez a két lépés benne van, ha másik munkafüzetbe másolod át, akkor szükségesek a leírtak.
A kiszamolo makrót használhatod.
Mit csinál a makró:
A mintádban sárgával jelölt területre számítja ki az optimális megoldást az alábbi képlet alapján:
Az A3 cellában levő hosszúságra
=SUMPRODUCT($K$2:$P$2,$K3:$P3)-A3
A B3 cellában levő szélességrebe
=SUMPRODUCT($K$2:$P$2,$K3:$P3)-B3
A két számítást külön-külön egymás után végzi el és a kapott értékeket eltárolja tömbváltozókban.
Ha van megoldás, akkor mindkét eredményt megszorozza 2-vel és beírja a megfelelő helyre, majd szövegesen is kiírja az eredményt. Ha nincs megoldás, akkor azt a szöveget írja ki és az összekötők celláiből törli a benne levő adatokat.
Ezt végrehajtja a sárgával jelölt területen soronként, majd a végén a képletes cellákat törli az S:T oszlopokból.
A területet automatikusan határozza meg az A oszlopban levő adatok (azaz az első üres celláig), így fontos, hogy ne legyen üres cella közben az A oszlopban.
Ha látni szeretnéd a képleteket, akkor a
cter.Clear
sor elé tegyél egy aposztrófot (').
Ebben az esetben láthatod az S:T oszlopokban a használt képleteket.
Természetesen a Solver manuálisan is használható - a T oszlop utolsó beképletezett cellájára állva az Adatok - Solver menüpontban láthatod a Solver beállításait. A Megoldás gombra kattintva majd elfogadva a megoldást a K-P oszlopok utolsó sorába bekerülnek az értékek (ez a szélességet egyszeresen lefedő kombináció lesz).
FONTOS!
Ez a módszer csak akkor használható, ha az adott hosszúságot pontosan le lehet/kell fedni az összekötőkkel. Ha túlnyúlás is lehetséges/megengedett, akkor hibaüzenetet fogsz kapni. Ugyanakkor azt gondolom, hogy némi próbálgatással - hacsak nem tömeges a túlnyúlási eset - lehet a méreten változtatva megoldást találni.
Ha bármilyen gondod lenne, írj bátran, akár privátban is.
Ha rákeresel a nevére, akkor két Tbando is van. A Tbando nevűt rootolták (ez akármit is jelentsen, szerintem kb. banolták), akkor hozta létre a Tbandoo nevű nicket, de azzal se tudott írni az Excel topikba
Tbando valamikor 2014-ben egyik pillanatról a másikra eltűnt. Pedig nagyon aktív és nagyon rokonszenves figura volt. Hogy él-e még, az nem derül ki itt a fórumon. Akkor is többen hiányoltuk. (https://forum.index.hu/Article/viewArticle?a=131382581&t=9009340)
Tbando nevéről én még nem is hallottam, pedig már évek óta aktívan olvasom a különböző fórumokat. Most, hogy rákerestem, Te állapítottad meg pár éve, hogy valószínűleg meghalt.
Az SQL szerveres dolognak még utána kell néznem, hogy nem-e akadna valamivel. Valamilyen adatbázis server már fut a szerveren, mert szükséges a számlázó program működéséhez. Az lehet nem jött le teljesen az írásomból, de szimultán1 kell az adatokkal dolgozni egyszerre több gépen. Van beállítva egy MS Server (franc se tudja melyik verzió éppen) és azt éri el az összes számítógép. Fel van csatolva hálózati meghajtóként, mindegyik gépen ugyan úgy, hogy a "parancsikonok" működjenek. Nyilván nem konkrét parancsikonnak kell működnie, hanem Excel hivatkozásoknak. Idén lett lecserélve a szerver egy combosabbra és komolyabb biztonsági beállítások is lettek érvényesítve. Ebben a részében én már nem vettem részt aktívan, már csak bedolgozgatok a cégnek, nem vagyok náluk aktív állományban. De megőrjítettek az átállással. Egyrészt a gépnév megváltozott (jó ezen túllendültem, mert a hosts fájlba beírtam a megfelelő sorokat), de a benti gépek egy részén nem gépnévvel csatolták fel a hálózati meghajtókat, hanem IP címmel. Így meg nem lehet hozzáadni megbízható helyként az Excelhez és mindig letiltja a makrókat...
Igazság szerint PowerQuery-vel még sohasem foglalkoztam. Egész egyszerűen eddig még nem éreztem sohasem szükségét. Majd utána nézek.
SQL: egyetemen fel kellett venni informatika órákat is. Egyik félév programozás volt C-ben, a másik félév már nem tudom, hogy mi volt, de ott tanultunk Access-t is. Legalábbis érintettük, én gyűlöltem, mert szerintem egy logikátlan sz.r. Inkább feltettem a kérdést az első órán, hogy ha SQL parancsokkal is meg tudom oldani a feladatokat, akkor úgy is meg lehet-e csinálni azokat. Azt mondták, hogy nyugodtan, itt nem része az SQL nyelv megtanulása az órának, de ha tudom, akkor nyugodtan használjam. Így nekem az Access kimaradt. Bármilyen feladatot kaptunk megírtam rá a parancsot és töredéke idő alatt készvoltam mint a többiek.
1.: Nyilván az Excel korlátai miatt egyszerre csak egy ember szerkesztheti a dokumentumokat, de sok esetben nincs is szükség azok szerkesztésére. Pl. csak térfogatot vagy tömeget kalkulálnak vele a kollégák. Amúgy sem menti el az ember, mert megvan a végső adat az rögzítve van a futárszolgálat rendszerében és utána már amúgy sincs rá szükség. Vagy csak megvan nézve gyorsan, hogy éppen beférnek-e a rendelt cuccok a saját kocsinkba.
ChatGPT: Kb. egy évvel foglalkoztam vele aktívabban, illetve pár hete újra ránéztem. Sokat fejlődött, de még mindig sok baromságot állít. Simán megállapította, hogy a 441-nek nem osztója a 7. Miközben 63*7=441. Azt vettem észre, hogy egyre több embernek lett alapvető dolog, hogy valamilyen GPT-hez fordul, ha bármilyen problémája van, de nem ellenőrzik a kapott információt. Pedig rengeteg hülyeséget állítanak látszólag nagy magabiztossággal. Én nem hiszek bennük feltétlenül, amikor makrókat írok vagy programozok sohasem használok GPT-t. Szeretem, ha átlátom és megértem, hogy mit miért és hogyan csinálok, mert akkor legközelebb már zsigerből fog menni. Oké, ha van egy problémám, akkor rákeresek a neten és általában találok is rá megoldást, de attól függetlenül értelmezni is szoktam a kapott dolgokat és a saját kódomra formázom azt.
u.i.: már az is megfordult a fejemben, hogy magam írok egy programot (-: de szabad időm és energiám.
ezt had erősítsem meg, egész jól leírtad a lényeget az átállással kapcsolatban. De szerintem megéri.
És még egy dolog: Elérsz ERP-ket MSSQL-el, Acces-el is gondolom. Csak a teljesítmény nem mindegy. Közvetlenül megkapod az adataidat, nem kell excellel második lépcsőként vacakolni.
PQ-ban (PowerQuery) szintén ez lehetséges, de kell az sql alá.
Ez 1 felhasználós, tökéletes lesz a céljaidra. Inkább szerveralkalmazás, de megy lokálba is.
Tökéletesen kapcsolódik excelhez oda - vissza.
Tovább erősen ajánlom ekkora tömegehez az MS PowerQuery-t. Iszonyú sok munkát meg tudsz vele takarítani, gyors, átlátható, alapszinten érthető, doksi tengernyi. Integrált az excelbe (verziófüggő)
Együtt érzek veled, szóval szívesen segítek bármiben - de az út hosszú - mert bele kell merülnöd mssql-be.
ChatGpt is segít, használd. Elmagyaráz mindent - még ha néha f@ságokat is mond - de jó.
Én - jó régen volt már - használtam Accesst, nagyon nagy számú, több milliós rekordszámmal. Akkor nem kellett Excellel foglalkozni hozzá. Ezzel együtt én úgy látom, simán lehet lekérdezéseket irányítani az Excelből az Access adatbázis felé. Így emiatt nem kellene nagyon átdolgozni az Excel rutinjaidat.
Az adatbázis igen nagy előnye nyilván a konzisztencia, megfelelő táblaszervezéssel hatékonyság és egyszerűség érhető el - de ezt neked nyilván nem kell ecsetelni.
Természetesen vannak az Access-nél bizonyára jobb adatbáziskezelők, de nem biztos, hogy azok megtanulása és folyamatba illesztett implementálása valószínűleg bonyolultabb lenne annál.
Évek óta toldozgatok-foldozgatok Excel adatbázisokat. A szó legszorosabb értelmében lehet nyugodtan adatbázisról beszélni. Annyi kereszt hivatkozás van a táblázatok között, hogy lassan már követhetetlenné válik minden. A legnagyobb probléma, hogy az adatok egy része több táblázatban is szerepel önállóan. Azaz nem hivatkozásként, hanem sima beírásként. És ha frissíteni kell az adatot, akkor az esetek nagy részében nem igazán foglalkoznak vele, hogy mindenhol frissítsék azokat.
A felhasználók nem igazán értenek az Excelhez, némelyiket egy egyszerű két cella összeadása képlet is megizzasztja. Ez a sok szabadon álló táblázat részben emiatt a tudatlanság miatt alakult ki az elmúlt 20-25 évben. Sok táblázatot már egyé gyúrtam és kereszthivatkozásokkal átjárhatóvá tettem őket egymásba, de ez sem az igazi. Egyszerűen nem képesek megérteni, hogy csak úgy új oszlopokat nem illik beszúrni valahova középre, mert akkor szétcsúsznak a másik táblázatok. Az index-hol.van függvények nem játszanak, mert sok az adat és nagyon lassítanának (meg talán másik táblázatba se lehet velük hivatkozni, de erre most nem vennék mérget).
Az biztos, hogy Access adatbázisokat össze lehet kapcsolni Excel táblázattal. Még nem igazán jártam utána a mikénteknek. Nekem az is fontos lenne, hogy ha valamit módosítanak, akkor az frissüljön be az Access-be. Csak az Access nem jó, mert sokat kell számolni is az adatokkal. Azt tudom, hogy makróval teljes hozzáférés van az adatbázisokhoz, olyat makróim már vannak, amik bizonyos adatokat kimentenek adatbázisba.
Az Excelt nem szeretném teljesen elengedni, mert ki van használva azon funkciója is, hogy meg lehet belőle hívni a parancssort. Ez által már automatizáltam e-mail küldést, ahol a táblázatban vannak nyilvántartva a nevek, e-mail címek, csatolmányok (amik címzettenként eltérők, nem csak fájl szinten, hanem mennyiség szintjén is). Szóval elég jól ki van használva az Excel minden képessége.
A kérdésem, hogy szerintetek mit csináljak? Kezdjem el átszervezni a nyers adatokat Access-be és akkor mindenhonnan elérhető válnak majd és csak azokat húzzam be mindig, amikkel éppen dolgozni kell. Vagy tudtok esetleg valami alternatív programot, ami ki tudna szolgálni és nem bonyolult a kezelése?
Egyáltalán képes normálisan együtt működni az Excel az Access-szel?
Szerintem érdemes lenne megnézned hozzá az Excel Solver bővítményét. Elég jó szokott lenni. Ha teszel fel egy pár adatot tartalmazó akár képet, de fájl még jobb lenne, akkor példát is megpróbálok csinálni belőle.
Kérdés, ill. észrevétel: Szerintem nem a 2x(H+SZ)(! - kell a zárójel) távolságot kell felosztani, mert a H és SZ külön-külön kell áthidalhatónak lenni a "sarkok" miatt. Pl. H 3 és SZ 2 nem rendezhetó összekötő 5 használatával. Kell egy legalább 2 és egy legalább 3 összekötő. De lehet, hogy nem jól gondolom.
Sziasztok! A B oszlop hossz és szélesség alapján számoljon a képlet úgy hogy a hossz és a szélesség adatai alapján felépül egy négyzet majd azok "vonalait számolja ki úgy hogy egy adott méret a fix összekötők adatait használja fel a leggazdaságosabban de ha van maradvány azt elhanyagolja
Négyzet vagy téglalap felépítése:
Az A (H) oszlopban a hosszadatok,
A B (SZ) oszlopban a szélességadatok vannak. Ezek alapján felépít egy kerületet, amit négy vonal (két hosszanti és két szélességi oldal) ad ki.
Összekötők optimalizált használata:
Az Összekötők (M, N, O) oszlopai különböző fix méretű összekötőket tartalmaznak (pl. 0,73; 1,09; 2,07 stb.), amelyeket a hosszanti és szélességi vonalak lefedésére használ.
A számítás az összekötőket a leghatékonyabb módon próbálja felhasználni (kevesebb darab, nagyobb összekötők).
Ha nem tudja pontosan lefedni a vonalakat (pl. maradék miatt), akkor a maradékot figyelmen kívül hagyja.
Számítás menete (példa):
Hosszanti oldalak = 2×H,
Szélességi oldalak =2×SZ,
Az összes oldal teljes hossza = 2×H+SZ
Ezt a teljes hosszt próbálja felosztani a megadott méretű összekötőkkel.
Összegzés:
Az összekötők darabszámát külön oszlopokban (pl. M, N, O) adja meg a méret szerint.
Ha több variáció van akkor a leghosszabb fix méret a releváns Köszönöm!
Sziasztok! A B oszlop hossz és szélesség alapján számoljon a képlet úgy hogy a hossz és a szélesség adatai alapján felépül egy négyzet majd azok "vonalait számolja ki úgy hogy egy adott méret a fix összekötők adatait használja fel a leggazdaságosabban de ha van maradvány azt elhanyagolja
Négyzet vagy téglalap felépítése:
Az A (H) oszlopban a hosszadatok,
A B (SZ) oszlopban a szélességadatok vannak. Ezek alapján felépít egy kerületet, amit négy vonal (két hosszanti és két szélességi oldal) ad ki.
Összekötők optimalizált használata:
Az Összekötők (M, N, O) oszlopai különböző fix méretű összekötőket tartalmaznak (pl. 0,73; 1,09; 2,07 stb.), amelyeket a hosszanti és szélességi vonalak lefedésére használ.
A számítás az összekötőket a leghatékonyabb módon próbálja felhasználni (kevesebb darab, nagyobb összekötők).
Ha nem tudja pontosan lefedni a vonalakat (pl. maradék miatt), akkor a maradékot figyelmen kívül hagyja.
Számítás menete (példa):
Hosszanti oldalak = 2×H,
Szélességi oldalak =2×SZ,
Az összes oldal teljes hossza = 2×H+SZ
Ezt a teljes hosszt próbálja felosztani a megadott méretű összekötőkkel.
Összegzés:
Az összekötők darabszámát külön oszlopokban (pl. M, N, O) adja meg a méret szerint.
Ha több variáció van akkor a leghosszabb fix méret a releváns Köszönom!
Sziasztok! A B oszlop hossz és szélesség alapján számoljon a képlet úgy hogy a hossz és a szélesség adatai alapján felépül egy négyzet majd azok "vonalait számolja ki úgy hogy egy adott méret a fix összekötők adatait használja fel a leggazdaságosabban de ha van maradvány azt elhanyagolja
Négyzet vagy téglalap felépítése:
Az A (H) oszlopban a hosszadatok,
A B (SZ) oszlopban a szélességadatok vannak. Ezek alapján felépít egy kerületet, amit négy vonal (két hosszanti és két szélességi oldal) ad ki.
Összekötők optimalizált használata:
Az Összekötők (M, N, O) oszlopai különböző fix méretű összekötőket tartalmaznak (pl. 0,73; 1,09; 2,07 stb.), amelyeket a hosszanti és szélességi vonalak lefedésére használ.
A számítás az összekötőket a leghatékonyabb módon próbálja felhasználni (kevesebb darab, nagyobb összekötők).
Ha nem tudja pontosan lefedni a vonalakat (pl. maradék miatt), akkor a maradékot figyelmen kívül hagyja.
Számítás menete (példa):
Hosszanti oldalak = 2×H,
Szélességi oldalak =2×SZ,
Az összes oldal teljes hossza = 2×H+SZ
Ezt a teljes hosszt próbálja felosztani a megadott méretű összekötőkkel.
Összegzés:
Az összekötők darabszámát külön oszlopokban (pl. M, N, O) adja meg a méret szerint.
Ha több variáció van akkor a leghosszabb fix méret a releváns Köszönom!
Köszi. Távoli asztallal belépve az egyik gépen 2016-os van, de nem azon próbálták. Azt tudom, hogy 2016-os beszerzések voltak a munkaállomások és jó darabig én is azon dolgoztam, amit jelenleg is elérek távolról. Azon én telepítettem egyszer újra az officet. Így lehet, hogy a másikon egyel régebbi fut még.
Szóval a 2016-os verzióban szépen lefutott a kód.
Azért köszi a tippet, átírtam "add"-ra "add2"-ről. Nincs szükségem olyan funkcióra, ami csak az "add2"-ben van benne.
Készítettem egy makrós excel dokumentumot. Nálam 2021-es verzió alatt szépen fut hiba nélkül, viszont azt a visszajelzést kaptam, hogy máshol "Object doesn't support this property or method" hiba üzenetet ad.
Gondolom ez egyértelmű. Bekerül a megfelelő dátum, konténer szám, cikkszám és mennyiség, valamint ha szükséges, akkor megjegyzés is a megfelelő oszlopba.
"Kimutatás" lap:
Bal felső cellában lévő logóval lehet futtatni a makrót, ami a következőt csinálja:
Változók B oszlop törlése
Készlet mozgás C oszlop másolása a Változók B oszlopába
Változók B oszlop ismétlődő adatok törlése, fejléc figyelembe vételével
Változók B oszlop cikkszámok növekvő sorba rendezése
Kimutatás fülön minden cellából törli a benne lévő adatot
Kimutatás A oszlopába átmásolja a cikkszámokat a 2. sortól kezdődően
Kimutatás 1. sorába bemásolja a konténer neveket, miközben kiszámolja, hogy az adott cikkszámból mennyi található az adott konténerben. Valamint beállítja a cella formátumát, hogy a nullák ne jelenjenek meg
Az első sorban a konténer neve és a sorszáma közötti szóközt kicseréli sortörésre
Én is úgy csináltam, ahogy Eredő Vektor leírta. Egy jóval tágabb intervallumot adtam meg a lekérdezéshez. Pl. a számlázóban is 2999.12.31-re szoktam minden vevői állandó akció lejárati dátumát állítani. Valószínűleg a program sem fog már akkor működni, ha meg mégis, akkor majd az utódom átírogatja őket :) Leltár készlet érték számításnál kell nekem is az MNB árfolyam. Decemberben szoktam aktualizálni benne a cikkszámokat, januárban pedig az árfolyamokat. Utána ráérek kitölteni a megfelelő adatokat. Ha meg benne van közben olyan árfolyam is, amire nincs szükségem, akkor sem zavar sok vizet. Pár évente a feleslegesen régieket szoktam törölni. A futár szolgálatok díjszabása pedig függ a NAV üzemanyag árától. Ott úgy van beállítva a táblázat, hogy minden megnyitáskor húzza le az aktuális év adatait. Így csak évente egyszer kell módosítani a lekérdezésen, mert az aktuális év adatai mindig más URL-en érhetőek el a NAV weboldalán... És még logika sincs az URL-ek felépítésében. Ez mondjuk kicsit szívfájdalmam.
szóval a lényeg, hogy ez a tábla frissül, a tág intervallumot figyelembevéve belekerül az épp aznapi. Ebből fkeressel vagy akármivel fel tudod szedni ahová kell.
Tudnátok abban segíteni, hogy hogyan lehet valutaárfolyamot menteni a táblázatba. Vagyis az a cél, hogyha megnyitom a táblázatot, akkor az aznapi (vagy legutolsó) MNB árfolyammal számolja át az árakat? Ami videókat találtam a neten, azok a lejkérdezést mutatják, de az csak a lekérdezés napjáig ad adatot, utána nem frissül.
Abban kérném a segitséget, hogy termék válogatás lenne. Remélem az excel és ti tudtok benne segiteni.
Feladat:
"A" oszlopba van egy dmc (számsor) aminek cime "szerver", "B" oszlopba van egy másik dmc (számsor) aminek cime "kiszállitva". "C" oszlopba scannelnénk be termékeket, tehát adnánk be egy másik dmc "számsort". Azt szeretnénk hogy "D" oszlopba mindig a "C" oszlopba bescannelt dmc számsor mellé irja ki, hogy " szerver" vagy " kiszállitva" attól függően hogy az szerepel az "A" vagy "B" oszlopban megadott dmc között. Ha nem szerepel se "A" se "B" tökéletes a "HIÁNYZIK" kifejezés amit alapból az excel függvény kir ha nincs találat.
"Nem akarom elvenni pimre elől sem a lehetőséget, ...". Nekem az nem gond, hogy találtál egyszerűbb megoldást, mint az enyém. És ahogy látom a 38253-as válaszból. hogy működik. Örülök neki.
Gyorsan megnéztem, amit találtam hirtelen, olyan esetekben ha a dupla nagybetű és számkód között szóköz van, nem hozza a számkódot.
Ilyen pont nem volt a mintában, amit megadtam.... :-(
(csak a felsorolásnál említettem)
Egyébként, igen a "az egyes tulajdonság között szóközgondolatjelszóköz van" - ez így van, megállja a helyét. (A példában az említett helyen én rontottam el.)
Nem akarom elvenni pimre elől sem a lehetőséget, de van a makrónál egyszerűbb dolog is, ha "az egyes tulajdonság között szóközgondolatjelszóköz van:" ez a rész valóban megállja a helyét.
Viszont a példa fájlban a 4. sorban ki van hagyva egy szóköz a gondolatjel után. Ha ez most emberi hiba miatt került bele így a példa fájlba és a program szabályosan generálja ezt a részét, akkor nincs baj, mert akkor az alábbi képlet megadja az utolsó csoportot:
"...ha kettőnél több al-tulajdonság van felsorolva, akkor az első al-tulajdonságból kell a két nagybetűs kód és a az első al-tulajdonság számkódja, illetve mindig az utolsó al-tulajdonság dupla nagybetűs kódja és számkódja."
Értem, de a programnak akkor is végig kell mennie az egészen, hogy kiderüljön, melyik az utolsó.
Majd hétvégén átgondolom az egészet, és jelentkezem.
Meg nekem, ha kettőnél több al-tulajdonság van felsorolva, akkor az első al-tulajdonságból kell a két nagybetűs kód és a az első al-tulajdonság számkódja, illetve mindig az utolsó al-tulajdonság dupla nagybetűs kódja és számkódja.
A köztes tulajdonságok adataira nincs szükségem. Az megoldható?
Szia, még nem tudom küldeni, mert jött egy újdonság. A mintáidból azt hittem, hogy nem lesznek benne ékezetes magyar karakterek. Viszont az é betűk magzavarták a 7. 8. stb. sorokban lévő adatokat. Így most egy képet küldök a futtatás eredményéről, aztán holnap utánanézek, mit tudok tenni.
Szia, kezdem azzal, hogy borzasztóan nehéz ennyire következetlen adatbevitellel kezdeni valamit.
Én mindenesetre megpróbálkoztam az általad írt minta alapján úgy szétszedni az adataidat, hogy lehessen kezdeni valamit.
Nem vacakoltam azzal, hogy az eredményt összefűzzem, és + jeleket tegyek az egyes részek közé. Csak annyit tettem, hogy a 10. (J) oszloptól kezdődően külön oszlopokban tegyem az egyes adatrészeket.
Feltételeztem továbbá, hogy van fejléc, ezért a 2. sortól indítottam a keresést. És mivel kevés példa volt, csak 3 mintával foglalkoztam:
If Asc(UCase(Left(forrasstring, 1))) > 64 And Asc(UCase(Left(forrasstring, 1))) < 91 Then
ws.Cells(sor, celoszlop) = Left(forrasstring, 2) ' Ha az első karakter betű, akkor úgy veszem, hogy a második is az. Enélkül túl bonyolult lenne
forrasstring = Mid(forrasstring, 3)
End If
celoszlop = celoszlop + 1 ' Ha betű volt, akkor jó, egyébként a céloszlop üresen marad, és jön a következő
If Not karkeres(forrasstring) Then Exit Do
If Asc(Left(forrasstring, 1)) > 47 And Asc(Left(forrasstring, 1)) < 58 Then ' Ha szám
adatstring = Left(forrasstring, 1)
i = 2
While Asc(Mid(forrasstring, i, 1)) > 47 And Asc(Mid(forrasstring, i, 2)) < 58 ' Amíg folyamatosan számok jönnek
adatstring = adatstring & Mid(forrasstring, i, 1)
i = i + 1
If i > Len(forrasstring) Then forrasstring = forrasstring & " " ' Hogy ne akadjon ki
Wend
ws.Cells(sor, celoszlop) = adatstring
forrasstring = Mid(forrasstring, i)
End If
celoszlop = celoszlop + 1
If Not karkeres(forrasstring) Then Exit Do
If Asc(UCase(Left(forrasstring, 1))) > 64 And Asc(UCase(Left(forrasstring, 1))) < 91 Then ' Ha karakter
adatstring = Left(forrasstring, 1)
i = 2
While Asc(UCase(Mid(forrasstring, i, 1))) > 64 And Asc(UCase(Mid(forrasstring, i, 1))) < 91 ' Amíg folyamatosan betűk jönnek
adatstring = adatstring & Mid(forrasstring, i, 1)
i = i + 1
If i > Len(forrasstring) Then forrasstring = forrasstring & " " ' Hogy ne akadjon ki
Wend
ws.Cells(sor, celoszlop) = adatstring
forrasstring = Mid(forrasstring, i)
End If
celoszlop = celoszlop + 1
Loop Until Len(forrasstring) = 0
' Wend ' azután az egész kezdődik előlről, amíg van újabb tétel a sorban
Next sor
End Sub
Function karkeres(forrasstring) As Boolean
karkeres = True
While Not (Asc(UCase(Left(forrasstring, 1))) > 64 And Asc(UCase(Left(forrasstring, 1))) < 91 Or Asc(Left(forrasstring, 1)) > 47 And Asc(Left(forrasstring, 1)) < 58)
forrasstring = Mid(forrasstring, 2) ' Ha nem karakter és nem szám, akkor töröljük
Ez pedig, ha nem Excelben van eltárolva a kép, hanem mappából kell beilleszteni:
If Len(Dir(mappa + CStr(Cells(i, kepNevekOszlopa)) + ".jpg")) = 0 Then
'Ide kell jönnie egy hiba kezelésnek, hogy mi legyen akkor, ha nem létezik a kép
Else On Error Resume Next Set kep = ActiveSheet.Shapes(CStr(Cells(i, kepNevekOszlopa))).Delete On Error GoTo 0 ActiveSheet.Shapes.AddPicture _ (Filename:=mappa + CStr(Cells(i, kepNevekOszlopa)) + ".jpg", _ linktofile:=msoFalse, savewithdocument:=msoCTrue, _ Left:=x + x1, Top:=y + y1, Width:=meret, Height:=meret).Name = Cells(i, kepNevekOszlopa) End If
"mappa": az a változó, amiben a mappa elérési útvonalát tárolom, sima string
"i": long típusú változó, ebben az esetben a sornak a sorszámát jelöli.
"kepNevekOszlopa": szintén string. Ebben tárolom, hogy melyik oszlopban vannak a képek nevei. (Kiterjesztés nélkül, mert a ".jpg" kiterjesztés később kerül hozzáadásra)
"x": horizontális irányú eltolás az adott oszlopig
"x1": a kép méretéből adódó eltolás, hogy az oszlop közepére kerüljön a kép
"y": vertikális irányú eltolás az adott sorig
"y1": a kép méretéből adódó eltolás, hogy a sor közepére kerüljön a kép
Azaz az x, x1, y és y1 változóknak köszönhetően pontosan a cella közepére fog kerülni a beillesztendő képem.
"meret": a cella magasságából és szélességéből kalkulált érték. Mivel nálam 1:1 arányú képeket kell beilleszteni, így csak ellenőrzöm, hogy melyik méret a kisebb és az lesz egyenlő a mérettel.
Nálam az "x" értékét cikluson kívül határozom meg, mert fentről lefelé haladva illesztem be a képeket.
"x1", "y1" és a "meret" változó cikluson belül kalkulálódik minden egyes sornál. Bár törekszem az egységes táblázat formátumra, így gyakorlatilag mindig ugyan azt az értéket veszi fel egy-egy táblázat esetén.
"y" értékét pedig minden egyes ciklus végén növelem az adott sor magasságának megfelelően. "i" értékét is növelem a ciklus végén, hogy a következő sorra ugorjunk a kép beillesztéssel
Ebben a makró részletben egy másik munkalapról másolok át képet:
Dim MyPicture As Object Dim MyTop As Double Dim BottomRightCell As Range Dim aktivcella As String Dim i As Long Dim kepnev As String Dim kep As Shape aktivcella = ActiveCell.Address
...
Variables.Shapes(kepnev).Copy
Range("L1:M2").Select ActiveSheet.Paste Variables.Range("C1") = Variables.Range("B1") Range(aktivcella).Activate With ActiveWindow.VisibleRange r = .Rows.Count Set BottomRightCell = .Cells(r, 12) End With Set MyPicture = ActiveSheet.Pictures(1) MyTop = BottomRightCell.Top - MyPicture.Height - 5 With MyPicture .Top = MyTop .Left = 760 End With
"Variables": munkalap kódneve, amin a képeket tárolom
"kepnev": nagyon kreatívan azon változó, amiben a képnek a nevét tárolom. Esetemben generálom egy százalékos kifejezésből.
Makróval meg lehet oldani, de azt vagy manuálisan kell lefuttatni vagy lehet automatizálni is a futtatását. Viszont ha sok a kép és automatizálva van a futtatás, akkor nagyon belassulhat az Excel.
A munkahelyi programba egy mondjuk termékhez, többféle adatsort, tulajdonságot, al-tulajdonságot, adatot, paramétert stb rögzítünk be.
Amikor kérünk egy lekérdezést, azt excelbe átimportálva hozza le.
Az egyik jellemző tulajdonsághoz több al-tulajodnág is tartozik, amiket a lekérdezésnél nem külön oszlopba hoz le, hanem egy cellába hozza őket, "-" jellel elválasztva.
Alapvetően egy tulajdonság így néz ki: GK-8201 Bgkfdez = azaz két nagybetű + számsor + betűsor (első nagybetűvel kezdve)
ha egy tulajdonságához, több al-tulajdonság is tartozik, akkor azokat, ahogyan fent írtam egy cellába hozza, köztük gondolatjellel elválasztva: pl: 2 tulajdonság lett berögzítve: GK-8201 Bgkfdez - BZ-88888 Jobtagj
A feladatom az lenne hogy ezekből az adatokból nyerjem ki az első nagybetűs kódot, aztán az első számsort, aztán az utolsó nagybetűs kódot és az utolsó számsort. Azaz: GK-8201 Bgkfdez - BZ-88888 Jobtagj = > GK + 8201 + BZ + 88888 vagy: GK-8201 Bgkfdez - BZ-88888 Jobtagj -UU-87896 Hjulohdt => GK + 8201 + UU + 87896
A helyzetet tovább bonyolítja, hogy ezen tulajdonságok berögzítésénél pontatlanságok vannak: van olyan, hogy lemarad a dupla nagybetűs kód:
van olyan, hogy a nagybatűs kód és a számsor között nincs "-" jel: pl: GK8201 Bgkfdez - BZ-88888 Jobtagj -UU87896 Hjulohdt
van olyan, hogy a nagybetűs betűkód és az azt követő számsor között szóköz van a "-" jel helyett:
pl: GK-8201 Bgkfdez - BZ 88888
A számsorok hossza változó 4-től kb 10 karakterig lehet bármilyen hossz A számsor lehet, h nullával kezdődik, itt fontos, hogy maradjon meg a nulla is
A dupla negybetűs kódok kb 30 féle verzióban fordulnak elő, azokat segédtáblán fel tudom sorolni, ha kell 2 tulajdonság a minimum (mint: GK-8201 Bgkfdez - BZ-88888 Jobtagj ), de ez elmehet akár egészen 8-ig, 10-ig is akár, amit ugye min egy cellába tesz össze a lekérdezés, az egyes tulajdonság között szóközgondolatjelszóköz van: pl: GK8201 Bgkfdez - BZ-88888 Jobtagj - UU87896 - BZ-88888 Jobtagj - UU87896 - GK-8201 Bgkfdez - BZ 88888
az eredményül kapott 4 adatsor (első dupla nagybetűs kód + első számsor + utolsó dupla nagybetűs kód + utolsó számsor) külön cellában szerepeljen Ha valahol kimarad a dupla nagybetűs kód ott, mondjuk vagy üres maradjon az eredmény cella, vagy mondjuk tegye be, hogy "hiányzik"
Amúgy a formátumnál alapértelmezetten a pozitív, negatív és a nulla esetén megjelenő formátumokat is megadjuk.
Viszont ha eltérő formátumot szeretnénk mondjuk a negatív számok esetén, akkor azt az első pontosvessző után kell megadni.
Ha pedig nulla érték esetén szeretnénk más formátumot, akkor azt a második pontosvessző után kell megadni.
Nálad az volt a trükk, hogy ha negatív lett az eredmény, akkor a pontosvessző után nem adtunk meg formátumot. Így azt üresnek veszi és nem jelenít meg semmit sem negatív eredmény esetén.
Ha azt szeretnéd, hogy az órákat is mindig két számjegyesen jelenítse meg, akkor "ó" helyett "óó"-t írj.
E2 és F2 formátumnál fontos, hogy az "ó:pp" után még kerüljön egy pontos vessző is.
Szerintem te rosszul számoltad a mínusz és a plusz időket. Számomra az a logikus, hogy ha a 2. sort vesszük alapul, akkor az emberünk bent volt 7 óra 30 percet és közben kivett egy fél órás ebédszünetet. Azaz 7 órát dolgozott a valós 8 helyett, így a mínusz oszlopba "1:00" kifejezésnek kellene kerülnie.
Mellékelek egy táblázatot ami Zöldel jelölt cellákat én töltöm ki ,és a kiszámolja a C oszlopba a eltöltött időt ,ez nem bonyi. Aztán a D oszlopba ha „x”-elem akkor a 8 órából lesz 8 óra 30 perc (ledolgozzuk az ebédet),a különbözetet két oszlopra osztottam (de lehet meg lehet csinálni egy oszlopba is) ami kiírja hogy menny a plusz óra vagy mínusz óra . Itt csak egy adatnak kéne megjelennie vagy a mínusz vagy a plusz „G” oszlopba viszont percet szeretnék megyjeleniteni ,de úgy ha minuszos akkor mínusz elöjellel írja ki . sokmindent probáltam már Mesterséges inteligenciával ,de értetlen és nem is müködtek pontosan ,de lehet én voltam béna ,gondolom fontos a cella formátum is Ebben kérnék segítséget Vagyis csak a A B és a oszloba irok adatot ,a többi függvény Köszönöm
Ez gyakorlatilag A2=1;2;3;4;5 értékre működik. Jobbra és lefelé is húzható.
Eddig egyszerű volt a dolog, mert csak számokat kellett összeadni :)
Ezután jött a nem teljesen tiszta rész.
Az oké, hogy B4-be (nálam, hogy inkább elkülönüljön B5-be) kerül az aktuális készlet. És ebből szépen kivonogatom a B1-ben lévő cella értékét egészen addig, amíg nullát nem kapok. Csak azt nem értem, hogy ennek mégis mi köze van a B2:H3 tartományban lévő számokhoz. Mert én úgy értelmeztem, hogy B1-ben van egy féle termék heti rendelése, C1-ben pedig egy másik termék heti fogyása, stb. Így nem értem, hogy mégis mit számolunk B2-ben, mármint mi köze van az egyik terméknek a másikhoz.
Nem túl elegáns, de makró nélkül csak erre futja. Amikor 10-et ír ki eredménynek, akkor bármilyen 9-nél nagyobb szám lehetne ott, de tovább már nincs vizsgálva.
Azt szeretném kérdezni, hogy képlettel meg lehet-e oldani, hogy a barack színű cellákban a következő eredmény jelenjen meg a kép alatt részletezett logika szerint
Az első sor egy adott számsor.
A2-ben egy megadott szám szerepel - esetünkben 2 , és azt szeretném, hogy B2-ben adja össze B1-et és C1-et (2 cellát), C2-ben C1-et és D1-et, stb.
A harmadik sorban B3-ban már 3 számot szeretnék összeadni, B1-et, C1-et és D1-et.
A felső sor egy cikkre vonatkozó vevő megrendelési/előrejelzési sor lenne, és alapvetően azt szeretném megoldani, hogy a táblázatom megjelenítse, hogy
- ha mondjuk 2 vagy 3 heti biztonsági készletet szeretnék tartani, az darabban mit jelentene, úgy, hogy ugye a heti igény nem állandó, ill. cikkenként eltérhet az elvárt biztonsági készletszint, amit közben lehet növelni vagy csökkenteni is.
Azt is szerezném tudni, hogy ha mondjuk nekem B4-ben lenne mondjuk egy 16000-es készletem, ki tudnám-e számoltatni képlettel, makró nélkül, hogy ez meddig fedezné az igényt/hány heti igényt fedezne - magyarul ha ebből elkezdeném kivonni az első sor értékeit, hányadik cellánál menne át negatívba.
Szerintem képlettel nem lehet megoldani, de ha mégis, még nem jöttem rá hogyan.
"a változtatást bevastagítottam": ezt a részt nem teljesen értettem. Viszont rögtön megvilágosodtam, amint számítógépen néztem meg. Valamiért telefonon nem volt kiemelve félkövérrel. :)
Mondjuk az továbbra sem tiszta, hogy eddig miért működött és most egy windows + office újratelepítés után miért fut hibára. Elvileg ugyan az a windows verzió és ugyan az az office verzió került vissza, lévén ugyan azzal a licence kóddal aktiváltam mint ezelőtt.
Tavaly szeptemberben p.imre-vel leveleztem szintén egy makró probléma miatt.
Ott a következő problémába ütköztem:
Variables.Shapes(kepnev).Copy
A "Variables" egy munkalap kódneve. A "kepnev" pedig a makró által kiszámított képnév. Az volt a kérés, hogy vizualizáljam meg egy teherautó telítettségét a megrendelő lapon. Maga a képnév "kocsixxx" formátumú volt, ahol xxx a telítettség volt 5%-ban kifejezve.
Az egész makrót a céges gépemen írtam meg anno egy másik dokumentumban. Utána itthon egy új dokumentumba emeltem át és ha a saját gépemen nem volt ez a sor megduplázva, akkor az esetek kb. 50%-ban nem másolta ki a képet és a makró hibával leállt, mert nem tudott mit beilleszteni. Az eredeti makrót évekig használtuk a cégnél és sohasem futottunk vele hibába, pedig elég sűrűn volt használva.
A sor duplikálás után írtam egy AHK scriptet és egy éjszakán át módosított a cellákon, hogy fusson le újra és újra a makró. Akkor már nem futott egyszer sem hibába. Ha jól emlékszem, akkor 5 másodperc volt a script időzítése, tehát óránként lefutott 720 alkalommal, 4-5 órán át biztosan futott. Szóval úgy voltam vele, hogy ha ez idő alatt nem fut hibára, akkor a hiba lehetősége már elhanyagolható.
További érdekesség, hogy p.imre-nél nem produkálta a hibát, valamint mint említettem a céges gépeken sem. Pedig bent is 6-8 gépen biztosan volt használva az évek alatt.
Szerintem próbáld így: (a változtatást bevastagítottam)
'Copy/Paste Cell Range as a Picture Selection.CopyPicture ActiveSheet.Pictures.Paste(link:=False).Select Set ActiveShape = ActiveSheet.Shapes(ActiveWindow.Selection.Name)
'Create a temporary chart object (same size as shape) Set cht = ActiveSheet.ChartObjects.Add( _ Left:=ActiveCell.Left, _ Width:=ActiveShape.Width, _ Top:=ActiveCell.Top, _ Height:=ActiveShape.Height) cht.Select 'Format temporary chart to have a transparent background cht.ShapeRange.Fill.Visible = msoFalse cht.ShapeRange.Line.Visible = msoFalse 'Ha ezeket nem kommentelem, akkor idióta hibát dob.
Sub SaveRangeAsPicture() Dim cht As ChartObject Dim ActiveShape As Shape
'Confirm if a Cell Range is currently selected If TypeName(Selection) <> "Range" Then MsgBox "You do not have a single shape selected!" Exit Sub End If
'Copy/Paste Cell Range as a Picture Selection.Copy ActiveSheet.Pictures.Paste(link:=False).Select Set ActiveShape = ActiveSheet.Shapes(ActiveWindow.Selection.Name)
'Create a temporary chart object (same size as shape) Set cht = ActiveSheet.ChartObjects.Add( _ Left:=ActiveCell.Left, _ Width:=ActiveShape.Width, _ Top:=ActiveCell.Top, _ Height:=ActiveShape.Height)
'Format temporary chart to have a transparent background ' cht.ShapeRange.Fill.Visible = msoFalse ' cht.ShapeRange.Line.Visible = msoFalse 'Ha ezeket nem kommentelem, akkor idióta hibát dob.
A hiba fejléce: Microsoft Visual Basic for Applications
A hiba szövege: System Error &H80004005 (-2147467259). Meghatározatlan hiba
Egyrészt nem tudom, hogy miért jött elő ez a hiba. Másrészt, ha a fenti két paraméter nincs beállítva, akkor az elmentett kép fájlnak lesz egy 1px széles szürke kerete.
Sajnos nekem a kép alapján nem derül ki, hogy milyen adatokra hivatkozik az adatforrás. Ha nem bizalmasak az adatok, akkor elküldhetnéd a fájlt magát. Ha bizalmasak, akkor a tényleges nevek és adatok helyett más szöveget irva talán kideríthetné valaki, hogy mi a hiba.
Sajnos m54-b olvtárs megoldása nem működik. Az az érdekes, hogy ha a 2024-et teszem az 1-3. helyre, akkor azonnal oda kerül a Jelmagyarázatban is, de ha a 4. helyre teszem (a helyére), akkor a 3.-on marad. Próbáltam azt is, hogy az 1.-re teszem, aztán elé tolok mindent, de csak a 3.-ig hajlandó lecsúszni.
Egyetlen különbség van a 3 évszám között: 2021-22-23 fixen meg van adva, 2024 egy névvel ellátott cellára mutató hivatkozás eredménye (=thisYear). De az se segít, ha csak az évszámot írom a cellába.
Kínomban meghekkeltem, a jelmagyarázatot kivágtam, átrendeztem, töröltem és képként beillesztettem. Csak el ne felejtsem 2025 januárjában lecserélni :)
Szia, akármit próbálok, nem változik a sorrend. Először átrendeztem a sorrendet (eddig normál volt: 2021-2024, átállítottam 2024-21-22-23-ra), de semmi, 2021-22-24-23 maradt. Ki- és bekapcsoltam a Jelmagyarázatot a "Diagram-összetevő hozzáadása" pontban, de semmi, csak elveszítettem a szövegformázást (könnyen visszaállítottam).
Ha a cikkszámok az A oszlopban vannak, akkor én így oldanám meg.
A képlet a B2 cellában: =HA(DARABHA(A:A;A2)>1;A2&"_"&DARABHA($A$1:A2;A2);A2) Feltételezve, hogy az első sorban oszlop nevek vannak. Ha nincsenek oszlop nevek, akkor meg csak felhúzod a képletet a B2-ből B1-be is.
Annyit csinál, hogy ha egy cikkszámból több van, akkor mögé szúr egy alsó vonást és az aktuális sorszámot. Ha csak 1 darab van a cikkszámból, akkor meghagyja az eredeti. Célszerű összesen egy alkalommal így módosítani a cikkszámokat és elmenteni őket az eredeti adatbázisban, mert ha legközelebb más sorrendben lesz a lekérdezés, akkor össze fognak keveredni az új cikkszámok.
Bocs, hogy ilyen sokára reagálok, szabin voltam és kiment a fejemből, hogy kérdeztem :) Köszönöm mindenkinek a segítő szándékot!
Itt a példa, hogy mi nem jó a grafikonban. Az adatok rendezésénél jó az évszámok sorrendje (2021-22-23-24), a megjelenő grafikonban viszont 2024 megelőzi 2023-at. Azóta sem jöttem rá, hogy mi a megoldás. Többször néztem, nincs a 2023-ban semmilyen elütés, láthatatlan karakter (pl. egy szóköz a szám előtt) vagy hasonló, ami a jelmagyarázatban a sor végére tolhatná 2023-at.
Elolvasom, csak első esetben végül elakadtam, és a konkrét táblázatban is segítséget kellett kérnem, amit bizalmas adatok miatt nem oszthattam így meg, így végül privátban dolgoztunk a segítséget nyújtóval a megoldáson, így ott sikerült pontot tennünk az ügy végére. A második esetben valóban elmaradt a reagálás, sajnálom, ott azért maradt el, mert sokáig nem tudtam, hogy én nem értek hozzá, vagy a segítséget nyújtó hagyott ki valamit, mert mindig azt hittem, hogy lefagyott tőle az excel. Aztán utólag kiderült, hogy csinálta, csak konkrétan két óráig futtatta az excel a keresést, valószínűleg túl sok adat volt, de addigra már eltelt több hónap.
Egyik ötletem: csinálsz egy -tól és egy -ig oszlopot, autoszűrővel pedig tudsz úgy szűrni, hogy a -tól oszlop esetén >=3, az -ig oszlop esetén pedig <=3.
A másik: minden látszámhoz csinálsz egy oszlopot: 1, 2, 3, 4, 5, 6, 7 stb. nevekkel, és amelyik játék az adott létszámmal játszható, oda beteszel egy X-et.
Ha nagylétszámú játékok is szerepelnek a listában (mint pl. számháború, fogócska), akkor ez igen sok oszlopot eredményez, az első módszer ott jobb lehet. Egyébként lehet a második is jó.
Társasjáték várólistámhoz szeretnék készíteni egy excelt, ebben kérném a segítségeteket. Meg tudnátok mondani, hogy hogyan tudnék egy tól-ig tartományt beállítani? Az lenne a cél, hogy mindegyik társasjátékhoz beírom, hogy hány fővel játszható, van ami csak solo, van ami 1-2, van ami 2-4, de van 6-21 fővel játszható is, szóval elég széles sávon mozog a tartomány. Ezeket a tartományokat szeretném úgy beírni az excelbe, hogy ha később rászűrök az adott oszlopra, akkor ki tudjam választani például a 3 fővel játszható játékokat, és rá tudjak szűrni csak azokra.
Sub ConvertCSVtoMMandSave() Dim ws As Worksheet Dim cell As Range Dim lastRow As Long, lastCol As Long Dim conversionFactor As Double Dim tempValue As Double Dim csvFilePath As String Dim originalCSV As Workbook Dim newCSV As Workbook ' A konverziós tényező: 1 inch = 25.4 mm conversionFactor = 25.4 ' Megnyitjuk a feltöltött CSV fájlt csvFilePath = Application.GetOpenFilename("CSV files (*.csv), *.csv") If csvFilePath = "False" Then Exit Sub ' Ha nem választottak fájlt Set originalCSV = Workbooks.Open(csvFilePath) Set ws = originalCSV.Sheets(1) ' Az utolsó sor és oszlop megkeresése lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column ' Végigmegyünk az összes cellán, amely tartalmaz adatot For Each cell In ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol)) ' Ellenőrizzük, hogy a cella számértéket tartalmaz-e If IsNumeric(cell.Value) Then ' Konvertáljuk az értéket milliméterre tempValue = cell.Value * conversionFactor ' Az új értéket visszaírjuk a cellába cell.Value = Format(tempValue, "0.000000") End If Next cell ' Elmentjük a módosított fájlt új CSV-ként csvFilePath = Application.GetSaveAsFilename("Modified_" & originalCSV.Name, "CSV files (*.csv), *.csv") If csvFilePath = "False" Then Exit Sub ' Ha nem választottak mentési helyet Application.DisplayAlerts = False originalCSV.SaveAs Filename:=csvFilePath, FileFormat:=xlCSV, Local:=True Application.DisplayAlerts = True ' Bezárjuk az eredeti CSV fájlt originalCSV.Close SaveChanges:=False ' Felhasználó értesítése MsgBox "A fájl sikeresen konvertálva és elmentve milliméterben.", vbInformation End Sub
Nem lett jó, de imádom ahogyan elmagyarázza a dolgokat:)
Hogyan használd a makrót:
Hozz létre egy új Excel fájlt: Nyiss egy új munkafüzetet az Excelben.
Nyisd meg a VBA szerkesztőt: Nyomd meg az ALT + F11 billentyűkombinációt.
Illeszd be a kódot: Kattints az "Insert" menüre, válaszd a "Module" opciót, majd illeszd be a fenti kódot.
Futtasd a makrót: Zárd be a VBA szerkesztőt, majd nyomd meg az ALT + F8 billentyűkombinációt, válaszd ki a ConvertCSVtoMMandSave makrót, és kattints a "Run" gombra.
Válaszd ki a CSV fájlt: A makró kérni fogja, hogy válaszd ki a fájlt, amelyet konvertálni szeretnél.
Válaszd ki a mentési helyet: A makró kérni fogja, hogy válaszd ki a mentési helyet és nevet az új CSV fájlnak.
Szuper! Nagyon köszönöm! Ezt össze tudjuk még kombinálni a Feri makrójával, hogy külső fájlból tudjam indítani? Bocsi, de már tényleg nem fog az agyam.
Illetve a kérdés. Pimre fórumtárs felvetette hogy: "Viszont, ha makrót írok, akkor gondoskodni kell arról, hogy véletlenül se futhasson a makró egy olyan sorra, amely már át lett alakítva mm-be."
Ezzel lehet hogy annyit kezdek, hogy a makródba rögzítek egy sort, ami beilleszt mondjuk egy piros felkiáltójelet látható helyre. vagy szöveget, hogy "Milliméterre átváltva!"
Ez sajnos ugyanolyan. Bár, ezt a mondatodat nem értem, így biztosan én csinálok rosszul valamit.
Az a helyzet hogy az őrület határán vagyok. :) Nem tudom ti hogyan tudtok még a kódolásra is figyelni.
Két monitorom van, de készen vagyok ettől az exceltől, hogy mennyire kőkorszaki. Miért nem tudják úgy megcsinálni, mint egy böngészőt, vagy a Figmát, hogy felül szépen ott vannak a lapfülek?
Public Sub atvalto() Dim tizedeselvalaszto As String tizedeselvalaszto = "," Dim lenx, leny, lenz As Double Dim lenxpoz, lenypoz, lenzpoz, templong, utolsosor As Long Dim i, j As Long Dim szoveg, cimsor As String Dim x, y, z As Variant Dim hiba As Boolean cimsor = Range("A1") lenxpoz = InStr(1, cimsor, "LENX") lenxpoz = CountChrInString(Left(cimsor, lenxpoz), ",") lenypoz = InStr(1, cimsor, "LENY") lenypoz = CountChrInString(Left(cimsor, lenypoz), ",") lenzpoz = InStr(1, cimsor, "LENZ") lenzpoz = CountChrInString(Left(cimsor, lenzpoz), ",") utolsosor = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row For j = 2 To utolsosor szoveg = Range("A" & j)
'X mérete templong = 0 For i = 1 To lenxpoz templong = InStr(templong + 1, szoveg, ",", vbTextCompare) Next i On Error GoTo hibajeloles x = CStr(Round(CDbl(Replace(Mid(szoveg, templong + 2, InStr(1, Mid(szoveg, templong + 2), ",") - 2), ".", tizedeselvalaszto)) * 25.4, 0)) & " mm" On Error GoTo hibajeloles szoveg = Left(szoveg, templong - 1) & Replace(szoveg, Mid(szoveg, templong + 2, InStr(1, Mid(szoveg, templong + 2), ",") - 2), x, templong, 1)
'y mérete templong = 0 For i = 1 To lenypoz templong = InStr(templong + 1, szoveg, ",", vbTextCompare) Next i On Error GoTo hibajeloles x = CStr(Round(CDbl(Replace(Mid(szoveg, templong + 2, InStr(1, Mid(szoveg, templong + 2), ",") - 2), ".", tizedeselvalaszto)) * 25.4, 0)) & " mm" szoveg = Left(szoveg, templong - 1) & Replace(szoveg, Mid(szoveg, templong + 2, InStr(1, Mid(szoveg, templong + 2), ",") - 2), x, templong, 1)
'Z mérete templong = 0 For i = 1 To lenzpoz templong = InStr(templong + 1, szoveg, ",", vbTextCompare) Next i On Error GoTo hibajeloles x = CStr(Round(CDbl(Replace(Mid(szoveg, templong + 2, InStr(1, Mid(szoveg, templong + 2), ",") - 2), ".", tizedeselvalaszto)) * 25.4, 0)) & " mm" Range("A" & j) = Left(szoveg, templong - 1) & Replace(szoveg, Mid(szoveg, templong + 2, InStr(1, Mid(szoveg, templong + 2), ",") - 2), x, templong, 1) hibajeloles: On Error GoTo -1 Next j End Sub
Public Function CountChrInString(Expression As String, Character As String) As Long Dim iResult As Long Dim sParts() As String
Sub alakíto() Dim filenev As String, tartomany As Range, lenx As Integer With Application.FileDialog(msoFileDialogOpen) .AllowMultiSelect = False .InitialFileName = "*.csv" If .Show Then filenev = .SelectedItems(1) Else MsgBox "Nem választottál fájlt", vbCritical End If End With If filenev <> "" Then Workbooks.Open Filename:=filenev, origin:=xlWindows, delimiter:="," Range("A1").CurrentRegion.Replace what:="Ăł", replacement:="ó", lookat:=xlPart Set tartomany = Range(Range("A2"), Range("A2").End(xlDown)) tartomany.TextToColumns Destination:=Range("A2"), DataType:=xlDelimited, comma:=True, DecimalSeparator:="." Set tartomany = Range(Range("A2"), Cells(Range("A1").End(xlDown).Row, Range("A1").End(xlToRight).Column)) lenx = Application.Match("LENX", Rows(1), 0) With Range("A1").End(xlToRight).Offset(0, 1) .Value = 25.4 .Copy With tartomany.Range(Cells(1, lenx), Cells(tartomany.Rows.Count, lenx + 2)) .PasteSpecial Paste:=xlPasteValues, operation:=xlPasteSpecialOperationMultiply .NumberFormat = "0"" mm""" End With Application.CutCopyMode = False .Clear End With End If MsgBox IIf(filenev <> "", "Készen vagyok", "Nem választottál fájlt, kilépek"), vbInformation End Sub
Utána mentsd el csv fájlként és olvasd be, de csak a karakterátalakítás és a másolás kell. A beolvasás után már oszlopokat kapsz, helyesen.
Próbáld ki ezt. Nálam az eredeti csv-t szépen átalakítja. Továbbra sem formázza táblázattá, az adatok az A oszlopban vannak.
Inkább módosítottam még rajta.
Itt az a lényeg, hogy a 4. sorban adod meg a te géped szerinti tizedes elválasztót. Az nálam a magyar beállítások miatt vessző. Csak utána fogja tudni felismerni normálisan a számokat.
Option Explicit
Public Sub atvalto() Dim tizedeselvalaszto As String tizedeselvalaszto = "," Dim lenx, leny, lenz As Double Dim lenxpoz, lenypoz, lenzpoz, templong, utolsosor As Long Dim i, j As Long Dim szoveg, cimsor As String Dim x, y, z As Variant cimsor = Range("A1") lenxpoz = InStr(1, cimsor, "LENX") lenxpoz = CountChrInString(Left(cimsor, lenxpoz), ",") lenypoz = InStr(1, cimsor, "LENY") lenypoz = CountChrInString(Left(cimsor, lenypoz), ",") lenzpoz = InStr(1, cimsor, "LENZ") lenzpoz = CountChrInString(Left(cimsor, lenzpoz), ",") utolsosor = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row For j = 2 To utolsosor - 1 szoveg = Range("A" & j)
'X mérete templong = 0 For i = 1 To lenxpoz templong = InStr(templong + 1, szoveg, ",", vbTextCompare) Next i x = CStr(Round(CDbl(Replace(Mid(szoveg, templong + 2, InStr(1, Mid(szoveg, templong + 2), ",") - 2), ".", tizedeselvalaszto)) * 25.4, 0)) & " mm" szoveg = Left(szoveg, templong - 1) & Replace(szoveg, Mid(szoveg, templong + 2, InStr(1, Mid(szoveg, templong + 2), ",") - 2), x, templong, 1)
'y mérete templong = 0 For i = 1 To lenypoz templong = InStr(templong + 1, szoveg, ",", vbTextCompare) Next i x = CStr(Round(CDbl(Replace(Mid(szoveg, templong + 2, InStr(1, Mid(szoveg, templong + 2), ",") - 2), ".", tizedeselvalaszto)) * 25.4, 0)) & " mm" szoveg = Left(szoveg, templong - 1) & Replace(szoveg, Mid(szoveg, templong + 2, InStr(1, Mid(szoveg, templong + 2), ",") - 2), x, templong, 1)
'Z mérete templong = 0 For i = 1 To lenzpoz templong = InStr(templong + 1, szoveg, ",", vbTextCompare) Next i x = CStr(Round(CDbl(Replace(Mid(szoveg, templong + 2, InStr(1, Mid(szoveg, templong + 2), ",") - 2), ".", tizedeselvalaszto)) * 25.4, 0)) & " mm" Range("A" & j) = Left(szoveg, templong - 1) & Replace(szoveg, Mid(szoveg, templong + 2, InStr(1, Mid(szoveg, templong + 2), ",") - 2), x, templong, 1) Next j End Sub
Public Function CountChrInString(Expression As String, Character As String) As Long Dim iResult As Long Dim sParts() As String
Ahogyan írtam, számolást Excellel vagy valamilyen táblázatkezelővel lehet végezni. A csv szövegfájl, szövegszerkesztővel lehet kezelni, de abban nem tudsz számolni.
A makróm által átalakított fájlt természetesen visszamentheted csv-be (mentés másként - csv szövegfájl), csak szerintem teljesen felesleges.
Mondjuk ha így mented el, akkor - mint látod pontosvessző lesz a tagolás és vessző a tizedesjel. Ezért egy menetben kapásból meg tudja nyitni az Excel oszlophelyesen és nem kell mindenféle átalakításokat (TextToColumns stb.) csinálni.
Ezzel együtt szerintem inkább az egyszer általad beolvasott értékeket kellene átalakítani.
Szia! "csupán a csv-t kellene átalakítanom, hogy olyan legyen mint a régi. Coll helyett mm. Gondoltam ez a legegyszerűbb."
Amint látod, nem olyan egyszerű, hiszen a csv-be direkt módon nem lehet/tanácsos beleírni (leginkább szövegszerkesztővel, de ott meg hogyan számolsz). Ahhoz, hogy átalakítsd a coll-t mm-re, be kell olvasnod az Excelbe. Ha pedig beolvastad, akkor minek újra visszaírni? Az Excelben az adott oszlopokat át tudod váltani.
"A tizedespontok eltűntek, így én azt nem tudtam volna magamtól átváltani. Például a 10.0520 coll 100520-két jelent meg, vagy a 3.0202 coll 30202 érték lett."
A TextToColumns-nak van egy DecimalSeparator paramétere (is), amiben megadhatod, hogy a számokban mi szerepel tizedesjelként. Azt a sorodat kiegészítheted ezzel a paraméterrel: DecimalSeparator:="." így számként kerül be az Excel cellába az érték, ha ponttal van jelölve a tizedesjel és a rendszer szerinti tizedesjellel, azaz vesszővel.
A makrómban is ott találod a TextToColumns-os sorban ezt a paramétert.
Ezután azt értéket már számként tudod kezelni, ahogyan az előbbi hozzászólásomban is írtam. Nem kell bajlódni a csv-vel többet.
Amúgy a csv-ben nehéz ezt a három értéket, ami a LENX, LENY, LENZ -hez tartozik: "23.622047","0.708663","19.685039" átalakítani milliméterre, így: "600 mm","18 mm","500 mm"? Külső fájlból indítva, ahogyan írtad, majd, úgy hagyni a csv-t.
Csak mert nekem sokkal egyszerűbbnek tűnik. Csak én nem értek hozzá, nem tudom megkerestetni vele. :)
Nem, ha megnézed a makróm azon részét, hogy másolás csv-ből, ott a csv-ből másol, majd egyszerűen bezárja. Nem csinál a csv-vel semmit a makróm, mert a további feladatokat már a táblázatom segédmunkalapjain végzi.
Nekem, mint azt írtam, csupán a csv-t kellene átalakítanom, hogy olyan legyen mint a régi. Coll helyett mm. Gondoltam ez a legegyszerűbb.
"Most tekintsünk el attól, hogy cm-ben van rá szükséged, a folyamatra vagyok kíváncsi - az eredeti csv-t betudod importálni hibátlanul?"
(Egyébként milliméterre is van szükségem, nem cm-re.)
Igen, be tudom, csak azért fordultam hozzátok, mert a coll méretek nem megfelelően mentek át a makrómmal a táblázatomba. A tizedespontok eltűntek, így én azt nem tudtam volna magamtól átváltani. Például a 10.0520 coll 100520-két jelent meg, vagy a 3.0202 coll 30202 érték lett. És nem tudtam vele mit kezdeni.
Még egy kis folytatás: Mert ha a col-ost be tudod importálni, akkor roppant egyszerű cm-t csinálni belőle, akár makró nélkül is:
Egy cellába beírod a 25,4 váltószámot. Kijelölöd és másolás. Ezután kijelölöd azokat az oszlopokat, amelyekt át szeretnéd váltani. - Irányított beillesztés - művelet szorzás. Utána kitörlöd a váltószámot tartalmazó cellát, beállítod a számformátumot mm-re és kész az egész.
A makrómban ez a rész csinálja - a számformátummal együtt:
With Range("A1").End(xlToRight).Offset(0, 1) .Value = 25.4 .Copy With tartomany.Range(Cells(1, lenx), Cells(tartomany.Rows.Count, lenx + 2)) .PasteSpecial Paste:=xlPasteValues, operation:=xlPasteSpecialOperationMultiply .NumberFormat = "0"" mm""" End With Application.CutCopyMode = False .Clear End With
Szia! Tehát, ha jól értem, a cm-ré alakítás után ismét csv fájlként mented (vagy használod) és a mostani átalakítás után nem megfelő helyre kerülnek az adatok?
Amikor még nincs átalakítva, tehát col-ban van, akkor jó helyre kerülnének az adatok? (Most tekintsünk el attól, hogy cm-ben van rá szükséged, a folyamatra vagyok kíváncsi - az eredeti csv-t betudod importálni hibátlanul?
Sub AJ_importálás() Dim T, Tag%, f As Boolean Dim oszlop%, uoszlop% Dim MyCell As Range Dim MyArray() As String, MyDig As String Dim sor%, usor% ', usor1%
FN = ActiveWorkbook.Name 'az fájlnév (FN) az aktív fájl nevét veszi fel Application.ScreenUpdating = False 'képernyő frissítésének letiltása
'Címsor nagybetűssé alakítása uoszlop% = Sheets(Sheets.Count).UsedRange.Columns.Count For oszlop% = 1 To uoszlop% Cells(1, oszlop%) = UCase(Cells(1, oszlop%)) Next
'GYOMLÁLÁS 'Oszloptörlés T = Array("LENX", "LENY", "LENZ", "MATERIAL", "NAME", "SUMMARY", "TIP", "A1", "A2", "B1", "B2", "HIV") uoszlop% = Sheets(Sheets.Count).UsedRange.Columns.Count For oszlop% = uoszlop% To 1 Step -1 f = False For Tag% = 0 To 11 If Sheets(Sheets.Count).Cells(1, oszlop%) = T(Tag%) Then f = True Exit For End If Next If f = False Then Columns(oszlop%).Delete Shift:=xlToLeft Next
'felesleges sorok törlése usor% = Range("A" & Rows.Count).End(xlUp).Row For sor% = usor% To 2 Step -1 If Cells(sor, "G") = "" Then Rows(sor).EntireRow.Delete Next 'GYOMLÁLÁS VÉGE
'Adatok összefűzése az N oszlopba usor% = Range("A" & Rows.Count).End(xlUp).Row Range("N1") = "Összefűzve" Range("N2:N" & usor%) = "=A2&B2&C2&D2&E2&F2&G2&H2&I2&J2&K2&L2" Columns(14).Copy 'N oszlop Range("N1").PasteSpecial xlPasteValues
Range("O2:O" & usor) = "=countif(N:N,N2)" 'darabszám az O-ba képlettel Range("O1") = "MENNYISÉG" Columns("O:O").Copy Range("M1").PasteSpecial xlPasteValues 'darabszám az M-be értékként
For sor% = usor% To 2 Step -1 'dupla sorok megszüntetése If Cells(sor%, "O") > 1 Then Rows(sor%).Delete Shift:=xlUp Calculate End If Next
És itt még nincs vége. Mint látod, a karaktercsrével már nem kell törődni.
Ez egy nagyon összetett makró, mert én készítettem egy táblázatot, és akkor még akkora láma voltam, hogy nem tudtam hogy van élőláb, és élőfej. Ezért, mint látod, négy lapot létrehoztam egy munkalapon, és oda másolgattam be az adatokat az alsó "gyűjtőtáblázatból", és tördeltem az egészet.. Úgyhogy a vége egy nagy katyvasz, de ezt amit bemásoltam a fórumtársak segítségével, darabonként hoztuk össze. Delila, és még FIRE/SOUL a PH-ról, segítettek (ha jól emlékszem) , és közben mondott egy két imát. :D És sok éve már hogy működik.
De egyébként, csak annyi adat van, amennyit itt látsz.
Jobban mondva nem. Ez csak az alkatrészjegyzék. Ugyanebben a munkafüzetben van egy szerelvényjegyzék is, de azt nem használom. Oda is ment adatokat. Úgy van, hogy a 3d modellezőben attribútumokkal ruházhatom fel a groupokat és a komponenseket, és ez megjelenik abban az egyszerű csv reportban, én meg szűröm az ami kell, és törlöm ami nem kell.
Lemodellezek például egy kivetőpántot, és adhatok neki egy attribútumot, mondjuk hogy cikkszám, és az már ott lesz a táblázatomban, és annyi darab, ahány a tervemben van.
Akkor módosítsuk erre (valószínűleg elnéztem az elválasztó karaktert):
Sub alakíto() Dim filenev As String, tartomany As Range, lenx As Integer With Application.FileDialog(msoFileDialogOpen) .AllowMultiSelect = False .InitialFileName = "*.csv" If .Show Then filenev = .SelectedItems(1) Else MsgBox "Nem választottál fájlt", vbCritical End If End With If filenev <> "" Then Workbooks.Open Filename:=filenev, origin:=xlWindows, delimiter:="," Range("A1").CurrentRegion.Replace what:="Ăł", replacement:="ó", lookat:=xlPart Set tartomany = Range(Range("A2"), Range("A2").End(xlDown)) tartomany.TextToColumns Destination:=Range("A2"), DataType:=xlDelimited, comma:=True, DecimalSeparator:="." Set tartomany = Range(Range("A2"), Range("A1").End(xlToRight).End(xlDown)) lenx = Application.Match("LENX", Rows(1), 0) With Range("A1").End(xlToRight).Offset(0, 1) .Value = 25.4 .Copy With tartomany.Range(Cells(1, lenx), Cells(tartomany.Rows.Count, lenx + 2)) .PasteSpecial Paste:=xlPasteValues, operation:=xlPasteSpecialOperationMultiply .NumberFormat = "0"" mm""" End With Application.CutCopyMode = False .Clear End With End If MsgBox IIf(filenev <> "", "Készen vagyok", "Nem választottál fájlt, kilépek"), vbInformation End Sub
Sub alakíto() With Application.FileDialog(msoFileDialogOpen) .AllowMultiSelect = False .InitialFileName = "*.csv" If .Show Then filenev = .SelectedItems(1) Else MsgBox "Nem választottál fájlt", vbCritical End If End With If filenev <> "" Then Workbooks.Open Filename:=filenev, origin:=xlWindows, delimiter:=";" Range("A1").CurrentRegion.Replace what:="Ăł", replacement:="ó", lookat:=xlPart Set tartomany = Range(Range("A2"), Range("A2").End(xlDown)) tartomany.TextToColumns Destination:=Range("A2"), DataType:=xlDelimited, semicolon:=True, DecimalSeparator:="." Set tartomany = Range(Range("A2"), Range("A1").End(xlToRight).End(xlDown)) lenx = Application.Match("LENX", Rows(1), 0) With Range("A1").End(xlToRight).Offset(0, 1) .Value = 25.4 .Copy tartomany.Range(Cells(1, lenx), Cells(tartomany.Rows.Count, lenx + 2)).PasteSpecial Paste:=xlPasteValues, operation:=xlPasteSpecialOperationMultiply Application.CutCopyMode = False .Clear End With End If
MsgBox IIf(filenev <> "", "Készen vagyok", "Nem választottál fájlt, kilépek"), vbInformation End Sub
Kiválaszthatod a csv fájlt, amit be szeretnél olvasni. A beolvasás után átalakítja az értékeket, az eredeti számok helyére írja be az átalakítottakat.
Menteni neked kell a létrejött fájlt.
A makrót én egy külön fájlba másolnám be, a megnyitott fájl mindig új munkafüzetbe kerül, a makrós fájl nem változik.
Most már mindegy, írtam egy makrót erre. Végső soron nem baj, ha feleslegesek a betüméret ellenőrzések. Most már nem törlöm ki. Legfeljebb az ujbetumeretet beállító sort tedd megjegyzésbe, ha zavar.
A makró feltételezi, hogy a munkafüzeted xlsm, és ebben lenne egy modulban, vagy magán a munkalapon:
Option Explicit
Public Const betumeret As Long = 11, ujbetumeret As Long = 12
Sub coltomm()
Dim ws As Worksheet, utolsosor As Long, sor As Long, troszlop As Long, oszlop As Long
Ez a lista nem bővül, ez a lista mindig új. Ezt egy 3d modellező szoftver generálja.
Ha módosítok a terven, akkor készíttetek egy új jelentést.
Ezt a jelentést (csv) a táblázatomba átviszem, használhatóvá téve, és utána elvileg nem is használom csak ritka esetekben, olvastatom be újra. De bővülni nem bővül soha.
Vagy meg lehet úgy is csinálni, hogy készítsen a makró egy csv másolatot.
"átváltás után pont ugyanígy kell kinéznie a táblázatnak, mivel az átváltást követően egy régebben megírt nagyon bonyolult makró dolgozza fel."
Értem. Viszont, ha makrót írok, akkor gondoskodni kell arról, hogy véletlenül se futhasson a makró egy olyan sorra, amely már át lett alakítva mm-be. Különös tekintettel arra, hogy - feltételezésem szerint - bővül a listád, tehát a makrónknak az újakat át kell számítania mm-be, de a már átalakítottakat nem szabad újraszámolni. Jól gondolom?
A következő megoldásra gondolok: Úgy írnám meg, hogy az átszámított adatok betűméretét módosítsa a makró. Ha mondjuk 11-volt, akkor 12-re. (ezt majd beszéljük meg). Ez egy alig észrevehető változás, nem hinném, hogy a bonyolult makród ezzel foglalkozna. Viszont az átszámító makró ezt figyelve ebből tudja, hogy melyik sorokkal nem kell foglalkoznia.
Először nem látszott, de mentés-bezárás-megnyitás után helyreállt, azaz az utolsó cella a hasznos terület végén van. Egyébként egy másik munkafüzetből átmásolt munkalapon végzett kisebb módosítások után történt az eset. Hogy pontosan milyen műveleteket végzett a kolléga, amik a növekedést okozhatták, az sajnos nem derült ki.
Az utolsó még szükséges sortól lefelé kijelölöd a végéig, majd törlöd.
Természetesen a sorok "újratermelődnek" mert mindig megmarad a munkafüzetben az eredeti sormennyiség.
Viszont ha után ismét megnézed, mi az utolsó cella, akkor már a ténylegesen használt sorra fog ugrani és nem a végére.
Viszont nem ártana megnézni, mi került abba az "utolsó" cellába, abból lehetne következtetni az előidéző okra.(Sajnos lehet "láthatatlan" karakter vagy formázás pl.)
Köszönöm. Lefuttattam, és valóban még rossz adatok jelennek meg a táblázatomba bemásolva, de szerintem nem a sorrend miatt, ugyanis a makró amely eddig feldolgozta, csak a nekem szükséges adatokat hagyja meg:
'GYOMLÁLÁS 'Oszloptörlés T = Array("LENX", "LENY", "LENZ", "MATERIAL", "NAME", "SUMMARY", "TIP", "A1", "A2", "B1", "B2", "HIV") uoszlop% = Sheets(Sheets.Count).UsedRange.Columns.Count For oszlop% = uoszlop% To 1 Step -1 f = False For Tag% = 0 To 11 If Sheets(Sheets.Count).Cells(1, oszlop%) = T(Tag%) Then f = True Exit For End If Next If f = False Then Columns(oszlop%).Delete Shift:=xlToLeft Next
Én ha megnyitok az excelben egy CSV fájlt, akkor nálam az adatok soronként egy cellában lesznek. Nem szoktam szórakozni táblázattá alakítással, mert a nélkül is fel tudom dolgozni az adatokat.
Így én az általad küldött CSV fájlból indultam ki és az alapján dolgoztam fel az adatokat. Azaz megkerestem, hogy mely pozícióban vannak a lenx, leny és lenz adatok majd azokat átkonvertáltam mm-be a B, C és D oszlopokba.
Bár az a sejtésem, hogy neked ez így nem lesz jó. Ez után a hozzászólásod után. Lévén az adatok sem ott helyezkednek el, ahol nekem.
Ezt nem én hoztam létre, ezt így generálja egy szoftver.
Azért akartam makrót, mert átváltás után pont ugyanígy kell kinéznie a táblázatnak, mivel az átváltást követően egy régebben megírt nagyon bonyolult makró dolgozza fel.
Annyi történt, hogy ez a szoftver, most már nem mm-ben generálja az adatokat, hanem collban, és így nem tud a makró mit kezdeni vele.
Public Sub atvalto() Dim lenx, leny, lenz As Double Dim lenxpoz, lenypoz, lenzpoz, templong, utolsosor As Long Dim i, j As Long Dim szoveg, cimsor As String cimsor = Range("A1") lenxpoz = InStr(1, cimsor, "LENX") lenxpoz = CountChrInString(Left(cimsor, lenxpoz), ",") lenypoz = InStr(1, cimsor, "LENY") lenypoz = CountChrInString(Left(cimsor, lenypoz), ",") lenzpoz = InStr(1, cimsor, "LENZ") lenzpoz = CountChrInString(Left(cimsor, lenzpoz), ",") utolsosor = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row Range("B1") = "LEN X in mm" Range("C1") = "LEN Y in mm" Range("D1") = "LEN Z in mm" For j = 2 To utolsosor - 1 szoveg = Range("A" & j)
'X mérete templong = 0 For i = 1 To lenxpoz templong = InStr(templong + 1, szoveg, ",", vbTextCompare) Next i Range("B" & j) = Mid(szoveg, templong + 2, InStr(1, Mid(szoveg, templong + 2), ",") - 2) Range("B" & j) = Range("B" & j) * 25.4
'Y mérete templong = 0 For i = 1 To lenypoz templong = InStr(templong + 1, szoveg, ",", vbTextCompare) Next i Range("C" & j) = Mid(szoveg, templong + 2, InStr(1, Mid(szoveg, templong + 2), ",") - 2) Range("C" & j) = Range("C" & j) * 25.4
'Z mérete templong = 0 For i = 1 To lenzpoz templong = InStr(templong + 1, szoveg, ",", vbTextCompare) Next i Range("D" & j) = Mid(szoveg, templong + 2, InStr(1, Mid(szoveg, templong + 2), ",") - 2) Range("D" & j) = Range("D" & j) * 25.4 Next j End Sub
Public Function CountChrInString(Expression As String, Character As String) As Long Dim iResult As Long Dim sParts() As String
Minek ehhez makró? Az A2, B1, B2 (R,S és T) oszlopod úgyis üres, ezért oda írtam be a 25.4-el megszorzott adatokat, amit aztán lefelé húzhatsz. Neked is azt javaslom, hogy segédoszlopba tedd a mm adatokat.
Makrót írni is egyerú lenne, de felesleges, és zavarokhoz vezethetne. Ha egyszer lefuttattad, nem derűl ki a makró számára, hogy már a mm-ben megadott érték szerepel ott, ezért véletlen újrafuttatás esetén hibás értékek kerülnének a mm adatok helyére.
Más: A csv fájlban miért tettél idézőjelet az elejére, majd miért dupláztál meg minden idézőjelet? Ezeket ki kellett törölnöm, és csak ezután sikerült Excelbe beolvasni az adatokat.
Több oka is lehet. Próbáld ellenőrizni a következőket:
1. A munkalapokon az utolsó cella hol található - F5 - irányított - utolsó cella. Ha ez nem a valós területen van, akkor a tényleges területtől lefelé és oldalra törölj ki minden sort majd oszlopot. Ez előforduhat pl. sorok/oszlopok beszúrása, majd törlése után. Hajlamos ottmaradni pl formázás, amit ráadásul egyébként nem is látsz.
2. A függvények nem hivatkoznak-e egész sorokra/oszlopokra (pl. A:A ). Mivel a munkalap sorainak és oszlopainak is nagy a száma, a képletek ottragadhatnak ahol nem is kellenének. Ráadásul a számolást is lassítja. Tudom, kényelmesebb(?) egész oszlopra hivatkozni, de célszerűbb egy olyan területet megadni, amely nagyjából megfelel a szökséges tartománynak.
3. A feltételes formázásokat is érdemes megnézni.
4. vagy 0 ha lehet, próbáljátok visszakövetni, hogy milyen művelet idézte elő a méretnövekedést, lefagyást. Akkor lehet pontosabb diagnózist adni.
Sziasztok! Közös használatú hálózati mappában lévő Excel fájlokat több ember szerkeszti Office 2007 vagy Office 2010 verzióval windows 10 alatt. Időnként előfordul, hogy egy-egy fájl mérete közel 100-szorosára növekszik, ennek megfelelően a megnyitása, szerkesztése, mentése is lassú, esetleg le is fagy az Excel. Hogyan tudom kideríteni, hogy mi okozza a méretnövekedést, és hogy lehet "eltüntetni"?
Az időnként készített biztonsági mentésből a közös munka miatt nem biztos, hogy az utolsó változat állítható vissza.
Az intervallumok határait feltöltöd egy oszlopban, mellette az ott érvényes árakat:
Ezután az FKERES függvény 4. paraméterét IGAZ (1) -ra állítod.
El kell döntened, hogy a felső határ esetén még az alatta levő vagy már az új sávban levő árat kell alkalmazni, azaz pl. pontosan 1 kilónál 500 Ft vagy már 1000 Ft az ár.
Ha így adod meg, akkor 1 kg-nál az 1000 forintos ár érvényesül. Ha viszont az 500 forintot szeretnéd érvényesíteni, akkor a határt emelni kell 101-re és így tovább.
Javaslom hozzá az FKERES súgójának az elolvasását.
Szerintem megtaláltad a hiba okát. Én eddig nem használtam, ezért nem ismertem azt a lehetőséget, amire rámutattál, hogy a jobboldali nyilakkal lehet a jelmagyarázat sorrendjét a hozzátartozó adatoktól függetlenül beállítani. Azért meglepő, hogy egyáltalán miért merülhetett fel ez az igény.
Valószínűleg a diagramon más a sorrendje az egyes évek adatainak. Próbáld meg a következőt:
Kiválasztod a 2023 évi "vonalat" adatot. Ezután a szerkesztőlécen megjelik az adatsor forrása:
pl. =ADATSOR(áram!$F$29;áram!$A$30:$A$186;áram!$F$30:$F$186;4)
Ha 4 adatsorod van, akkor feltételezhetően a 4-es lesz a zárójel előtti szám. Ezt írd át itt a szerkesztőlécen 3 -ra és Enter. Ezáltal megváltozik a megjelenítési sorrend és jelmagyarázat sorrendje is.
Tudnál küldeni egy mintát, ahol látszanak a forrásadatok, valamint az adatfotrrás kiválasztásánál megjelenő lista?
Valahogy így, mivel a saját mintámon elképzelni sem tudom, hogyan oldhatnán meg, hogy két év felcserélődjön a jelmagyarázqatban. Hátha a te mintádból kiderül:
'reggelt! Van egy vonaldiagramom, ami 4 év havi forgalmi adatait jeleníti meg. Az "Adatforrás kiválasztása" ablakban jó a sorrend: 2021, 2022, 2023, 2024. A diagram jelmagyarázatában viszont 2021, 2022, 2024, 2023. Hogy rendezhetném át?
Azt próbáltad már, hogy beszúrod a lapra háttérként és a kívánt néhány cella kivételével az összes többit zárolod? Mondjuk lehet, hogy valami képszerkesztőben még ügyeskedni is kell a kép köré üres területek szerkesztésével a pontos pozícionáláshoz. A rácsvonalak ugye kikapcsolhatók, a cellaformázás pedig ad számos lehetőséget az aktív cellák megjelölésére.
Az én ötletem, hogy felrakod az antenna képét jobb oldalra, de úgy, hogy a változókat egy-egy betűvel helyettesíted. A képernyő bal részén ezeket szépen, egymás alatt bekéred a usertől. Kevésbé elegáns, mert plusz egy hivatkozás van értékenként, amit követnie kell a felhasználónak, de gyors eredményt ad.
Ha nem olyan a kép formátuma, hogy legyen rajta átlátszóság, akkor is meg lehet oldani.
Ha rákattintasz a képre, akkor a menü szalagon megjelenik a képformátum. Annak a legelső pontja a "Háttér eltávolítása". Ott ki lehet jelölni, hogy mi az a terület, amit átlátszóvá szeretnél tenni. Ha sok benne a vékony vonal, akkor kicsit nehézkes az Excelben megoldani.
Ilyenkor én GIMP-ben szoktam. Ha megnyitod a képet szerkesztésre a GIMP-ben, akkor először hozzá kell adni a réteg átlátszóságot is. A varázs kijelölő eszközzel ki kell jelölni az eltávolítandó részeket. Én ennek olyan 20-as értéken szoktam állítani a "durvaságát", akkor elég jól kijelöli az elkülönülő hátteret. Majd ha jó a kijelölés, akkor delete gombbal törlöd a hátteret. Ilyenkor a GIMP-ben ez kockás háttérrel lesz jelölve. Utána simán kijelölheted az egészet és visszamásolhatod az Excelbe.
Én úgy látom, hogy kép mögötti cellába nem tudsz írni. Azon cella helyén, amelybe írni szeretnél, "lyukat" kell hagyni a képen, tehát azt a cellát nem fedheti le a kép! Ez nyilván könnyen megoldható, ha a kép szélei felé vannak az írni tervezett cellák, mert akkor szépen körül lehet vágni a képet, viszont a közbe - hátul levő cella esetében már szét kell vágni a képet és több darabban felrakni a cella kihagyásával.
Szerintem egyszerűbb lenne, ha a képet egy Userformra tennéd fel, arra lehet tenni Textboxokat és azok értékével lehet számolni, a textboxok értékét hozzá tudod kapcsolni egy cellához a ControlSource tulajdonsággal, ha változik a textbox értéke, változik a hozzá csatolt cella értéke is.
sziasztok. Lenne egy kérdésem. Hogyan lehetne egy képet úgy beszúrni az excelbe, hogy mögötte eg pár cella látszódjon, amelybe értéket beírva, akár képletre is bírható.
Mire gondolok?
tehát a cellákba értéket írok be, s így a többi cellában a képlettel kiszámoltérték kerül
Már minden lehetőséget megnéztem, de nem jöttem rá, hogyan oldható meg.
Itt egy példa 06830 betétlap esetében a Sheet 1 dátumformátumok átvitele után a Summary lapfülön Bontási dátumban 1900.01.00 értéket kapok vissza. Ez csak egy példa de több ilyen eset is előfordul:( Mi miatt lehet ez?
Ezzel minden bontást meg fogsz találni, sőt, a végeredmény még több is lesz 1 db-bal... mivel a betétlap meint azonosító szerintem nem elegendő, kell még mást is figyelni.
Új munkalap létrehozása: Az Épít típusú rekordokat átmásolja az eredeti munkalapról egy új, "Summary" nevű munkalapra.
Bontási dátumok hozzáadása: Megkeresi a bontási rekordokat és hozzáadja a bontási dátumot a "Summary" munkalaphoz. a megfelelő sorhoz:) Betétlap alapján de ez valami miatt nem minden rekord esetén kerül be
Összegzés és ellenőrzés: Összegzi a térfogatokat, majd összehasonlítja az eredeti és a summary adatok számait, és jelzi az eltéréseket, ha vannak.
Miért nem megy át a Bont sorokból a summary lapfülre az adat?
Nem fontos a makrós megoldás sem a lényeg az lenne hogy egy sorban legyen az építési dátum és a bontási dátum.
Sub FilterAndSummarizeData() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") ' Eredeti munkalap
Dim lastRow As Long lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' Szűrjük az Épít sorokat és másoljuk a Summary lapra Dim newSheet As Worksheet On Error Resume Next Set newSheet = ThisWorkbook.Sheets("Summary") On Error GoTo 0 If Not newSheet Is Nothing Then Application.DisplayAlerts = False newSheet.Delete Application.DisplayAlerts = True End If Set newSheet = ThisWorkbook.Sheets.Add newSheet.Name = "Summary"
' Másoljuk az Épít sorokat a Summary lapra Dim i As Long For i = 2 To lastRow If ws.Cells(i, 13).Value = "Épít" Then newSheet.Cells(newRow, 1).Value = ws.Cells(i, 1).Value newSheet.Cells(newRow, 2).Value = ws.Cells(i, 2).Value newSheet.Cells(newRow, 3).Value = ws.Cells(i, 3).Value newSheet.Cells(newRow, 4).Value = ws.Cells(i, 4).Value newSheet.Cells(newRow, 5).Value = ws.Cells(i, 5).Value newSheet.Cells(newRow, 6).Value = ws.Cells(i, 6).Value newSheet.Cells(newRow, 7).Value = ws.Cells(i, 7).Value newSheet.Cells(newRow, 9).Value = ws.Cells(i, 8).Value newSheet.Cells(newRow, 10).Value = ws.Cells(i, 9).Value newSheet.Cells(newRow, 11).Value = ws.Cells(i, 10).Value newSheet.Cells(newRow, 12).Value = ws.Cells(i, 11).Value newSheet.Cells(newRow, 13).Value = ws.Cells(i, 12).Value newSheet.Cells(newRow, 14).Value = ws.Cells(i, 13).Value newRow = newRow + 1 End If Next i
' Keresés és bontási dátumok hozzáadása Dim betetlapId As Variant Dim bontCount As Long bontCount = 0 For i = 2 To newRow - 1 betetlapId = newSheet.Cells(i, 6).Value Dim foundRow As Long foundRow = 0 For j = 2 To lastRow If ws.Cells(j, 6).Value = betetlapId And ws.Cells(j, 13).Value = "Bont" Then foundRow = j Exit For End If Next j If foundRow > 0 Then newSheet.Cells(i, 8).Value = ws.Cells(foundRow, 7).Value bontCount = bontCount + 1 End If Next i
' Szűrő hozzáadása a fejlécekhez newSheet.Range("A1:N1").AutoFilter
' Adatok kijelölése newSheet.Range("A2:N" & newRow - 1).Select
' Teljes m3 összegzése és formázása Dim totalSum As Double totalSum = Application.WorksheetFunction.Sum(newSheet.Range("L2:L" & newRow - 1)) newSheet.Range("O1").Value = totalSum With newSheet.Range("O1") .Font.Bold = True .Font.Italic = True .Font.Color = RGB(255, 0, 0) .Font.Size = 14 .Font.Name = "Calibri" End With
' Eredeti bontás rekordok száma Dim originalBontCount As Long originalBontCount = Application.WorksheetFunction.CountIf(ws.Range("M2:M" & lastRow), "Bont")
' Eredmények ellenőrzése és megjelenítése Dim checkSheet As Worksheet On Error Resume Next Set checkSheet = ThisWorkbook.Sheets("Check") On Error GoTo 0 If Not checkSheet Is Nothing Then Application.DisplayAlerts = False checkSheet.Delete Application.DisplayAlerts = True End If Set checkSheet = ThisWorkbook.Sheets.Add checkSheet.Name = "Check"
' Az értékek megjelenítése és formázása With checkSheet.Range("A1:B4") .Font.Bold = True .Font.Size = 12 .Font.Name = "Calibri" End With checkSheet.Columns("A:B").AutoFit
' Hibaüzenet, ha a bontási rekordok száma nem egyezik If originalBontCount <> bontCount Then MsgBox "A bontási rekordok száma nem egyezik meg! Eredeti bontási rekordok: " & originalBontCount & ", Átmásolt bontási rekordok: " & bontCount, vbExclamation End If End Sub
Azt nem tudod megoldani, hogy bemásolás/törlés helyett kvázi "görgeted" a listát? Ha jól látom, alul van a legfrissebb adat, és a lista elején a legrégebbi. A görgetés ebben az esetben azt jelentené, hogy a Körte, szőlő, barack sorokkal felülírod az Alma, körte, szőlőt, amivel a barack sor megduplázódik. És a legalsó sorban lévő Barack adatokat írod felül az új adatsorral.
Én például egy évente frissülő jelentésben szereplő 5 éves grafikonsorokat szoktam ezzel a technikával frissíteni, így nem kell grafikonokat mindig újra rajzoltatni, hanem azzok autoatikusan aktualizálódnak.
Ebben igazad van, viszont ez a táblázat az éppen folyamatban lévő munkákat "monitorozza". Amikor valami elkészül kikerül a rendszerből, ha valami új jön akkor pedig értelemszerűen be. Ha nem törlődne, nem lenne már átlátható, túl nagy lenne.
Az én célom pedig, hogy 1 vagy 2 hetes bontásban mindig rátudjak szűrni az éppen aktuális megrendelésekre és csak azt lássam, hogy milyen készültségben van. A tőbbi jövőben gyártandó termék ne keverjen be, csak a heti-két heti aktuális.
Azért a folyamatos törlés/bővítés nem nagyon tesz jót a képleteknek... inkább bővüljön folyamatosan és ne törölj belőle. A második munkalapra akkor is ki tudod szedni az adatokat, ha a "régiek" benne maradnak az elsőben.
A munkalapok stílusát te határozod meg, olyan lesz mindegyik, amilyenre beállítod.
Mit gondoltok, az is megoldható, hogy amilyen stílusban néz ki az egyik munkalap, ugyanolyanra csinálja a másikat is?
A célom az lenne egyébként, hogy az Munkalap1 adatokból mindig előre szűrjem határidő szerint 1 v. 2 héttel előre a munkákat. És ezekkel az adatokkal dolgozni, diagramok stb.
Ha nem a második oszlopban van ahova írni szeretnél. akkor az OSZLOP függvény értékét módosíts a Név oszlop utánira + vagy - érték hozzáadásával. Ha pl. a 3. oszlopban szeretnéd kezdeni, akkor OSZLOP()-1 lesz a Határidőnek megfelelő eredmény.
Érdeklődnék tudtok-e a problémámra függvényt vagy javaslatot.
Adott egy munkalap amin egy sorokból és oszlopokból álló adatsor van (bizonyos folyamatok nyomonkövetésére szolgál, mely az idő múlásával folyamatosan bővül vagy törlődik).
Létezik-e olyan függvény az excelben, ami egy bizonyos feltétel teljesülése esetén az egész sor értékeit kiírja vagy átmásolja a másik munkalapra?
Tehát:
Munkalap1 tartalmazza az adatokat
Munkalap2-ben pedig szeretném látni az adott feltételhez tartozó egész sort.
Például:
Munkalap1:
Név Határidő Munkaszám stb. stb.
Alma 2024.07.05 24-001 .... ....
Körte 2024.07.08 24-002 .... ....
Szőlő 2024.07.10 24-003 .... ....
Barack 2024.08.16 24-004 .... ....
Munkalap2-n pedig szeretném látni a Barackhoz tartozó összes adatot.
Szerintem te ebbe futottál bele: http://forum.index.hu/Article/viewArticle?a=167183191&t=9009340 A hónap elején kellett újratelepíteni a gépemet, mert meghalt az SSD benne. Egy jópár évvel ezelőtti telepítővel telepítettem újra az Officet. Nem tudom, hogy telepítés után frissült-e vagy sem. Gyakorlatilag 1-2 napig biztosan úgy használtam, hogy a menügombos funkció nem működött jól, mert alapértelmezetten a keresésnél villogott a kurzor és oda történt az adatbevitel, nem a menüpontok között tudtam lépkedni a betűkkel. Nekem megoldotta egy office frissítés és azóta ismét jól működik. Arra sem emlékszem, hogy anno frissítette-e magát az office vagy ki voltak kapcsolva a frissítések rajta. Most hagytam őket bekapcsolva.
Amúgy kibaszott frusztráló volt a dolog. Mondjuk az is frusztráló, hogy ha IP címmel adok hozzá hálózati meghajtót, akkor nem lehet biztonságos helynek beállítani azt az office adatvédelmi beállításaiban. Távolról szoktam dolgozni VPN-en keresztül, volt egy szerver csere és megváltozott az IP cím és a szerver neve is... Mondanom se kell, hogy sok bosszúságot okozott volna, ha nem tudom mire jó a hosts fájl. Így az én munkaállomásomról olyan, mintha nem is lett volna csere.
Mi az "irányított beillesztés, érték" billentyűparancsa? Ms szerint Ctrl+Alt+V hozná a lehetőségeket (ami nekem amúgy sem lenne az igazi, rögtön az érték-et szeretném beszúrni), de nekem erre ír egy @-ot és villog utána a kurzor. A másik, amit ír (Alt+E+valami, ha jól rémlik), még ennyit sem csinál.
Most azt írta, hogy talán kitiltottak, vagy olyan helyre próbáltam belépni, ahova nem szól az engedélyem.
Ez már a harmadik nevem. Először Delila1 voltam, de megváltozott az email címem, amit nem engedett módosítani az újra. Akkor Delila10 néven léptem be az új címemmel (veteránból babakocsis lettem).
Most nem változott semmi, de újra regisztrálni kellett, hogy beléphessek, így lettem Delila_10, és ismét kezdő.
Köszönöm. Egyébként ugyanezt csináltam, és azt hittem az a baj, hogy a két hasonlítandó munkalap neve azonos. De alaposabban megnézve rájöttem, hogy egy ponton egy ciklusváltozót elrontottam, és így a program egyszerűen átugrotta az adatok egy részét, és nem listázta a meglévő eltéréseket. Ezért hittem azt, hogy az azonos munkalapneveket nem jól kezelem.
Sziasztok, régóta használok egy makrót két munkafüzet azonos szerkezetű munkalapjainak összehasonlítására. Most felmerül az a helyzet, hogy az összehasonlításhoz mindkét munkafüzet munkalapjainak azonos a neve. Azt hiszem, ezt nem tudom megoldani átnevezgetés nélkül. De megkérdezem, nincs-e mégis valami trükk az átnevezgetés megkerülésére?
Engem is szivat... De már évek óta. Szerintem rosszul vannak megírva a cookiekhoz tartozó kódok. Mert van, hogy kiléptet és van amikor pedig nem... Nem függ az eszköztől és a böngészőtől sem.
Nem biztos, hogy az egymással szembeni számokat kell összehasonlítani. A példában a 144 MHz antenna 1/4-es értéke és a 430 MHz 3/4-es értéke van egymáshoz a legközelebb. Ez szemmel is megállapítható. de azt hittem, hogy "automatizálva" egyszerűbb.
az antennatípusokkal még ki kellene egészítened a jobb oldali összehasonlítást, amik írásod szerint egymással szemben vannak. Mondjuk az AH oszlopba a kettő közé.
Utána csinálj egy különbségszámítást az AF oszlopba a két számból. Abszolút értékben tedd ezt meg, mert csak a különbség kell, az előjel mindegy lesz.
Ebből az oszlopból kell megkeresned azt, ami kisebb mint 1.
Tegyél be még 1 segédoszlopt első oszlopnak mondjuk az AE oszlopba, a képlete legyen pl. AF<1. Így ebben az oszlopban kapsz egy igaz / hamis cellaértéket
Ha fentiek szerint jársz el, akkor a sárga celládba kell egy FKERES, amiben megkeresed az első IGAZ találatot és visszaadod az antennatípus oszlopából a találatot.
valami ilyesmi, ha fentiek szerint járrtál el:
FKERES(IGAZ; AE:AH; 4; 0)
ha nem erre gondoltál pontosan, szerintem rá tudod már szabni a saját tábládra.
Lenne egy problémám, de lehet, hogy nem lehet megoldani.
Készítettem egy Antenna méretező segédprogramocskát magamnak.
Vannak olyan antennák, amelyek két frekvenciákra méreteznek, ilyenkor megnézik, hogy melyik két hossz áll legközelebb egymáshoz. Ahogy a képen is látszik, az értékeket jobb oldalra csoportosítottam egymással szemben.
Sajnos nem találtam olyan függvényt, amely a két 7-es csoportot összehasonlítja és kiválasztja azt az értéket, amelyek között pl. max 1 cm különbség van. Ezt az értéket beírja a "Közös antennahossz...cm helyre.
Ki tudna ebben segíteni? Igen tidom szemrevételezéssel is ki lehetne választani, de jó lenne ha ez "automatizálva" történne.
Megoldódott. Kézzel rányomtam a frissítések keresésére és telepített egyet. Így most már a kivágás menüpont az aktív alapértelmezetten, nem a keresés, és rendesen működnek a gyorsbillentyűk is ezáltal.
Elszállt az SSD a gépemben, így kénytelen voltam újratelepíteni....
Elvileg ugyan azt az Excel verziót telepítettem, mint ami korábban a gépemen volt, azaz a Microsoft Office Professional Plus 2021 verzióját. Ehhez vettem meg anno a termékkulcsot, így adta magát, hogy ez is kerüljön vissza. Mégis másképpen működik, mint ez előtt.
Ami az őrületbe kerget az a következő: Ha nyomok egy menü gombot a klaviatúrán, akkor most felhoz egy kereső sávot is és abban villog a kurzor. Lásd a mellékelt fotót, így hiába püfölöm az "É" gombot kétszer, hogy csak értékeket illesszen be, le se tolja a fejemet, mert elkezdi beírni a keresendő kifejezéshez... Ettől az idióta funkciótól hogyan lehet megszabadulni?
Megint újonc lettem. Másodjára dobott ki az Indapass.
Először évekkel ezelőtt, mikor megváltozott az email címem. Most valahogy a rongyos régire emlékezett, a több évest elfelejtette. Oda meg hiába küldött az "elfelejtett jelszó" helyett újat, a cím megszűnése miatt nem kaptam meg.
Még annyit, hogy a fájlnevek beolvasásához használd a DIR függvényt. Ciklusban végégmész a fájlokat tartalmazó könyvtáron - amíg nem lesz üres az eredmény -, és a beolvasott fájlnevekben ellenőrzöd, hogy azok-e, amik neked kellenek (feltéve, hogy nás fájlok is vannak az adott könyvtárban). Aztán sorba rakod őket, és onnan már egyszerű megnyitni, bemásolni.
Ezt nem nehéz makróval összehozni egyetlen munkafüzet egyetlen munkalapjára.
Az adatfájlokhoz rendelj hozzá egy nevet, pl. Adatok 2024, az egyes letöltött fájlok neve legyen ugyanez egy sorszámot tartalmazó toldalékkal. Pl Adatok 2024_1, Adatok 2024_2 stb. Azt meg tudod adni a makróban, hogy az Adatok 2024 kezdetű fájlokat nyissa meg, majd a legelsőt másolja be fejlécestől, a továbbiakat pedig fűzze hozzá a meglévőhöz fejléc nélkül.
Rendszerből kérünk le különböző időintervallumokra adatsorokat. Ezeket a rendszer exel-be hozza, táblázatos formátumban. A rendszerből 3 hónapnál hosszabb intervallumra nem lehet lekérdezni.
Így van amikor ha mondjuk 1 évre visszamenőleg kellenek adatok, az 4 lekérdezés.
Azt, hogyan lehet megcsinálni, hogy lekérdezem az adatsorokat 1 mappába és azt VBA-val egy excellé = egy táblázattá alakítani őket.
Változó, hogy a mappában mennyi táblázat lenne (1-5 -10 db, bármennyi) Mindegyiknek azonos a fejléce, de értelem szerűen a fejléc csak egyszer szerepeljen és aztán az adatsorok betöltve a lekérdezés sorrendjében.
Azért kell először egy cellába beírni a képletet és utána kitölteni lefelé, mert ha egyből az egész tartományba írnánk be, akkor csak az első sor érvénysülne az egész tömbben. (Ne kérdezd miért, ez van....)
2.
(Részben) VBA-val azért bonyolultabb, mert VBA-ban nem tudod a két oszlopot egyszerű módon összefűzni. Én azt választottam, hogy beolvastam a táblázatot egy tömbváltozóba, a változó első két oszlopát összefűztem - a második változatlan maradt - és a harmadik oszlopban keresek, mivel az FKERES tömbben is képes keresni, nemcsak tartományban.
Igy nézne ki:
Sub Minta() Range("C10").Value = Keres_Func(Range("C10").Row) End Sub Public Function Keres_Func(sora As Integer) As Variant Dim ws As Worksheet Dim r As Range Dim keres As String Dim keresotomb, xx As Integer Set ws = Workbooks("Fkeres_tobb_feltetellel.xlsm").Worksheets("Proba2") keres = ws.Range("A" & sora) & ws.Range("B" & sora) keresotomb = ws.Range("K2:M32").Value For xx = 1 To UBound(keresotomb, 1) keresotomb(xx, 1) = keresotomb(xx, 1) & keresotomb(xx, 2) Next Keres_Func = Application.VLookup(keres, keresotomb, 3, 0) End Function
Ne feledd, hogy ebben az esetben a cella értéket kap és nem képletet, így nem húzható lefelé!!! Minden cellára egyenként kell az értéket előállítani a függvény meghívásával.
Itt a fórumon néhány hete ügyeztünk erről a függvényről:
A minta C10 cellába beírva: =FKERES(ÖSSZEFŰZ(A10;B10);VÁLASZT({12};ÖSSZEFŰZ(INDEX($K$2:$M$32;0;1);INDEX($K$2:$M$32;0;2));INDEX($K$2:$M$32;0;3));2;IGAZ)
működik...
Ezt szerettem volna VBA ban megírni, de nem jártam sikerrel.
Én nem tudok olyan Excel függvényről, amely 2 oszlop összefűzésének eredményét keresné egy másik tartomány 2 össze nem fűzött oszlopában.
Ehhez a célterületen létre kell hoznod egy segédoszlopot, és abban keresni. Nálam ez az N oszlop lett. A 2-32 cellák tartalma pedig az N2-ben K2 & L2,és ez lefelé kitölve.
És mivel képtelen voltam rájönni, hogy a vlookup függvény miért ad Variant/error hibát, ezért – amíg valaki meg nem találja a megoldást – javaslom, hogy a find függvénnyel keress. Ez egy Range típusú változóban adja vissza az eredményt (nálam találat a neve), és ennek a sor értékét lekérdezve tudsz értéket adni az A3-nak:
Sub Minta()
Dim eredm As Variant
Range("A3") = Keres_Func
End Sub
Public Function Keres_Func() As Variant
Dim ws As Worksheet
Dim r As Range
Dim keres As String, talalat As Range
Set ws = Workbooks("Fkeres_tobb_feltetellel.xlsm").Worksheets("Proba2")
keres = ws.Range("A12") & ws.Range("B12")
Set talalat = ws.Columns("N:N").Find(what:=keres, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlByColumns, MatchCase:=True)
If talalat Is Nothing Then ' Ha nincs meg, bár ez elég valószínűtlen
Keres_Func = "Nem találom"
Else
Keres_Func = ws.Cells(talalat.Row, "L")
End If
'Set r = WorksheetFunction.Choose(Array(1, 2), ws.Range("K2:K32") & ws.Range("L2:L32"), ws.Range("M2:M32"))
A teszt kedvéért átjavítottam a tartományokat egyedi cellákra: Choose(2, ws.Range("K2") & ws.Range("L2"), ws.Range("M2")), 2, 0), akkor nem állt le hibaüzenettel a program, de még így is hibás, mert a Keres_Func értéke Error2042 lesz: Variant/Error. (Ezt a Locals ablakban láthatod). Majd az A3-ban pedig #HIÁNYZIK üzenet jelenik meg. Ennek az okát nem tudom.
Legyen üres az a cella, amiben még nincs adat - képlet se legyen benne! Ezután az adatforrás kiválasztása párbeszéd panelen rákattintasz a rejtett és üres cellák gombra, majd bejelölöd az adatpontok összekötése vonallal opciót.
Amikor adat kerül - akár képlettel - a még üres cellába, ez az opció nem hat már tovább.
Üdv, segítség kéne. Van egy vonaldiagramom, ami éves adatokat jelenít meg. Az a gond, hogy ahol még nulla van (értsd: a jövőbeni adatok helye, pl. most a június), ott a mostani tudásommal két rossz közül választhatok:
1: a cellákban elrejthetem a nullákat (Beállítások -> Speciális...), de a vonaldiagram beleáll a földbe, ami nem néz ki jól;
2: a cellákban a nullák helyén =HIÁNYZIK()-ot jelenítek meg, amit elrejthetek (Feltételes formázás), és a vonal nem áll a földbe, hanem megszakad (ez a cél), de a cella értéke a többi munkalapra is átmegy, mindenhol hibával, amit q kényelmetlen lekezelni.
Az Excel-ben található hiperhivatkozások működése és a kattintási viselkedés beállítása több tényezőtől függ, beleértve a felhasználói beállításokat és a program verzióját is. Az alábbi lépések segíthetnek a probléma megoldásában:
1. Frissítések Telepítése
Győződjön meg róla, hogy minden felhasználó a legújabb Office frissítéseket telepítette. Ez sok esetben megoldhatja a problémákat.
2. Alapértelmezett Böngésző Beállítása
Győződjön meg róla, hogy minden felhasználónál ugyanaz a böngésző van beállítva alapértelmezettként. Az Excel hiperhivatkozások megnyitásához általában az alapértelmezett böngészőt használja.
3. Excel Beállítások Ellenőrzése
Ellenőrizze az Excel beállításait minden felhasználónál:
Nyissa meg az Excel-t.
Kattintson a Fájl menüre.
Válassza a Beállítások lehetőséget.
Menjen a Speciális fülre.
Görgessen le a Szerkesztési beállítások szakaszhoz.
Győződjön meg róla, hogy a "Hiperhivatkozások kattintásra aktiválása" beállítás be van kapcsolva.
4. Böngésző Biztonsági Beállítások
Néha a böngésző biztonsági beállításai megakadályozhatják a hiperhivatkozások közvetlen megnyitását. Ellenőrizze és szükség esetén állítsa vissza a böngésző biztonsági beállításait.
5. SharePoint Beállítások
Ha a fájl egy SharePoint alkalmazásban van tárolva, győződjön meg róla, hogy a SharePoint beállításai egységesek minden felhasználó számára. Az engedélyek és a hozzáférési beállítások eltérései is okozhatják a problémát.
6. Makró Biztonsági Beállítások
Néha a makró biztonsági beállítások is befolyásolhatják a hiperhivatkozások működését. Győződjön meg róla, hogy minden felhasználónál a makró biztonsági szint megfelelően van beállítva.
Összefoglalás
A probléma megoldása érdekében ellenőrizze a következőket:
Office frissítések telepítése.
Alapértelmezett böngésző beállítása.
Excel beállítások ellenőrzése (különösen a "Hiperhivatkozások kattintásra aktiválása" opció).
Böngésző biztonsági beállításai.
SharePoint beállításai.
Makró biztonsági beállításai.
Ezek a lépések segíthetnek abban, hogy a hiperhivatkozások minden felhasználó számára megfelelően működjenek.
=HIPERHIVATKOZÁS(ÖSSZEFŰZ(G$1;B303);B303) adott ez a hivatkozás amely megfelelően működik . A file egy sharepoint alkalmazásban felhőben van elhelyezve. Több felhasználó is használja. Vannao olyan felhasználók akinél a hivatkozás a bal egérgombbal való kattintással megnyílik. Ez a jó. Vannak olyan felhasználók akiknél a hivatkozást csak két billentyű lenyomásával tudja elindítani. Mit kell beállítani, hogy a hivatkozás a bal egérmutató kattintásával elinduljon?
A hónap, nap szétválasztásához, pedig a BAL, JOBB, KÖZÉP függvények használhatóak a DÁTUM függvény belsejében.
Ez csak 1 lehetőség a sokból.
Ha nem dátum formátumúak az ilyen dátumot tartalmazó cellák, akkor lehet, hogy érdemes megpróbálni a szövegformátumot dátumra állítani, hátha dátummá alakul és onnantól a dátumfüggvények működnek rajta.
De ez még kevés lesz, végig kell az átalakított szövegformátumú cellákon "gyalogolni" egy F2, ENTER művelettel. Ha nagy tömegvben an van oszlopban , akkor ezt megteszi helyetted a szövegből oszlopok opció.
"az egyes értékek végén van még egy plusz vessző. (Valamint egy szóköz.) ". Próbáld meg, akár jegyzettömbbel, akár Excellel megnyitni - utóbbinál egyelőre nem kérni a szövegből oszlopok transzformációt -, majd a cserénél a Vesző + szóközt valami másra (például pontosvessző) cserélni. ezzel megmaradnak tizedsvesszők, de a határolójel a pontosvessző lesz. Ezzel már fog működni a transzformáció.
A problémám az alábbi. Egy térinfós szoftver .csv-ben dobja ki az eredménytáblát, amellyel tovább kellene dolgoznom.
A több oszlopban lévő numerikus értékek tizedesjegy elválasztója vessző, emellett az egyes értékek végén van még egy plusz vessző. (Valamint egy szóköz.)
Próbáltam az Adatok/Szövegből oszlopok-kal (szóközt beállítva. mint határoló jelet), ami szépen külön oszlopokba rendezi az értékeket, ugyanakkor a gond továbbra is az egyes értékek végén található vessző. Ez nyilvánvalóan nem szükséges.
Hogyan lehetne eltávolítani az értékek utáni vesszőt? Köszönöm a segítségeteket!
Attól függ, milyen címzéssel használod a képletet, de a lehúzásnál is ugyanaz a helyzet. Ha abszolút ($-os) címzést használsz sorra és oszlopra is, akkor igen.
Ha lehúzással jó volt a képlet, akkor a másolással is jónak kell lennie.
tehát a képletem mondjuk B7 ,és az alatta lévő helyen már B8 kell hogy legyen,majd B9 és így tovább. Ha lehúzom váltja a képletet is ugye,de a formátumot. én úgy szeretném hogy a formátum is megmaradjon minden helyen ahogy volt,és a képlet is változzon úgy mint lehúzásnál és ne keljen egyenként bemásolnom 800 helyre. Ezt így nem lehet megoldani sehogy sem?
Szia! Lehúzással megy a formázás is. Helyette: kijelölöd a másoladó képletet tartalmazó cellát, majd Ctrl +C (vagy jobb egérgomb másolás),
utána kijelölöd azt a tartományt, ahová a képletet szeretnéd másolni. Ezen állva jobb egérgomb - irányított beillesztés - képletet. Ezután ESC és megszűnik a kijelölés.
Ha egymás mellett vannak a képletet tartalmazó cellák, akkor együtt is megy a fentiek szerint.
Egy olyan problémába ütköztem,hogy van nekem egy majdnem teljesen készen lévő táblám.
A cellák formázása kész teljesen (cella kitöltő szín,betűszín,betűtípús,betűméret), a rácsok készen vannak az egész táblához.
Egyetlen egy dolog hiányzik a táblából,4darab képlet, amit 1-1x kéne beírnom a sor legtettejére és lehúznom a végtelenségig.
És itt jön a problémás rész,a képlet lehúzásával az összes cellában változik a formátum olyanra mint amelyik cellából lehúztam,ezeket visszaállítani órákig tartana.
Tudok valahogyan "Fill handle"-t (lehúzásos módszert) használni úgy hogy semmi mást ne alkalmazon a többi cellára csak a képletet és a formátumot és mindenmást hagyjon figyelmen kívül?
Jelenleg ezt google drive táblában csinálom,nem excelben.
Feltételes formázás - új szabály - a formázandó cellák kijelölése képlettel - a képletbe pedig beírod a megfelelő relációt.
De a dátummal-idővel kicsit kacifántosabb a dolog.
FONTOS! Mindegy, hogy milyen formátumban látod a cellában az időt, mivel az Excel számként kezeli a dátumot és az időt a következőképpen:
Az egész rész az 1900 jan. 0! óta eltelt napok számát jelenti (tehát 1 = 1900.01.01!), a törtrész jelenti a napon belüli időt, pl. 0,5 =12:00:00.
Vagyis ha egy napon belüli időt írsz be, azt törtként fogja értelmezni az Excel. Ha arra vagy kíváncsi, hogy ez a mostani időhöz hogyan viszonyul, akkor a MOST() - MA() értéket kell hasonlítanod az adott időhöz. Ha időt közvetlenül szeretnél képletbe bevinni, akkor az IDŐ vagy az IDŐÉRTÉK függvényeket kell használnod.
MÁS A HELYZET, ha szövegként vannak a cellában az értékek, ebben az esetben a hasonlítást is szövegként (vagy idővé-azaz számmá - alakítás után) tudod megtenni, de a szövegek hasonlítása más eredménnyel járhat, mint a számok összehasonlítása!!!
Azt pedig, hogy az adott cellában szöveg vagy "szövegnek látszó" szám van, a cella formátum megváltoztatásával tudod tesztelni. Ha számformátumra állítod a cellát és marad a benne levő érték változatlan, akkor szövegként van tárolva az érték és csak látszik pl. időnek. Ellenkező esetben számmá - tizedes törtté kell változnia a megjelenésnek.