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.
A cellaformátum megnézése nem adekvát a te esetere. Hogy értsd: állits be egy üres cellát időformátumra. Aztán írd bele, hogy Sánta Kutya. Aztán nézd meg a cellaformátumát. Az lesz hogy időformátum. Noha valójában nyilvánvalóan string. Amint arról már írtam, erről a SZERKESZTŐLÉCEN győződhetsz meg. Mert ott majd látod, hogy beírás aposztróffal kezdődik. Na most írj be ugyanebbe a cellába egy tizedes törtet. Azt már időformátumban adja vissza. A szerkesztőlécen sem lesz aposztróf elötte.
Tehát az időformátum beállítás azt csinálja, hogy a megadott szám törtrészét időkijelzéssé formázza. De ha nem számot kap, akkor azzal nem tud mit kezdeni. Ezért meghagyja, ahogy van. Még mindig jobb, mintha hibakijelzést adna.
Nem tudom, hogy számként vitted-e be, vagy ebben a formában "3:12:21" (idézőjelek nélkül persze), mert ha ez utóbbi, akkor bármit csinálhatsz a számformátummal, soha nem lesz belőle idő!!!!!
Ha viszont pl. 0,5-ként viszed be és átállítod az időformátumra, akkor már műxik.
Mondanám, hogy természetesen szövegként (hiszen más karakterek is vannak benne - és nem idő formátum, csak olyan szöveg, mintha idő lenne! szerintem) és fütyül a számértékre.
Mivel a min, max függvénynél eleve írja, hogy az argumentumoknak számoknak kell lenni, ezért én nem is próbálkoztam szöveggel.
Tény, hogy a VBA tud szövegeket is összehasonlítani, elsősorban a hosszuk, másodsorban a betűk alapján, de ezt matematikára felhasználni - hát nem tudom.
Egyébként a szöveges min példád (11, 12) nálam egyből 0-át eredményezett, viszont az A1(11)>A2(12) értéke HAMIS, ami teljesen rendben van a karakteres összehasonlítás alapján.
De egy áthidaló megoldás:
A1="12:34:25" B1="12:23:12" C1=HA(A1>B1;B1;A1) Ez megmondja a minimumot. Nyilván, ha több érték van, akkor ennél kicsit bonyolultabb a dolog.
Igen. Ráálltam a cellára, leolvastam, idő. Az első, ami *-gal van megjelölve. Átállítottam egy másik hasonló időformátumra, ami nem csillagos, hátha. Azzal se működött.
Szvsz attól string, hogy stringként vitted be. Attól hogy az időformátumra hajazó stringet az excel képes időformátumnak is nézni, attól az még string marad. Amit ha jobbra igazítasz, akkor jobbra igazított string lesz. Nézd csak meg a szerkesztőlécen, ott lesz elötte az aposztróf.
Az internetes +0 pedig az excelnek az az igen hasznos, és itt a fórumon is már többszőr említett képessége, hogy bizonyos müveleti jelekre átállítja a formátumot. Esetedben a stringet az időértékének megfelelő normál számmá. Van ilyen számos egyéb is:
pl. a=b*1 az 1 ha igaz, és 0 ha nem. Az 1&1 eredménye meg "11". Ezért ha A1="11" és A"=12 akkor Min(a1:a2)=12.
Persze elég nehéz azt kitanulni, hogy maradva a fenti a1-a2 kiosztásnál az a1+a2=23, de a szum(a1:a2)=12 :))))))
Egy kicsit módosítottam a javaslatodon a következők miatt:
Ha általános formában importálja a csv fájlt, lesznek olyan dátumok, amelyeket tud értelmezni a magyar excel is (pl.legközelebb nov.), ezt érdemes figyelni és kezelni.
Ha Option Base 0 akkor lehet 0-ról indítani a hónapok feltöltését és nem kell így az eredményből kivonni 1-et, (vagy ha Option Base 1, akkor sem.)
Jóllehet, a cella alapértelmezésben az értéket adja vissza, én mégis szeretem használni a .value-t mivel így gyorsabb a számolás.
Lehet, hogy nem minden nap van 0-val kezdve, nem minden hónap 4 karakter hosszú. Ezért inkább a határolóval célszerű operálni (ami persze lehet más is, nem csak "-".
Továbbá- miért ne csinálnánk egyből dátumot és állítanánk be a dátum formátumot az adott cellán?
Sub honapos() Dim ho(12) As String, ev%, nap%, honap ho(0) = "Jan" ho(1) = "feb" ho(2) = "mar" ho(3) = "apr" ho(4) = "may" ho(5) = "june" ho(6) = "july" ho(7) = "Aug" ho(8) = "sept" ho(9) = "oct" ho(10) = "nov" ho(11) = "dec" For Each cell In Range("A1:A40") If Not IsEmpty(cell) Then If Not IsDate(cell.Value) Then nap = Left(cell.Value, InStr(cell.Value, "-") - 1) ev = Mid(cell.Value, InStr(4, cell.Value, "-") + 1) honap = Replace(cell.Value, nap & "-", "") honap = Replace(honap, "-" & ev, "") honap = WorksheetFunction.Match(honap, ho, 0) cell.Value = DateSerial(ev, honap, nap) cell.NumberFormat = "yyyy.mm.dd" End If End If Next End Sub
És persze a Te programod sem csinál 27-Oct-2013-ból 2013.09.27-et!
A stringeknél ez már csak így van. Annak ellenére, hogy az "a<"b"=IGAZ és az"a">"b"=HAMIS, a MIN("a";"b")= 0. Valószinűleg azért, mert a MIN a stringeket 0-nak tekinti. Ahogy egyébként a SZUM is, az ÁTLAG is, meg a DARAB is. Bár ez utóbbinak van darab2 változata is.
Biztos van elegánsabb megoldás is, de én csak erre vagyok egyelőre képes. Kijelölöd a szöveges cellatartományt, amelyben vegyesen vannak dátumok és egyebek, majd elinditod a makrót, ami a dátumokat átírja 07-Oct.-2013 formáról, 2013.09.07-re, amivel a magyar excel már elboldogul. Két feltételnek kell ehhez teljesülni: 1. A dátumok mind amerikai formátumuak és a hónapok az angol rövidítésüek legyenek. 2. A felölelt időszak 2000-2099 közé essen.
A makró extrém esetben elbarmolhatja a cella tartalmát, ha jobbról a 3.-4. betű "20" és ez nem a 2000-res dátumból származik. A makro szerkezete viszont roppant egyszerű, ezért a feltételeket könnyű átírni.
Sub djmorphdatum()
Dim a$, b$, ev%, ho, nap%, honum, cell Dim honapok(12)
De nem értem, hogy működik. Nem a tömbképletet nem értem, hanem a +0-t. Mindenképpen hibás működés, hogy közönséges MIN függvénnyel nem ad jó eredményt.
Remekül működik, annyit még ha tudnál segíteni, hogyha ugyanabban a cellában akarom látni még az aktuális dátumot is az időpont előtt akkor hogyan kell modosítanom a makrót?!
Segítsetek! Olyan időfüggvény kellene nekem, ami az éppen aktuális időt rögzíti MÁSODPERCRE pontosan. A Ctrl+Shift+. kombináció az percre pontosan írja csak az időt.
Nekem is lenne egy kérdésem. Szeretnék egy egy excel file "Thisworkbook" lapján lévő makrókat beimportálni egy másik excel file "Thisworkbook" lapjára. A problémám az, hogyha kiexportálom a thisworkbook-ot, akkor az exportálás automatikusan egy class module file-t hoz létre (cls kiterjesztéssel), amit, ha visszaimportálok a másik munkafüzetbe, akkor ott is class module-ként jelenik meg, de én a "Thisworkbook" lapra szeretném azt bemásolni (nem kézzel, hanem makróval).
CSV-ből importálok file-okat. Az "AD" oszlopba importálja a dáumokat de a következő formátumban:
"07-Oct-2013"
Hogyan tudnám rávenni, hogy az excel tudja kezelni ezt a dátumot pl viszonyítani tudjak hozzá stb? Az a baj, hogy göngyölített adathalmaz tehát mindig csak nőni fog és egyesével átirogatni nem nagy élmény :D
Azon töprengtem, hogyan lehetséges úgy átállítani fix tizedesre az excelt, hogy a usernek erről fogalma sincs. Hát végülis nagyon könnyen. Mert ha több füzet van nyitva, akkor, ha akármelyiket is átállítjuk, azzal a többi füzetben is megtörténik az átállítás. Ha a későbbiek során ezek közül az átállított füzetek közül bármelyiket is behívjuk elsőként, az tovább "fertőzi" az utána megnyilókat, amelyek szintén hasonlóképpen fognak viselkedni. Egészen addig, amig ki nem kapcsoljuk a fix tizedes módot az egyik füzetben, mert ezzel a többi megnyitott füzetben is megszűnik.
Bekapcsolta valaki a "fixed decimal mode-ot". Alant le van írva, hogy hogy lehet kikapcsolni.
Ques 19. Your colleague created a dashboard and when you enter a value, it appears with two decimal places. For example, when you enter 265 it shows up as 2.65. What's wrong? Solution: By chance Excel's fixed-decimal mode was turned on. To return to normal, Excel 2003 --> Click Tools and then Options to display the Options dialog box. Then click the Edit tab and remove the check mark from the "Fixed decimal " option. Excel 2007 --> Click Office button on Top-Left corner and click 'Excel Options'. Go to Advanced and Uncheck 'Automatically insert a decimal point' option. Excel 2010 --> Click File button on Top-Left corner and click 'Excel Options'. Go to Advanced and Uncheck 'Automatically insert a decimal point' option.
Csinálhatod FKERES-sel is. A százalékokat kumulálod 0-tól 83-ig és melléjük irod a posztokat. Majd az 1-100-ig kitöltött cellák mellé beírod az FKERES képletet: =fkeres(szám-1;$posztkiosztó;2)
Írtad, hogy nézted a számformátumot is. Na és melyik formátum volt kijelölve, és azt hogyan illusztrálta, miközben az 5000000/0,5-ös cella volt kijelölve?