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.
Feltétel, hogy az A és a C oszlopban pontosan ugyanazok az adatok legyenek. Ha ez nincs így, akkor az első karaterek (gondolom cikkszám v. vmi ilyesmi) alapján is lehet keresni, akkor kicsit bonyolultabb a képlet.
Nem írnád le egy kicsit bővebben (vagy érthetőbben), hogy mit szeretnél? Például, mit értesz azon. hogy "egymás mellé szeretném rendezni"? Hát nincsenek egymás mellett? És az utolsó mondatot hogy kell érteni? Miféle adatok vannak ott, és hogyan kellene azt figyelembe venni?
Ha jól értem ezt szeretnéd, azaz a-D oszlopok helyett a G-J oszlop szerinti rendezettség legyen (bocs, de nem volt kedvem bepötyögni a mintád adatait)?
És az E oszloppal - a figyelembe vételen kívül - mi történjen?
1. Maradjon változatlan?
2. A C-D oszloppal együtt mozduljon az I-J mintájára?
Egy kis segítséged szeretnék kérni. Adott egy 4 munkalapos Excel fájl. Szeretném mind a 4-et levédeni úgy, hogy a szűrés és az oszlopok csoportosítása (nyitás/zárás) lehetősége megmaradjon. VBA-ban próbálkoztam már kódokkal, de csak 1 munkalapot tudtam így levédeni, a többin nem működött.
Nem volt ilyen dokumentum megnyitás, én követhettem el valamit, akaratlanul. De legalább fiatalodott kicsit a szoftver, a réginek már úgyis megszűnt a támogatása.:-) Sokat segítettél, még egyszer köszi.
Nagyon szívesen, amúgy hasznos funkció, ha túl sok a képlet és lassan számol újra. Nem tudok róla, hogy lenne ilyen billentyű kombináció.
Azt tudom elképzelni, hogy megnyitottál egy olyan dokumentumot amiben le volt tiltva és átállítódott nálad is. És hogy ez a jelenség létezik-e, azt nem tudom.
Nagyon szépen köszönöm a segítséged! Valóban így volt, működik.
Bár anno elvégeztem egy Excel-tanfolyamot (OFFICE 95 szörnyű régen), de ettől még nagyon mezei felhasználó vagyok. Viszont pont ezért nem nyúlok semmilyen beállításhoz.:-) Lehetséges, hogy egy szerencsétlen melléütésből beletaláltam egy billentyű kombinációba, és attól állt át?
Egy kis segítséget kérek Excel-ügyben. Néhány napja az automatikus összeadás függvény nem működik. Ha módosítok egy cella értékén, akkor a végeredmény ugyanaz marad. Ha kitörlöm a végeredményt, újból kijelölöm a cellákat, és ismét rányomok az autoszumra, akkor kiírja a helyes értéket. Ha utána módosítok valamelyik cellán, akkor megint nem változik, és kezdődik elölről. A cellára kattintva, a függvény ellenőrzésénél ott vannak helyesen az összeadandó cellák, mégsem működik.
Korábban nem volt ilyen probléma. Mivel ez egy ősi Office 2007 volt, ezért ma lecseréltem 2016-ra (teljesen legálisak a szoftverek), és ugyanaz a jelenség. Mi lehet ennek az oka?
Az első részére vonatkozóan figyelmetlenségről van szó. Bár nagy oszlopszámokat nyilván nem szerencsés számokká alakítva használni.
A második részre: az =oszlop(AX1) képlet lehetőségére nem gondoltam, pedig az valóban sokkal egyszerűbb képletet adott volna még a 2010-es verzióban is.
"nekem nem vált be, tekintve, hogy az oszlop() függvény numerikus értéket ad"
Valamit nem értek. Ha az oszlopot és a sort is számokkal adod meg a két forráscellában (ahogyan a kérdező mutatta), akkor miért gond, hogy az oszlop() függvény számot ad vissza? Arról nem is beszélve, hogy az oszlopot tartalmazó cellába írhatsz képletet is.. pl. =oszlop(AX1), aminek az eredménye 50 lesz.
Akkor bocs (mármint Feritől). Elfelejtkeztem, hogy én most nem fértem hozzá a frissített gépemen, és Excel 2010-el próbáltam ki. Majd megnézem az újabb verzión is.
Még egy kérdésem lenne feltételes formázással kapcsolatban.
Szeretnék egy egész oszlopot (nem sort!) feltétellel formázni.
Pl.:
D2:AY76 tartományt szeretném formázni a következőképpen:
B1=D1 --> D2:D76-ig legyen mondjuk piros
B1=E1 --> E2:E76-ig legyen mondjuk piros
B1=F1 --> F2:F76-ig legyen mondjuk piros
Ez sornál tök jól működik az excelben, viszont egyszerűen oszlopra nem tudom, hogy kéne. Persze nem szeretném külön oszloponként, gondolom van erre valami megoldás.
Szia, bocs én is megpróbáltam ezzel, de nekem nem vált be, tekintve, hogy az oszlop() függvény numerikus értéket ad. Ezért egy kicsit bonyolultabb képletet kellett készítenem, ezt is azzal a korláttal, hogy maximum 2 karakteres oszlopnevekkel dolgozik, azaz ha 3 karakterest ad meg, akkor figyelmen kívül hagyja.
Van egy makróm, ami tökéletesen csinálja, amit kell.
Sub Kepek() Application.DisplayAlerts = False On Error Resume Next Dim Kepneve As String, utvonal As String, sor As Long
utvonal = "d:TomiKépek" '***
For sor = 1 To 30 If Cells(sor, "B").Value <> "" Then Kepneve = Mid(Cells(sor, "B"), InStr(Cells(sor, "B").Value, " ") + 1) & ".png" '***** With ActiveSheet.Pictures.Insert(utvonal & Kepneve)
Beilleszti teljesen jól a képeket, a megfelelő helyekre. Ezeket a képeket én átmásoltam egy másik excelbe, ami szintén gond nélkül megtörténik.
A probléma akkor van, hogyha egy másik gépre átmásolom az excel file-t, és megnyitom, akkor azok a képek, amik makróval lettek hozzáadva nincsenek ott. Tehát nem úgy kezeli őket, mintha normálisan, beszúrás útján tettem volna hozzá őket, hanem keresi az útvonalat. Egyszerűen valahogy meg lehet ezt oldani, hogy normális képként kezelje az excel? A másolás, és kivágás sajnos nem megoldás, ugyanúgy nem találja.
Kösz, hogy foglalkoztál vele! Mostanra nálam is meggyógyult. Volt közben egypár ki- és bejelentkezésem, de nem hiszem, hogy attól, mert már tegnap is ugyanez volt a gond. És azt sem hiszem, hogy a Védelem fül alatti beállításoktól, mert most is ugyanúgy látom a két pipát, a satírozással. Rejtély, de most működik.
Nekem a 2010-es is simán megtalálja. A második sorba (A2) írtam, hogy körte. Aztán elléptem róla, majd kerestettem. Az eredmény a rejtett sor megvastagítása és a szerkeszőlécen a körte megjelenítése. Aztán ha listába kértem, akkor konkrétan meg is adta a helyét:
Nekem úgy tűnik, hogy nem volt világos, mit is szeretnék. Éppenséggel NEM akarom felfedni a rejtett sorokat, csak azt szeretném elérni, hogy az azokban levő adatokat is megtalálja a Ctrl-F-es keresés.
Ez, amit találtál a munkalap védelemmel kapcsolatos. Azzal cellákat vagy tartományokat tudsz zárolni, vagy rejteni. Lásd inkább: Korrektúra->lapvédelem. De ez nem a sorok/oszlopok elrejtése. De nem is a munkalapé. Azt a nevére kattintva jobb gombbal rejtheted el. És persze ugyanott kattintva fedheted fel.
Hogy az Excel 2003-ban hogy volt, arra már nem emlékszem több év távlatából. A 2010-est, és a rákövetkezőket tudom. A rejtett sorok/oszlopok esetén a rejtett tartományt tartalmazó területet határoló sorokat/oszlopokat kijelölöd, majd jobb gomb és felfedés.
Ha a Keresés ablakban kinyitom az Egyebek-et, akkor megjelenik egy Formátum gomb. Ha rákattintok, akkor feljön a Formázás kereséshez ablak. Azon van egy Védelem fül. Az alatt látható egy Zárolt és egy Rejtett jelölőnégyzet. Kezdetben mindkettőben pipát láttam, de satírozással. Megpróbáltam ki-be kapcsolgatni a Rejtett opciót, de hiába, egyik állásban sem találta meg a rejtett sorok adatait.
Szerintem ez nem nyert. ÉN nem csalni akarok, hanem rendszergazda vagyok, és egy olyan táblázatban akarok keresni, amelyben felhasználónevek és jelszavak vannak, és szeretném, ha szükség esetén továbbra is meg tudnám nézni egy adott felhasználó jelszavát, anélkül, hogy a többi felhasználó jelszava is látszana a képernyőn. Ezért rejtettük el a táblázatnak a jelszavakat tartalmazó sorait. Az Excel 2003-mal nem volt probléma a keresés ezekben a rejtett sorokban, de most a 2010-essel ez nem működik. Az egyik kollégám szerint neki korábban is ment, amikor még 2010-est használt, de a saját szemével is láthatta, hogy nálam most nem megy. Az okát viszont együtt sem találtuk meg. Ezért kértem tippet itt a hozzáértőktől.
Azt nem lehet? Én eddig ahhoz voltam szokva az Excel 2003-ban, hogy simán megtalálja azt is, ami az elrejtett sorokban van. Most váltottam 2010-esre, és ez meg nem. Pedig jó lenne. Nincs erre valami trükk?
Sziasztok! Lenne 15000 adatom egymás alatt. Kellene nekem 100-as osztásban átlag tehát 1-100-ig majd 100-200ig és erről mind külön átlag. Valaki erre megoldás esetleg? :D
Létezik olyan megoldás, hogy egy excel táblázatból csak a fehér háttérrel rendelkező sorokat lássam? Adott egy nagy adatbázis amelyben a napi munkák vannak felsorakoztatva egymást követő sorokban.
Amelyik munka el van végezve azt a sort kiszínezik és szín szerint vannak osztályozva.Pl piros törölt munka, sárga elkészült, zöld a következő, sürgős stb. A státuszt ez alapján nem legördüléssel hanem színekkel fejezik ki:)
Nos a már valamilyen státuszban lévő munkák engem nem is érdekelnek de amelyik munkafolyamatnak a háttere fehér azokat szeretném látni
Sziasztok, egy olyan problémár keresek megoldást, hogy van egy HAHIBA fügvényem, ami két oszlop hányadosát jeleníti meg %-ban és ha még nincs bemenet vagy 0 az osztó akkor kiírja hogy nincs bemenet, viszont a következő oszlopban azt szeretném kiírni hogy ha az eddig beszélt oszlop eredménye >=80% ,akkor 1 et ír ki ha nem akkor 0 át, viszont a nincs bemenetre is 1 et ad eredményül. Hogy lehetne megoldani azt, hogy a nincs bemenetre mondjuk ugyanúgy 0 át adjon vagy mondjuk a nincs bementre egy kötőjelet ( "-" ).
A cellaegyesítéssel gyűlt meg kicsit a bajon. A problémám, hogy csak és kizárólag egyetlen egy cella tartalmazza ténylegesen az értéket, a többi 0.
Tehát pl.: A1 és A2 cella egyesítve van, de ha csinálok egy ilyen hivatkozást: =A2 az eredmény 0. Ha A1-re csinálom, akkor a normális értéket adja.
A baj az, hogy nekem szükségem lenne az A2-re is, aminek az értéke ugyanannak kéne lenni, mint az A1-nek. De sajnos nem így van.
Erre valami megoldást lehet esetleg találni?
Ui.: Az nem jó, hogy az előtte való értéket kérem tőle, mert összevissza vannak egyesítve, van ahol 2 cella csak, de alatta 3, az alatt megint 2, szóval nem tudná az excel melyikhez "tartozik".
Azt hogyan lehet belekódolni, hogy a legkisebb érték a függőleges tengelyen a minimum érték egészre lefelekerekített értéke legyen? (Ne pedig a -1 és kerekítve a legközelebbi 5-tel osztható számra)
Itt az új változat arra az esetre, mikor a másik fórumra kitett tartomány szerint kell a tengelyt módosítani.
Private Sub Worksheet_Change(ByVal Target As Range) Dim minn As Single
If Not Intersect(Target, [B2:D8]) Is Nothing Then minn = Int(Application.WorksheetFunction.Min(Range("B2:D8"))) ActiveSheet.ChartObjects("Diagram 1").Activate ActiveChart.Axes(xlValue).Select ActiveChart.Axes(xlValue).MinimumScale = minn End If End Sub
Azt hogyan lehet belekódolni, hogy a legkisebb érték a függőleges tengelyen a minimum érték egészre lefelekerekített értéke legyen? (Ne pedig a -1 és kerekítve a legközelebbi 5-tel osztható számra)
Megjegyzés: A lapon már meg kell lennie diagramnak, mégpedig elsőként. Ha nem az, akkor a neve nem Diagram 1.
Rákattintva: Diagrameszközök->Elrendezés->Tulajdonságok-ra megkapod a nevét.
Aztán az ActiveSheet.ChartObjects("Diagram 1").Activate sorban a nevet erre javítva működni fog.
Ettől kezdve, ha a B2:B8 tartományban bármit módosítasz mondjuk a 120-at felülírod akár seját magával, a progrma lefut, és skálázza a diagramot. Én ezt nem nevezném zoomlásnak, hiszen nem méretet csökkent vagy növel, hanem a diagram tartományát írja át.
Excelben adott egy pár sor vagy oszlop, a bennük levő számokat akarnám összeadni ezzel a függvénnyel: =B4:F4 és összeadás helyet ezt írja ki #ÉRTÉK! Miért nem csinálja meg a kért műveletet?
Látom, még nem jártál erre. Itt egy másik, laphoz rendelt makró. Ez akkor módosít a skála alján, ha valamelyik adatot átírod – itt a B2:B8 – tartományban.
Private Sub Worksheet_Change(ByVal Target As Range) Dim minn As Long
If Not Intersect(Target, [B2:B8]) Is Nothing Then minn = Application.WorksheetFunction.Min(Range("B2:B8")) minn = Application.WorksheetFunction.MRound(minn - 10, 5) ActiveSheet.ChartObjects("Diagram 1").Activate ActiveChart.Axes(xlValue).Select ActiveChart.Axes(xlValue).MinimumScale = minn End If End Sub
Egy laphoz rendelt eseményvezérelt makró megteszi.
Nálam az értékek a B2:B8 tartományban vannak.
A makró a lapra lépéskor fut le.
Private Sub Worksheet_Activate() Dim minn As Long
ActiveSheet.ChartObjects("Diagram 1").Activate minn = Application.WorksheetFunction.Min(Range("B2:B8")) ActiveChart.Axes(xlValue).Select ActiveChart.Axes(xlValue).MinimumScale = minn End Sub
KÖszi, de azt akarom, hogy ez automatikus legyen, azaz ne kelljen semmit állítanom a tengelyen, hanem ha változnak a számok, akkor magától csinálja meg az excell.
Az Y oszlop értékei határozzák meg. Ha nagyítani akarsz, ezekkel az értékekkel kell operálnod. Az alsó- és felső értékek közel legyenek az ábrázolandó értékekhez.
Hogyan lehet beállítani, hogy a diagramm az excellben automatikusan zoomoljon. (Ne manuálisan, azt ismerem.)
Van egy sejtésem, hogy ha a legnagyobb és legkisebb érték között 20%-nál nagyobb eltérés van, akkor nem zoomol, alatta pedig igen. Viszont akkor ezt a 20%-t át lehet írni? Vagy más ötlet?
Megnéztem ezt a kitűzés dolgot. Soha nem volt dolgom vele. Itt: http://forum.index.hu/Article/viewArticle?a=140528027&t=9221319 kiderült, hogy a tálcára rögzített alkalmazás (pl. Excel) jobb gombos listájához lehet rendelni gyakram használt fájlokat (kitűzés), amiket aztán inen is meg lehet nyitni. Ebből kiderült, hogy a kérdésed tényleg nem Excel kérdés, hanem Windows 10. Kérdezd meg abban a topikban!
Nézd meg a Névkezelőt is. Figyeld meg, hogy a cégek neveiben a szóközöket alsó kötjelekre cseréltem, mert az elnevezésekben az Excel nem fogadja el a szóközt.
Adott egy 18.000 soros excel tábla. Cégekadatok szerepelnek benne, egy cégnév többször is szerepelhet benne. 1 székhely és több telephely mind eltérő címekkel. A táblában további általános vannak a cégekhez hozzárendelve, telefonszám, email cím, kapcsolattartó stb.
Egy olyan megoldást keresek, hogy egy cégenként csak a székhely jelenik meg alapesetben, de ha vannak további telephelyek, a címet tartalmazó cellából ki lehet választani cím szerint őket, és a kiválasztott telephelynek megfelelően változnak a további általános adatok a teljes sorban (telefonszám, e-mail, stb.)
Szerintem a munkafüzetek megnyitásának sorrendje határozza meg a Tálcán (Tray) azok megjelenítési sorrendjét. Nem hinném, hogy korábban másképp volt.
És ez szerintem nem Excel probléma, ott ugyanis office 2010 alatt csak egy dolgot tudtam szabályozni, hogy a megnyitott munkafüzetek egy ablakban nyíljanak meg, vagy sem:
Most Office 2019 alatt még ezt sem látom, de a sorrendre vonatkozó módosítás lehetőségét sem.
Egy program kimenti a táblázatba az abban található gépeket a csatlakozásaikkal (program által kinyert adatbázis). Ha egy gépnek több csatlakozásai is van (példa szerint elektromos, légtechnikai, víz és lefolyó) akkor azt annyi sorba hozza ahányféle csatlakozás van, tehát itt 4 külön sorom lesz. A célom az lenne, hogy úgy konvertáljam át a táblázatot, hogyha a B oszlop értékei azonosak, akkor csak egy sorban írja az adatokat, külön oszlopokba ahogy az az "átkonvertált formátumban" látható.
Kerestem, hogy feltettem-e már a kérdést de nem találtam,bocs ha régebben volt!
A munkafüzetek megjelenítésének sorrendje ( amikor az excel fölé viszem az egeret) állandóan változik de nem tudok rájönni, hogy miért!
Több munkafüzetet használunk egyszerre, de az első 5 mindig ugyanaz.
Egy ideje változott valami és roppant zavaró módon összevissza kóborolnak. Néztem, hogy a módosítás ideje vagy az elnevezés a lényeg, de nem jöttem rá mi alapján rakja sorba.
Remélem érthető!
Van ötletetek,hogy mi lehet a megoldás vagy egyáltalán mi a beállítás neve?
Egyébként a problémától függetlenül van egy észrevételem a makróddal kapcsolatban:
A BeforeClose utáni sorban az Application.EnableEvents = True ebben a használatban hibás. Ugyanis a BeforeClose eseménybe be sem lépne, ha nem True lenne az értéke.
Ezt fordítva szokás használni. Az eseménykezelőbe belépve Application.EnableEvents = False paranccsal kikapcsoljuk az eseménykezelést, hogy amíg be nem fejeződött, ne ugorjon másik eseményre, majd a kilépést megelőző - az End Sub előtti - sorban visszaállítjuk True értékre.
Igen, a Fájl -> Bezárás esetében mindig lefut a Workbook_BeforeClose.
A jobb felső sarokban lévő X-el csak egyszer fut le.
Idáig viszont az alábbi konfiguráción tökéletesen működött/működik, a jobb felső X-el is minden esetben lefutott a Workbook_BeforeClose. Ezért gondoltam, hogy az új platformon is működnie kellene.
- Windows 7 (64 bit) - Microsoft Office Professional Plus 2010 (32 bit) - Excel 2010 (14.0)
Ha a jobb felső X gombbal, akkor ez a jelenség valóban. Sajnos ezt nem lehet megkerülni, mert az X gomb Windows alatt érvényesül és nem az Excel alatt sajnos, ezért a BeforeClose eseménykezelő is csak 1x tud lefutni.
Amikor a Fájl-Bezárás menüpontokat használod, teljes mértékben érvényes az eseménykezelés és minden esetben megkérdezi amit szeretnél.
Már elég régen jártam itt, de most megint egy bosszantó problémába ütköztem.
Van egy kis eljárás, ami az Excel bezárási kezdeményezéskor: - megkérdezi, hogy valóban kilép-e - mentés nélkül bezárja az Excel-t.
Ez idáig az alábbi konfiguráción tökéletesen működött/működik: - Windows 7 (64 bit) - Microsoft Office Professional Plus 2010 (32 bit) - Excel 2010 (14.0)
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.EnableEvents = True
If MsgBox("Valóban kilépsz?", vbQuestion + vbYesNo, "Adatvédelem") = vbYes Then
ThisWorkbook.Saved = True
Cancel = False
Else
ThisWorkbook.Saved = False
Cancel = True
End If
End Sub
A problémán az, hogy egy újabb konfiguráció alatt: - Windows 10 (64 bit) - Microsoft Office Professional Plus 2016 (32 bit) - Excel 2016 (16.0)
nem jól működik, olyan, mintha a „Workbook_BeforeClose” esemény csak egyszer futna le, amennyiben az első kilépési kezdeményezéskor a kérdésre a „Nem” opciót választom, a következő kilépési kezdeményezéskor már csak a hagyományos beépített kilépés előtt kérdéseket teszi fel (Ment; Nincs mentés; Mégsem).
Ez szuper ötlet, köszönöm. Az általad leírt verzióban lefelé visszament az elejére, felfelé azonban továbbra is kilépett. Ezen kívül, ténylegesen nem tudtam kiválasztani az utolsó elemet, mert ha ekkor szerettem volna kilépni, egyből átugrott a nulladikra. Ezért kicsit átalakítottam.
Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) With Me.ComboBox1 If .ListIndex = .ListCount - 1 Then .ListIndex = -1: Cancel = True
If .ListIndex = 0 Then .ListIndex = 0: Cancel = True End With End Sub
Ezen kívül a listák elejére és végére betettem egy üres cellát. Így a nyílbillentyűket nyomva nem körbepörög, hanem megáll az utolsó (üres) értéken. Azonban mivel erre nincsen szükségem, így bármelyiket kiválasztva onnan már ki tudok lépni a combobox-ból.
Nálam a Listbox nem lépett ki az általad leírt események során.
A Combobox-ra próbáld ki az alábbiakat a Userform kódlapjára írva:
Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) With Me.ComboBox1 If .ListIndex = .ListCount - 1 Then .ListIndex = 0: Cancel = True End With End Sub
Természetesen a saját vezérlő neveddel.
Ha a Listbox is kilép, akkor ugyanígy megnézheted arra is ezt a kódot.
Userform felületen Listbox és Combobox objektumokat használok, amikhez forrásnak egy-egy tartomány van csatolva.
A formon alapvetően a billentyűzettel haladunk, tehát a listboxban is le- és felbillentyűkkel állunk a választott szövegre, majd TAB-bal megyünk tovább.
Az a gondom, hogy a listboxon (vagy combobox) állva ha a le- vagy felnyilakkal elérem a tartomány legalsó vagy legfelső adatát, akkor kilép a boxból és az előző (felfelé nyílnál) vagy a következő (lefelé nyílnál) boxba átlép.
Meg lehet-e oldani, hogy a legalsó vagy legfelső elérésekor álljon meg, és ne lépjen ki az aktív boxból?
Köszönöm a válaszod! Betettem ezt a kiegészítést, de sajnos nem változott. Amint olyan cellához ér, ahol nem képnévvel egyező cella van, 1004-es hibát dob, és nem fut tovább.
Mi lenne az egyszerű módja automata kitöltéssel, hogy pl. 15 nevet egyenlő arányban elosszak egy több ezer soros táblában és mindegyik sorba be is írjam a nevet (pl. 2400 sor, 15 ember, akkor az 160 sorba az első ember neve, a második 160 sorba a következő ember neve, stb.)
Régóta használjuk ezt, de most a részben állandó tartalmak mellé bekerültek változók, valamint egy táblázat részlete is.
With email .To = Címzett .Cc = Másolatok .Subject = "Kmentés_" & Psz & "_" & TipK & "_" & WKm.Cells(sor, 6) & Atadva .Display End With
Eddig nincs gond, a változókat remekül kezeli. A probléma a bodyval van.
Az email szövege egy megszólítással kezdődik
Sendkeys "Tisztelt Főni! '(ez állandó)
Sendkeys "Tájékoztatom, hogy az ekkor és ekkor történt ilyen meg olyan valami megvalósult" '(ebben a szövegben változókból kapjuk meg a mondatot)
Majd itt jön egy táblázat meghatározott részének a bemásolása
Sheets("Kmentés").Range("A2:" & Sm & "5").Copy SendKeys "^v"
SendKeys "{ENTER}" SendKeys "{ENTER}"
SendKeys "Ide még jön egy lezáró szöveg, ami szintén állandó"
Tehát 4 részből áll össze a szöveg:
1. Megszólítás
2. Változó szöveg
3. Táblázat
4. Állandó szöveg
Alapvetően azt gondoltam, hogy mindegyik részt copy pasteval illesztem be egymás után. Azonban ha ebben a részben egynél több copy pastet szeretnék, annak ellenére, hogy egyenként másolom a meghatározott tartományt, majd illesztem be, mégis csak az egyik tartományt másolja be, de azt háromszor.
Ha sendkeys-szel írom be a szöveget, akkor meg a szövegben lévő "í" betűt nem ismeri fel, és annak a helye karakter nélkül marad.
"A kérdező pont az iránt érdeklődött, lehet-e egy billentyű kombinációhoz kötni az indulást."
Igen, de csak miután már elküldtem a makrót. És akkor meg azt is írta, hogy " Látom, kattintásra működik. Az is jó." Ezért aztán nem töprengtem más megoldáson, bár Delila duplaklikkes megoldása talán ésszerűbb lehetett volna.
Bocsánat, de miért kellene ezt a makrót eseménykezelésként futtatni? A kérdező pont az iránt érdeklődött, lehet-e egy billentyű kombinációhoz kötni az indulást. Miért ne lehetne?
"Az elindulást nem tudom megakadályozni"
Ha "sima" makróként használjuk - akár a munkalap kódlapján is, akkor a makróhoz hozzá lehet rendelni billentyű kombinációt.
Vagyis így a felhasználó dönti el, hogy mikor indítja a makrót!
"De ha billentyűhöz lehetne adni, és csak akkor indítanám amikor én szeretném. Jobb lenne."
Az elindulást nem tudom megakadályozni, de azért tettem bele a kérdést. Hogy ha más célból kattintottál a cellára, vagy véletlenül, akkor választhasd, hogy ne csináljon semmit.
Lehetne más trükköt használni, például a Delila által javasolt duplaklikket, de még akkor is előfordulhat a téves duplaklikk. Egyéb megoldás meg szerintem túlbonyolított lenne.
Nem gond. Én azért jelöltem ki az első oszlopot, hogy ne zaklasson kérdéssel, bárhova kattintasz. De persze az is jó, ha te adod meg az oszlopot, amelyik reagál.
Ehhez cseréld le a 4. sort
If Target.Column > 1 Then Exit Sub ' Csak akkor foglalkozunk vele, ha az első oszlopba kattint
erre, és az "A" helyére írd a saját prferált oszlopod nevét:
If Target.Column <> oszlopszam("A") Then Exit Sub ' Csak akkor foglalkozunk vele, ha az adott oszlopba kattint
Egy másik megoldás, ami a sor (amelyik alá be akarsz szúrni) bármelyik celláján duplaklikkre másol:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim sor As Long, oszlop As Integer sor = Target.Row + 1 Rows(sor).Insert Cells(sor, "A") = Cells(sor - 1, "A") For oszlop = 4 To 8 Cells(sor - 1, oszlop).Copy Cells(sor, oszlop) Next Cells(sor, "K") = Cells(sor - 1, "K") For oszlop = 15 To 22 Cells(sor - 1, oszlop).Copy Cells(sor, oszlop) Next Cancel = True End Sub
Köszönöm. Sajnos nem tudom, lehet e a korábbi hozzászólásokat módosítani. Látom, kattintásra működik. Az is jó. De mit és hol kellene átírni, hogy inkább az általam választott oszlop cellájában kattintva működjön és ne az A oszlopban.
A következő programot másold be a használandó munkalapod kódterületére:
Használat:
1. A második sorban a másolás után kijavítod a listát a neked megfelelőre, a meglévő szabályokat betartva, azaz a cellákat vesszővel választod el, és kötőjellel tatományt is megadhatsz.
2. Egyelőre korlát, hogy legfeljebb 100 cella lehet a felsorolásban. Ha kevés lenne, akkor az ötödik sorban a Dim cellalista(100) étrékét növelheted tetszés szerint.
3. A program csak akkor lép működésbe, ha az adott soron az A oszlopra ugrasz. Ekkor megkérdezi, hogy tényleg szeretnéd-e beszúrni akiválasztott cellákat a következő sorba,
4. A program először végéigmegy a megadott cellalistádon,és ha az hibátlan, akkor kezdi el a beszúrást. Így ha elhibáztad a listát, és elakad a program, akkor nem történik semmi.
5. A program első sora az Option Explicit. Ha nálad alapértelmezésben megjelenik, akkor az egyiket ki kell törölni. Ne legyen duplán.
Option Explicit
Const oszlopok As String = "A, D-H, K, O, P-V"
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column > 1 Then Exit Sub ' Csak akkor foglalkozunk vele, ha az első oszlopba kattint
Dim cellalista(100) As Long, cellasorszam As Long, valaszertek As String, szoveg As String, vhely As Long, khely As Long, aktoszl As String, kbetu As String, vbetu As String, i As Long
szoveg = Target.Row & ". sor " & Trim(oszlopok) & " celláinak beszúrása a következő sorba. Mehet?"
Egyszerű excel használóként olyan SORBESZÚRÁS makróhoz szeretnék segítséget kérni, ami előző sor meghatározott celláit másolja a beszúrt sorba. Pl. A, D-H, K, O, P-V oszlop előző kitöltött sor celláit másolja. A segítséget előre is köszönöm.
Bocs de ez nem valószínú. Ugyanis az Option Explicit mindig megjelenik a kód ablakban, ha a VBA settings alatt a Require Variable Declaration mellé kitettem a pipát. Ettől még nem válik makróvá a tartalom. Legalábbis szerintem csak egy Sub/End Sub pár megléte esetén lesz belőle makró.
És érdekesség, hogy amikor valódi makró esetén találom ezt az üzenetet, akkor a tartalom engedélyezése gombra kattintva legközelebb nem jelenik meg újra. De itt minden megnyitáskor előjött.
Viszont azt hiszen megtaláltam az okot: Rákattintottam az "A rendszer letiltotta a makrókat" szövegre, és a következő jelent meg:
Ezután megkerestem a hivatkozott fájlt, megnyitottam, és ezt találtam:
És valóban, korábban használtam az egyenletszerkesztőt, így az történhetett, hogy amikor visszaraktam a rendszer korábbi állapotát, a rendszer úgy érzékelhette, mintha újrainstalláltam volna a word-öt. Most uninstalláltam a Math Type-ot, és megszűnt a hibaüzenet.
Sziasztok, nem igazán Excel problémám van, de a Word topikban kevesebb esélyem van válaszra.
Szóval az történt, hogy a Windows 10 elkezdett furcsán viselkedni, és biztos, ami biztos, visszaállítottam a rendszert egy 3 héttel ezelőtti állapotra (akkor mentettem utoljára a kiváló Macrium Reflect programmal). Ez sikerült is, de - talán ettől függetlenül? - a Word dokumentumok megnyitásakor közli az Office, hogy letiltotta a makrókat, és kéri, hogy engedélyezzem. A konkrét fájlt nemrég hoztam létre, egy új TV 300 oldalas használati utasításából írtam ki részleteket. Ebben egyértelűen nincs makró:
Az Excel és a Powerpoint fájlokkal nincs ilyen probléma. Az Office egyébként 2019-es, noha a Fájl->fiók kérdésre office 365-nek mondja magát, de nyilván egy tőről fakad a kettő)
Találkoztatok hasonlóval? Egyszerű lenne rákattintani, hogy engedélyezem, de azért óvatos szeretnék lenni. Érdekelne, hogy egyáltalán mitől van a figyelmeztetés.
Egy kérdés amennyiben több állvány van a B oszlop egyik cellájában a táblázatból kiindulva pl. a B62 cellában ez is megtalálható:
"Állvány méretek: 3 x 3 x 8 m 1 x 1 x 3 m"
akkor ugye a makró az első 3x3x8 állványt kiszámolva be tudom írni az eredményt (72), de az 1x1x3 állvány ugye kimarad. Nem gond mert a 40 karakteres kivágás során látom, hogy lesz ott még egy állvány ezért ezt a sort a jegyzettömbben felírom és a munkafolyamat végeztével egy másik cellába kiértékelem a második állvány adatait s akkor megvan. Erre látsz esetleg megoldást?
használata: Feltétel, hogy a B oszlopban legyenek a szöveges adatok.
kijelölsz egy - vagy több cellát abban az oszlopban, ahová az eredményt szeretnéd megkapni.
ezután Fejlesztőeszközök - Makrók - szamol - indítás
A makró végigmegy a kijelölt cellákon.
Amennyiben nem talál Állvány szót az adott sor B oszlopában, akkor üzenetet kapsz.
Amennyiben talál, akkor megjeleníti az Állvány szótól kezdődő 40 karaktert egy form szövegmezőjében. Ebben a mezőben szerkesztheted a szöveget - azaz kitörölheted a nem releváns részeket. A lényeg, hogy csak a három szám
maradjon x -ekkel elválasztva.
Ezután a számold ki feliratú gombra kattintva megjelenik az eredmény a szövegmező alatt. Ha nem jól szerkesztetted a szöveget, hibás eredmény üzenetet kapsz. Ekkor visszamehetsz a szövegmezőbe.
Ha jó az eredmény, akkor a Beíró gombra kattintva beírhatod az adott cellába az eredményt.
A Kilépés gombra kattintva kiléphetsz az adott cella számításából.
A folyamat akkor fejeződik be, ha elfogynak a kijelölt cellák vagy a B oszlopban üres cella van (például a cella összevonások miatt most a 3.4 sor üres)
Szerintem a használat magáért beszél.
Elképzelhető, hogy a fájl vírusvizsgálat miatt csak később tölthető le.
Ha lenne valamilyen szabály - akármilyen bonyolult legyen is - akkor akár képlettel, akár makróval megoldható lenne.
De ha mindenki kénye-kedve szerint írja be a szövegeket, akkor sajnos nem. Hiába veszed fel az eddig megtalált összes verziót, ha utána jön valaki és egy sokadik, eddig nem szereplő változatot talál ki. :(
Csak gratulálni tudok annak, aki ezt így kitalálta!
Szerintem erre nem lehet igazán működő képletet, sőt makrót sem kitalálni. Annyi féle változat van "állványra", hogy egyszerűen nincs rá szabály.
Ezzel a képlettel:
=HAHIBA(SZÖVEG.KERES("Állvány";$B2)>0;HAMIS())
meg tudod állapítani, hogy van-e Állvány szó a szöveggarmadában.
Ezzel pedig:
=KÖZÉP($B2;SZÖVEG.KERES("Állvány";$B2);40)
kivághatod az "Állvány"-nyal kezdődő 40 karaktert, amiből már láthatod, mivel kell számolnod. A második paramétert változtathatod, ha úgy gondolod, hogy keveset látsz a számításhoz.
Mindkét képletet a 2. sorban levő cellába kell beírni és onnan lehúzhatod.
Most nincs magasabb verzióm a 2007-nél, így nem tudom produkálni a villámkitöltést. Ha ez menne, a képen a B oszlopban alkalmaznám, majd a C oszlopban végrehajtanám a cserét.
A névkezelő mutatja a KIÉRTÉKEL funkciót, a D oszlop megadja az eredményt. Már csak összesíteni kell a D oszlop értékeit.
Ezután abba az oszlopba, ahol a szükséges információkat meg szeretnéd kapni, a szöveget tartalmazó sornak megfelelően elég beírni az =eleje, a mellette levő cellába pedig a =véges képletet. Ez húzható lefelé.
Íme a névkezelő kinézete:
Természetesen a $A oszlop jelölés helyett azt az oszlopot használd, amelyikben az adataid vannak.
Feltételeztem, hogy magyar Exceled van.
A két név mit hajt végre: Megkeresi az Eleje ill. a Vége méreteit és végrehajtja a szorzást. Ez utóbbit a KIÉRTÉKEL nevű EXCEL4 -ben használt makró végzi el, ezért előfordulhat, hogy engedélyezned kell a makró futtatást a munkafüzetre.
Remélem sikerül megoldani, ha gondod lenne, csak írj bátran.
Üdv.
Ps. Azért mégiscsak befigyelt egy makró, bár ezt nem nekünk kellett megírni, készen kaptuk.
Egy cellában az adat a teljes munkafolyamatot tartalmazza. Amely adat ebből engem érint az az állvány mérete ami miatt az adatot vagy ha több állvány van az adatokat kell kinyernem s azokkal aza datokkalmár játszhatok.
Konkrét példára levetítve ebből a sok szövegből amely egy cella adata nekem csak a 3 x 3 x 7 (63) adat és a 6 x 3 x 8 azaz 144 adat kell nekem ami az állvány légköbméter értéke.
3RR2 Reaktor kamrában csúszócsőtartók ellenőrzése
A reaktor kamrában lévő 3RR2 reaktor, csúszócsőtartóinak ellenőrzése szükséges utánhúzások elvégzése, zsírzása. Helye üzemi igények alapján. Évi tisztításon csak a végén É-i és D-i.
* * * Állvány méretek: Eleje: 3 x 3 x 7 m Vége: 6 x 3 x 8 m 2 db átépítéssel Közös állvány a 3RR2-vel. Évi tisztításin 2 végén.
Szigetelés bontás és helyreállítása DN100 peremdoboz bontása 40 db 15 m2 50mm gyapot; 15m2 Al fólia; 100/50 egyenes 6fm bontás+szer.
- Megjegyzés: 2 végén kell fel állványozni, Északi és Déli oldal. Üzemi igény csak tájékoztatásul van benne.
A B oszlopban található cellákban az adatok ömlesztve helyezkednek el itt egy példa
3RR2 Reaktor kamrában csúszócsőtartók ellenőrzése
A reaktor kamrában lévő 3RR2 reaktor, csúszócsőtartóinak ellenőrzése szükséges utánhúzások elvégzése, zsírzása. Helye üzemi igények alapján. Évi tisztításon csak a végén É-i és D-i.
* * * Állvány méretek: Eleje: 3 x 3 x 7 m Vége: 6 x 3 x 8 m 2 db átépítéssel Közös állvány a 3RR2-vel. Évi tisztításin 2 végén.
Szigetelés bontás és helyreállítása DN100 peremdoboz bontása 40 db 15 m2 50mm gyapot; 15m2 Al fólia; 100/50 egyenes 6fm bontás+szer.
- Megjegyzés: 2 végén kell fel állványozni, Északi és Déli oldal. Üzemi igény csak tájékoztatásul van benne.
Nos ebből a sok betűből nekem az állvány méreteire lenne csak szükségem azaz 3 x 3 x 7 és 6 x 3 x 8
Azonban mindezt összeszorozva:) azaz légköbméterezve:) tehát 63 144 lenne a kimeneti adatom
Makróban nem nagyon vagyok jártas ezt előre bocsájtom. Ötleteket szívesen fogadok.
Az adatsorok tulajdonságait a következőképpen módosíthatod:
Ráállsz egy adatsorra - jobb egérgomb - adatsor diagramtípusának módosítása.
Akkor a következő képet kapod:
Az alsó részen beállíthatod, hogy melyik adatsor milyen típusú legyen és melyik tengelyhez kapcsolódjon.
Én nem javaslom, hogy a másodlagos tengelyhez is ugyanolyan típusú adatábrázolás legyen, mert akkor nem tud elválni a kétféle megjelenítés. Szerintem használhatóbb, ha pl. a másodlagos tengelyhez vonaldiagram tartozik.
Az oszlopdiagramot egyébként nehéz úgy beállítani, hogy a két tengelyhez tartozó értékek ne takarják el egymást.
Adott egy tábla (1-es kép), ahol pl.:a,b,c.. személyekhez tartoznak százalékos és numerikus értékek is. Ezt a 2-es képen látható módon szeretném megjeleníteni (a képeken látható tábla és grafikon nem összetartózó, de remélem érthető a gondolatmenet), úgy hogy a jobb oldali tengelyen százalék, míg a baloldalin numerikus értékek legyenek és ehhez tartozzanak az oszlopok értelem szerűen. A probléma az, hogy nem tudom csak specifikusan azon oszlopokat kiválasztani (jelen esetben 2,4,6), amiket a secondary axisen szeretnék ábrázolni.
Persze nem tökéletes. Mert például javítani nem tudsz. Ha beírtál egy számot a C, vagy a G oszlopba, majd észreveszed, hogy elírtad, nem tudod javítani. Illetve javíthatod, de akkor a javított cellához tartozó 3 cellát újra beírja a lista végére.
De ennek a kivédéséhez kellett volna egy kicsit vacakolni a sorszám megkeresésével, és a meglévő adat javításával. Erre most nem volt érkezésem:-(
Szia, nem könnyű tőled pontos feladatmeghatározást kapni:-)
Most azt nem írtad neg, hogy amikor a G oszlopba írsz valamit, az E-G tartomány hova kerüljön másolásra az összesítőben. Az E-G oszlopokba, vagy az A-C folytatásába?
A mintafájlodat nézve arra tippelek, hogy az is az A-C-ben akarod látni, mivel az A oszlop 29. sorszáma után jön az E oszlop 30-as sorszámmal.
Köszönöm. Viszont sajnos nem így másolódik az új rész. Ugyanis a G változására az E-F és G oszlopok cellái másolódnak a célterület E oszlopától kezdve (feltéve, hogy nem az A-C tartományba kell ennek is kerülnie):
Off: A fórumnak azt a hibáját ismerjük, beszéltünk is róla, hogy a VBA kód kimásolása uán a behúzások nem másolódnak ide, tekát minden parancs ugyanabban az oszlopban kezdődik. Ezért először kimásolom Wordbe, majd onnan ide, és akkor jó.
Viszont emlékeim szerint régebben nem volt gond azzal, ha innen kimásolok egy programot, akkor az jól kerül ki a VBA kódba. Most ez is változott. Kiderült, hogy minden soremelés duplán kerül a VBA kódba, ebből adódott is tegnap egy hiba a kétsoros parancsnál. Szóval, ha hibátlanul akarom a másolást, akkor az itteni kódot is először Wordbe kell írnom, majd azt kimásolva már jó lesz a VBA kód.
Azt nem írtad, hogy a második csapatot, amit a G oszlopba íráskor akarsz átmásolni, az Összesítés lapon az A, vagy a G oszlopba tegye. Ha a G-be, akkor a már ott lévő adatok alá, vagy abba a sorba, ahol az utolsó másolat az A oszlopban van.
A jelenlegi segítségeddel kapott eseménykezelő a Leltárív munkafüzet C oszlopba beírt változásokat az Összesítés munkafüzetbe egymás alá kimásolta.
A mellékelt fotón sárga színnel kiemeltem, hogy a G oszlopban is lehetnek változások a darabszám beírásakor
Tehát a file szerinti C oszlop tartalmaz változásokat és ekkor az eseménykezelő az előtte A B valamint a változást rögzítő C oszlopokat kimásolja az összesítés munkafüzet utolsó sora utáni szabad sorba.
A G oszlopba viszont ha beírok egy változót akkor annak a sorát azaz a E F oszlopot nem másolja ki
Amikor beilleztem a kódot a Destination:=Worksheets("Összesítés").Range("A" & ujsor) sor piros színre vált tehát ez lehet véleményem szerint a hiba bár nem értek hozzá
Megvan! A bemásolásnál nálad felesleges üres sorok szúródtak be minden sorhoz. Ami nem lenne baj, de a következő két sor közé nem szabad. Ugyanis ez egy sor, ami folytatódik a következőn (ezt jelzi a _ jel az első sor végén végén)
Sziasztok, ha egy képletben egy munkalapra beszúrt táblázat oszlopaira hivatkozok (pl. SZUMHATÖBB(HM_2020[qty];HM_2020[Age];">="&$D1...), akkor azt a képletet csak másolással duplikálhatom, húzó kitöltéssel nem? Ha ezt (ami megegyezik azzal, mintha $a:$a-t írtam volna) eggyel jobbra húzom, a hivatkozás is átugrik a szomszéd oszlopra (azaz HM_2020[gender] = $b:$b). Vagy lehet alkalmazni valahogy a $ jelet? A $HM_2020[age] és a HM_2020$[age] nem műxik.
Ez is egy makró, mégpedig eseménykezelő. Azt nézi, hogy az adott munkalapon végrehajtottál-e egy bizonyos tevékenységet. A jelen esetben akkor lép működésbe, ha a Leltáríven a C oszlopba írsz valamit. Ekkor kiolvassa a beírt adat sorának értékét, majd megkeresi az Összesítés munkalap utolsó sorát, és az azt követő sorba bemásolja a leltárív most módosított sorának A-C celláit.
A bemásolást próbáljuk meg egyelőre fájl küldés nélkül. (Ott a leltáriív bemásolásakor okozhatna gondot az eseménykezelés)
Tehát:
1. Alt+F11-el belépsz a VBA oldalra. A bal oldalon rákattintasz a Munka1 (Leltárív) gombra. A jobb oldali kódterület még üres, de felül azt látod, hogy General, meg Declarations. Esetleg még ott lehet az Option Explicit. Beállításfüggő. (Ha ott van töröld ki, hogy ne legyen majd a másolás után duplán)
2. Kattitnts a jobb oldali kódterületre, és oda másold be a kódot. Akkor ezt a képet fogod látni:
3. Lépj ki a VBA képernyőről, és mentsd a fájlt.
Ettől kezdve dolgozni fog az eseményvezérlés, és másolgatja, amit kell.
"Az alábbi makrót másold be a Leltárív munkalap kódterületére." Nos szégyen nem szégyen itt elakadtam, mert akkor ha jól gondolom akkor ez nem egy macro. Esetleg a fileba beillesztve vissza tudod tölteni? köszönöm!
Az alaptáblázattal van valami. Kimásoltam értékbeillsztéssel a 70 munkalapot egy új munkafüzetbe. Ezen futtatva kb 3mp alatt kész volt. Az alaptáblában majdnem minden mező másik táblákból van behivatkozva, vagy képlettel számolva. Ez megfoghatja ennyire?
Ahol a Leltárív munkalapon a C oszlopban szerepel szám azok a tételek legyenek kigyűjtve az Összesítés munkalapon egymás alatt üres sorok mellőzésével. Köszönöm!
Szia, nem egészen világos a cél munkalap kitöltésének módja. Ezt írod: "A és B oszlop tartalma egy egy új munkalapon jelenjen meg egy sorban egymás alatt A B C adatokkal."
Az nyilvánvaló, hogy az egy sorban helett egy oszlopot akartál írni, mivel így lesznek egymás alatt.
De hogy ez hogyan történjen, az nem derül ki. A forrás munkalap minden sorához (ahol C nem üres) új munkalapot akarsz?
Ha nem, akkor a c$l munkalapon hova kerüljenek az adatok?
A forrás első sora a cél munkalap A1 A2 és A3 cellájába kerül. De hova kell írni a forrás munkalap második sorát, meg a harmadikat stb., amelyikben C nem volt üres?
Mellesleg bármi is a feladat, az üres sorok kihagyása miatt csak makróval tudnám elképzelni a megoldást.
Adott egy táblázat "A" oszloban sorszám, "B" oszlopban terméknév "C" oszlopban pedig a darabszám van feltüntetve
A "C" oszlop tartalma változik a beírt darabszámtól függően. Szeretném, hogy ha a C oszlopban ha beírok egy számot akkor az előtte lévő A és B oszlop tartalma egy egy új munkalapon jelenjen meg egy sorban egymás alatt A B C adatokkal.
A sorok természetesen egymás alatt helyezkednek el de nem minden C sorba fog kerülni adat így az összesítésnél szükségem lenne hogy üres sorok amelyek nem tartalmaznak adatokat ne jelenjenek meg. Köszönöm!
Egy picit tudsz gyorsítani, ha a Worksheets("csv").Cells(sor, oszlop) = helyett Set ws=Worksheets("csv") után ws.cells(sor, oszlop)= hivatkozást használsz (Nem biztos, hogy csak ezen múlik, de talán ez is számíthat valamit).
A következő kis tesztprogram lefuttatása során a 100ezer adat kiírást a Worksheets("Munka2") hivatkozás 6 másodperc alatt futtatja le, a ws. hivatkozásnak 4 mp is elég. Feltételezem, hogy a munkalap nevére való hivatkozás körülményesebb a rendszernek, mint a set paranccsal előre beállított hivatkozás.
Szia, feltételeztem, hogy szar a kód, vagyis fogalmazzunk úgy, hogy működik, de nem jó. Mindenki szerencséjére nem ebből élek, csak mivel én vagyok a cégnél az aki az fkeres-nél kicsit tovább lát excel-ben, engem találnak be ilyen baromságokkal
Szia, nehéz így távolból a megoldásaid pontos ismerete nélkül ötleteket adni.
Engem mindenesetre a következő gondolkodtatott el: "Egy munkalap kb 50 sor, meg 16 oszlop, mégis kb 0,5 perc amíg végigmegy 1 munkalapon. Az lassíthatja le, hogy többször írok ki adatot a csv munkalapra? "
Korábban számolgattam az Excel makró sebességét, és azt találtam, hogy ennél sokkal gyorsabbnak kellene lenni a feldolgozásnak. Nekem az 50 sor 16 oszlop feldolgozása tizedmásodpercnyi időt igényel.
Nem tudom, milyen technikával írsz és másolsz, de a következő mindenképp aggályos: Ha select parancsot használod, illetve az adatok másolásakor a cél munkalapot activate paranccsal választod ki, majd ugyanezzel térsz vissza a forrás munkalapra az sokat ront a hatékényságon.
Talán ha tudnál küldeni egy mintát az adatszerkezetről fiktív adatokkal, és a cél munkalap formátumáról, talán előrébb tudnánk lépni.
Ilyenkor támad sírhatnékom, amikor ilyen tankönyvi adatbázisokat Excelben próbálnak megoldani. Mintha azt kérdezné valaki, hogy lehet a kis Polskival optimálisan elszállítani pár tonna téglát egy építkezésre, és miért olyan lassú padlógázzal.
"És van 25 táblázat 2-3 főtől 100-ig főig." És még nem lázadtál fel?
Ötlet? Tegyétek adatbázisba. Abban szívesen segítek. Persze nem kommunista műszakban, ahhoz túl nagy falat. Tudom, a főnökség ukázba adta, hogy Excelben kell lennie, mert már 19 éve is abba volt, és azt ismerik. Zökkentsd ki őket.
Igazából nem konkrét megoldást szeretnék kérni, csak ötletet. Alapvetően nagyon elvétve szoktam makrókat írni, azok is általában csak kisebb feladatokat hajtanak végre.
Most kaptam egy olyan feladatot, hogy egy excel-ben vezetett munkaidőnyilvántartásból kell a bérelszámolási rendszer felé csv file-t előállítani. Minden területnek van egy excel file-ja, azokban egy munkalap egy dolgozó, és a munkalap soraiban vannak a napok (érkezés, távozás, vagy távollét ok). Vannak adatok, amiket csak összesítve kell átadni (ledolgozott idő, túlóra, stb), van amit -tól -ig bontásban (távollétek)
Írtam egy makrót, ami igazából működik, az adatokat megfelelően szedi össze. A problémám, hogy rohadt lassan fut le. Egy 70 fős munkafüzet 1 i7-es procijú gépen 1/2 óra amíg végigmegy az összes munkalapon.. És van 25 táblázat 2-3 főtől 100-ig főig.
A program igazából annyit csinál, hogy amikor talál adatot, amit ki kell írni a csv-be, akkor egy csv nevű munkalapra kiírom a megfelelő adatokat (1 sor 6-7 oszlop, az import file struktúrája kötött). Először összeszedem az összesítő sorokból ami nem kell részeletezve, utána egy for ciklussal végigmegyek a napokon egyenként, megnézem mettől-meddig tartott a távollét, és amikor vége, akkor kiírom az adatot a csv munkalapra. Pl. 12.01-12.06 között szabadságon volt, akkor számolom, hogy hány órát volt összesen szabadságon, és 7-n, amikor már nem volt szabadságon, akkor írok egy sort a csv-be, hogy 1-6 között x dolgozó y kóddal 40 órát volt szabadságon. Egy munkalap kb 50 sor, meg 16 oszlop, mégis kb 0,5 perc amíg végigmegy 1 munkalapon. Az lassíthatja le, hogy többször írok ki adatot a csv munkalapra? Lehet, hogy jobb lenne egy tömbbe tenni az adatokat, és amikor végzett egy munkalappal, akkor egyben kiírni az egészet? Vagy mi egyéb oka lehet annak, hogy ilyen lassan fut le?
Ha esetleg van valami ötlet, azt szívesen veszem. Köszönöm előre is!
Most, hogy tudjuk rögzíteni az első sort és az első oszlopot, nézzük meg azt is, amikor egyszerre szeretném rögzíteni a sort és oszlopot.
Itt is nézzünk meg két példát, elsőben csak egy sort és egy oszlopot szeretnénk rögzíteni. Ehhez az a nagyon fontos, hogy azt a cellát jelöld ki, abba kattints bele, amelyiktől BALRA és amelyik FÖLÖTT, rögzíteni szeretnéd az oszlopot és a sort.
A Sor és oszlop rögzítése1 munkalapon tehát a B2-es cellába kell előbb kattintani. Vigyázz, hogy ne duplán kattints bele, úgy szerkesztőmódba lépsz és nem aktív a panelek rögzítése gomb
Belefutottam egy kérdésbe, és erre szeretnék választ.
Van egy táblázat, amiben az az "A" "B" oszlopokat úgy szeretném látni, hogy amikor vízszintesen scrollozok akkor ne tűnjön el bal oldalon a sok cellával egyetemben, hanem egyfajta fix sor (sorok)-ként maradjon helyben, és a hozzátartozó sorok meg szépen futhassanak jobbra-balra.
Gondolom ha hasonlót szeretnék pl. a vízszintes sorokkal akkor hasonló beállításokat kell eszközölni majd, de remélem az első kérdés válaszában erre is lesz megoldás.
Gondolom ez nem egy nagy tudomány, de én sosem csináltam ilyet, és azt sem tudom mihez nyúljak ez okán.
Hogy lehet olyan cellák számát összeszámolni, melyek nem üresek (és nem számot tartalmaznak)?
Pl. sportolók, akik adott országból érkeznek, szűrni szeretném, hogy mondjuk csak Magyarországról érkezettek és hányan vannak összesítve, mikor leszűröm országra őket...
Annyit vizsgáltam, hogy kizárt, hogy hibás. Részlegesen működik is, és nem csak a terület elejéről vagy végéről talál meg adatokat, hanem mindenfelől. És magához tér, ha kiveszem a cellák (jó) sorszámait ($A$2:$E$38776 -> $A:$E).
Ha majd nagyon ráérek, írok egy bug reportot. Max. megírják, h mit csesztem el :)
Pár éve nekem is voltak gondjaim az Excel képletekben a szövegként tárolt számokkal. Azt vettem akkor észre hogy bizonyos karakterszám után már nem tett különbséget a két cella között, hiába volt szövegként tárolva. (Lehet, hogy a képlet kiértékelésekor a háttérben átalakította számmá és kerekítette.) Akkor úgy oldottam meg a problémát hogy egy segédoszlopban összefűztem minden cella értékét egy szöveg karaktert például "a" karakterrel a számok elé. Ekkortól már helyesen szövegként kezelte az összes cellát.
Lehet, hogy teljes tévút lesz, amit írok, de 7 évvel ezelőtt volt egy olyan problémám, ami valamennyi analógiát mutathat ezzel a problémával. Igaz, ott üres cellákkal történt az, hogy két különböző módon létrejött üres cella látszólag mindenben megegyezett, de mégsem volt azonos. Fferi ezeket szellemesen "Elfajzott üres celláknak" nevezte.
Amit rokonnak gondolok az itteni problémával, az a jelenség, hogy látszólag azonos cellák a valóságban mégsem azonosak.
A probléma felvetéstől a megoldásig terjedő beszélgetés a 24372-24387 számú hozzászólások közt olvasható. (A beszélgetést a laponkénti bejegyzések számát 500-ra állítva a 22. lapon lehet megtalálni)
Hátha hasonló technikákkal megoldható ez a probléma is.
Értettem, hogy Delilával mit írtatok, csak azt nem, hogy miért. Tudom, hogy szövegként tárolt számaim vannak, mindegyik az és csak olyan van, ezért nem tiszta, hogy minek teszteljem. Elnéztem valamit?
Újabb Excelem nincs, de a régiekkel mindig települt egy szótár is szintén Excelben, ami a függvénynevek fordítását tartalmazza. A többség egyébként logikus fordítás, csak néhány idióta van közte. Meg néha átneveznek egyet, és magyarul se érti az ember.
Természetesen visszaolvastam, illetve igazából 98-óta vagyok/voltam Internetton, csak persze más nickkel.
Az igazi gondom az volt a visszaolvasásnál, hogy csak most döbbentem rá, hogy Magyarországon az Office függvényeinek neve magyarra van fordítva. Ezzel két gond van: nem értem (közel 30 éve nem élek Magyarországon), másrészt eléggé leszűkíti a felhasználók számára az internetes keresés, és segítség lehetőségét.
Végzettségemet és foglalkozásomat tekintve informatikus vagyok, progmatot végeztem. Az Excelt elég jól ismerem, de messze nem tekintem magam gurunak. Viszont tényleg szívesen segítek, ha tudok.
Amit korábban írtam a konkrét példával kapcsolatban, az a számítási sebességgel (performance) kapcsolatos problémákhoz kötődött. Ezzel sokat foglalkoztam munkámból adódóan. Rengeteget számt, hogy milyen függvényeket hogy használsz, és sok trükk, vagy technika van arra, hogy javíts a futáson. De ehhez látnom kell a konkrét táblázatokat az összes függvénnyel együtt. Sokszor századára, vagy ezredére lehet csökkenteni a számítás időt a helyesen megválasztott technikával.
Egyéb hozzászólásaidból úgy látom, hogy többnyire nem elhamarkodottak a hozzászólásaid. Itt viszont az lett, amelyikre reagáltam. Ha egy kicsit olvasgatod az eddigi hozzászólásokat (na nem kell mind a 35 ezret, de mondjuk vagy ötvenet), látni fogod, nem az Excel alapjait kell elmagyarázni az itt fórumozók többségének.
De légy üdvözölve, és ha konkrét problémákra konkrét megoldásokat javasolsz, azt biztos értékelni fogják a kérdezők.
Igen, de arra gondoltam, hogy az, hogy valami lassu az nem eleg konkret. Ha meg lehet osztani a tablazatot, akkor at tudom nezni, hogy hol lehet javitai a sebessegen. Nagyon sok szamitast meg lehet oldani kulonbozo fuggvenyek felhasznalasaval, es nagyon nagy kulonbseg lehet koztuk futasi idoben.
Nem, beépített funkció egyből xls-be (mint kiderült, 5.0-ba) exportál.
Közben megoldódott. Ha egész oszlopokra hivatkozok, akkor működik: átírtam a $A$2:$E$38776 hivatkozást $a:$e-re, és minden OK (38776-ban van az utolsó adat). Ha visszaírom, megint nem megy.
Ööö, ez szövegként tárolt számoknál tutira hamis, nem lehet sztringeken matekozni, nem?
Az, hogy szövegként tárolt számok, sajnos normális, mert ezek leltári azonosítók. Elindultak 00000001-től és most tartanak kb. 0036000-nél. Ettől még az fkeresnek működnie kellene, mert mindkét táblában ugyanazok az adatok szerepelnek, ugyanúgy szövegként tárolva. Ugyanabból a szoftverből is származnak, csak annak nincs szabad riportoló felülete, nem lehet akármilyen jelentést összeállítani.
Help! Két Excel munkafüzet között kellene adatot párosítanom az fkeres használatával. A kapcsolatot egy olyan oszlop jelenti, amiben szövegként tárolt számok vannak, 00000001-től felfelé. A gond az, hogy rengeteget nem tud összepárosítani (legalább 25%-ot).
Amit csekkoltam:
Kikerestem manuálisan, ott van az adat a második táblában, az elsőben mégis #HIÁNYZIK-ot kapok;
a hivatkozás OK, a területe megfelelő, $ jelekkel kiegészített, a keresési terület a képletek másolásával nem csúszik el;
ha manuálisan kikeresett adatpárra írok egy egyszerű debuggert, pl. (szándékosan egyszerűsítve): HA(a1=b1;igaz;hamis), az igaz értéket ad vissza, tehát az Excel szerint is megegyezik a két adat;
mindkettő könyvelőprogramból származó XLS 97 formátumú export, így nincs xls/xlsx összeveszés a sorok számán (meg amúgy sem teljes oszlopokat jelöltem ki).
Excel 2019-ben dolgozok. GDPR-os adatok, nem oszthatom meg. Van valami bugja az fkeresnek, amire nem gondoltam? Azért gondolom bugnak, mert 16 megvan, aztán 32 nincs, aztán 48 OK, aztán 24 nincs meg (tovább nem néztem), és ez véletlennek túl bináris számsor.
Nem szabad elfelejteni, hogy az Excel nem egy adatbázis-kezelő program és egy bizonyos adatmennyiség fölött, illetve összetett számításoknál érdemes elgondolkozni egyéb megoldásokon, mint pl. Access, vagy legalább az Excel-en belül VB használata. Egy jól megírt code percekről, másodpercekre rövidítheti a futási időt.
Azt is fontos megérteni, hogy programozás szempontjából mi áll egy-egy függvény mögött. Mi drága és mi kevésbé futási idő szempontjából.
Ha valakinek kell konkrét segítség, akkor szóljatok.
Kedves Delila10! Segítséget szeretnék kérni, mivel pont ilyen problémám van nekem is az excelbe íráskor. Táblázatom DD oszlopig és jelenleg 30 000 sorig tart. A sorok száma egyre csak bővül. Nekem is folyton számol. Így minden egyre lassabb. Az excel mélyebb bugyraihoz nem értek. Mit és hol lehetne alkalmazni? A segítséget előre is köszönöm. Üdv.
ja mondom én ezt - aki szintén egyből sql-hez (postgre, ms, pl, my) nyúl... szóval értem én... sok szempontból barátságosabb az excel - főleg, hogy bármely sql-hez képes kapcsolódni drivereken keresztül. Csak ügyfélszinten kell mögé már egy adatbázisszerver, ami már sok kérdést felvet az ügyfélnél. (Igaz, ami igaz, a PQ használata is felvet kérdéseket az ügyfeleknél...).
Nem kapcsolgatok. Sikerült kikísérletezni egy módszert.
Számolom a bevitt sorokat (váltakozva 2 és 9 között van az egyszerre bevitt képletek sorszáma, de minden sorba egységesen 281 db kerül).
Amint már írtam, Select Case utasítást alkalmazok. A bevitt sorok arányában a már kiszámoltakat értékként önmagukra másolom. Nem az utolsó sorig, hagyok időt a számításra. Próbálgattam különféle növekményekkel, végül kijött egy jó változat. Látványosan felgyorsult.
Eredetileg az összes sor bevitele után akartam az értékeket beilleszteni.
Gondolom ki(be)kapcsoltad: Application.Calculation = xlCalculationManual de a végén a számolás lassú.
A képleteket is át lehet értelmezni, ott is lehet felesleges munkavégzés... Mondjuk nálad ezt kizárnám, de hát nem tudhatom...
Én szeretek olyan módszereket használni egyébként (képlet, vagy vba, mindegy) amely egyszerre dolgozik halmazokkal. Gyors, mint az állat. Nyilván ez nem mindig lehetséges.
Eleve tömören írtam, üres sorok, megjegyzések nincsenek benne. Viszont dugig van képletek beírásával.
Azt vettem észre, hogy ilyen, képletekkel agyon terhelt cellákban időbe került, míg kiszámítja az értéket. Viszont a sok számítás nagyon lelassítja a futást.
Most azt próbálom ki, hogy a beírandó sor növelésekor beteszek egy (vagy több) feltételt. Pl. ha meghaladta az 1000 sort, az első 500-at értékké alakítom. 1500-nál további 500-at "szabadítok fel". Sok ezer sorról és bennük számtalan (ill. számos, 281 db) képletről van szó.
Nem lehet több egy eljárás 64kb-nál. Nekem volt már ilyen, szét kellet volna szedni több eljárásra, de azt nem akartam. Helyette optimalizáltam, így sokkal kevesebb szöveg lett benne. Aztán jót lett. Az enyém sokkal nem haladhatta túl a 64kb-ot, mert pár eljárást írtam át, hogy tömörebb kódja legyen és elég lett...
Szia, A következő problémát látom: Egy általad elképzelt koncepciót állítottál fel a saját gondolataiddal. A gondolatok és a folyamatok biztosan jók ezt nem kérdőjelezhetem meg - azokat Te érted. De a folyamatok leképezése (a koncepció) gyökereiben hibás, nélkülözi a szükséges rendszerszemléletet - ebben biztos vagyok.
Őszintén szólva, amit leírtál, csak nyomokban értelmezhető - gondolatolvasónak kéne lenni hozzá, hogy megértsem, mire is gondolhattál akkor amikor azt írtad, hogy... .... ....
Ez számomra így nem vállalható, az én elképzelésem merőben más lenne, mint a skicc, amit Te elküldtél. Viszont a folyamatok megértéséhez kellenek az alapok. Mi ez, mire használják, milyen cégről van szó, a mi a célja ennek az egésznek, céges kultúra ismerete stb... Tehát nulláról nekifutni.
Várj még egy kicsit, hátha más is bejelentkezik. Talán fogékonyabb lesz rá az illető.
2.
Egyébként azt gondolom, hogy makró nem kell hozzá feltétlenül. pl 16. sor: ezt csak te érted, amit írsz, nincsenek egy kívülálló számára kifejtve a gondolatok. és ugyanezt lehet elmondani a többi sorról is. Ebből a leírásból nem lehet leképezni a szükséges eredményt, kevés az ismeret.
robbantomester <robbantomester@freemail.hu> írta: >Szia, >Összességében nincs egy kerek képem az egészről 5x átolvasás után sem. Részeket értek, de nem áll össze a kép, hogy tulajdonképpen mit is akarsz.
Javaslom, hogy ezt a vitát hagyjuk abba, nem való egy ilyen szakmai fórumra.
Inkább arra válaszoljatok, hogy találkoztatok-e már hasonló üzenettel.
Ez egy rém hosszú, 1.081 soros makró indításakor bújt elő. Míg ketté nem választottam (másik modulba a felét), nem volt hajlandó elindulni. Eddig nem tudtam, hogy van tarifa határ.
Köszönöm a mélylélektani elemzést. Bár nincs haszna, de őrizni fogom a dev/nullban.
Én is sok mindenkinek segítek ingyen, aki megérdemli. A gunyoros reagálást viszont szintén ki kell érdemelni, te megtetted. Hogy mi van a fejemben, arról annyi fogalmad sincs, mint Győzikének a Schrödinger-egyenletről.
Itt néhányan ingyen ajánlják fel szakértelmüket, ami sok pozitívumot takar. Én azt jeleztem, hogy egy köszönetnél többre is lehet számítani.
A gunyoros reagálásod arra utal, hogy a pozitívumok helyett valami más van a fejedben.
Az utolsó mondatod alapján nálad annyi pozitívumot látok, hogy azért kapsz megrendeléseket, mert az ötletek megvalósíthatóságán gondolkodsz és nem a megrendelőt mocskolod.
Elküldtem neked az elképzelésemet, mire olyan mocskolódást küldtél vissza, hogyha személyesen teszed, akkora pofont kapsz, hogy a fal adja a másikat.
Persze, tudom, a hozzád hasonlók nem vesznek könyvet a kezükbe és a középiskolai kötelező olvasmányokat is csak filmen nézik meg és Rousseau-ról is azt hiszik, hogy szovjet agitátor volt, de ez más lapra tartozik.
Számomra az emberi módon kommunikálás az alapvető.
Tényleg okoskodás nélkül - de ez a helyzet. De tény, hogy mindent meg lehet vele csinálni, hisz amikor a vba-t integrálták a régi makrólapos függvények helyett, pont ez volt a cél. Próbáltam a régi nokiás kígyós játékot, tetrist, ami szépen fut excelben... meg még ki tudja mik vannak :)
Azért van hátránya. Pl más biztonsági beállítások vannak és emiatt nem tudja futtatni a célfelhasználó - aki amúgy nem ért az excelhez, vagy csak nagyon alap ("kockásfüzet") szinten.
Arról nem is beszélve, hogy a legtöbbször felesleges - "csak ágyúval verébre". Mert megoldható a beépített függvényekkel, csak sokan nem ismerik az ezekben rejlő lehetőségeket és azt hiszik, hogy makró kell.
Én nem szeretem az ilyet. De ez szubjektív, más máshogy gondolja.
Szóval cikizgeted a segítőket, pedig igazán vonzó ajánlatot tettél ezzel a későbbi ellentételezéssel, nem is tudom, miért nem rohannak csapatostul a segíteni vágyók erre az összeállításra.
Az egyébként nem úgy van, hogy a programozótól elvárod a saját fogalmaid ismeretét, hanem úgy, hogy elmondod, pontosan mire van szükséged. Én most egy ennél komolyabb munkában vagyok, és még árajánlatot sem adtam, amíg meg nem értem a megbízó üzleti folyamatait És bizony nekik is dolgozniuk kell, hogy megértsem.
Keresek valakit, aki látott már egy sima bevételi-kiadási nyilvántartást, és excel makro programozással tud írni egy olyan változatot, amikor az adatokat külön munkalapokba (mindenhol bevétel, kiadás és egyenleg) kell beírni.
Azaz az egyik munkalapon van a pénz, a többin a költség, bevétel, stb. kb. 10 munkalap.
Valamint nem menekül el, mint a kolléga, amikor megtudja, hogy "nyitó tétel" kell az első sorba. ;)
Akkor tedd fel a mintát egy felhő alapú tárhelyre (pl. data.hu), hátha lesz valakinek ötlete, hogy merre indulj el. Bár sok esélyt nem adok neki, ismerve a korábbi szoftveres igényeidet, de azért hátha.
igazad lehet, mert egyelőre kimentettem a fájlt felhőből gépre, és itt gond nélkül megy. Egyelőre az a megoldás, hogy visszarakom felhőbe (mert muszáj, hogy ott legyen) és csak egy eszközre szinkronizálom és ott nyitom meg és szerkesztem. Próbáltam még az Excel böngészőből elérhető Online verzióját is, de itt pedig simán sérültnek tekintette a fájlt és meg sem nyitotta.
Nekem ez inkább szinkronizálási problémának gyanús, mintsem Excelnek.
Én a nyáron kipróbáltam a Onedrive-ot a próbaidős office 365 környezetben és egy makró program futtatásánál beleütköztem szinkronizálási gondokba (igaz, a makró létrehozott fájlokat, írt bele, egyeseket később törölt is, de - az egyébként jól működő - program rendszeresen elakadt. Akkor egy figyelmeztető üzenet kíséretében letiltottam, hogy Onedrive alól lehessen használni)
Mi lenne, ha a fájlt szinkronizálás nélkül tennéd több helyről elérhetővé Google Drive, vagy Dropbox stb. használatával, de szinkronizálás nélkül?
Segítséget szeretnék kérni. Van egy táblázat, amiben termékek szerepelnek, de a termékek kategóriáját csak számok jelölik. Egy másik táblázatba megvan, hogy melyik kategóriának mi a száma. Azt szeretném megoldani, hogy ha D oszlopba beírok egy számot, akkor a B oszlopból tegye mellé az E oszlopba a megfelelő kategória nevét. Lehet bonyolultam írtam le, a kép talán segít.
Az alábbi probléma megoldásában kérnék segítséget:
van egy Excel fájlom, amit folyamatosan szerkesztek, de most belefutottam abba, hogy megnyitáskor jelzi, hogy sérült a fájl és felajánlja, hogy kijavítja ezt a hibát: /xl/worksheets/sheet1.xml
Rányomok az igenre, megnyitja, a fájlnév után kiírja, hogy {Javított} és nem engedi menteni, csak mentés másként lehet. A javítás ebből áll: Eltávolított funkció: Nézet innen: /xl/worksheets/sheet1.xml
Ha elmentem másként, akkor az új fájlt megnyitva megint előjön ez a hibaüzenet. Tehát úgy néz ki, hogy mindig mentés máskénttel tudom csak menteni, ezt pedig nagyon nem szeretném.
A fájl felhőben van, több eszközről kell használnom, van benne egy adattábla képletekkel, függvényekkel, és van számos munkafüzet grafikonokkal és kimutatásokkal. Makró nincs a fájlban.
"2. Munkalapon csináltam egy listázást a napok alapján és szeretném,hogy amikor a listából kiválasztom a napot (0-31) akkor mellé kiírja hogy ez pontosan milyen nap(Hétfő-Vasárnap)"
Ezzel "csak" annyi a baj, hogy önmagában a napszám alapján nem lehet pontosan meghatározni, hogy név szerint az milyen nap, hiszen évről - évre - hónapról - hónapra változik a hónap kezdeti napja.
Tehát ehhez pontos dátum szükséges, abból pedig az Excel már "magától" megmutatja, mi a nap neve. Lásd előző hozzászólások.
(A pontos dátumot több cellából is összerakhatod, egy az év, egy másik a hónap lista és a harmadik a napok listája.)
Ha ezt gyakorlásul csinálod, akkor vagy a VKERES() függvény lesz a barátod, vagy az INDEX() és a HOL.VAN() egymásba ágyazva. Azt nem csodálom, hogy a HA() függvénnyel nem ment.
Ha tényleg szükséged van rá, akkor bízd az Excelre, kell hozzá egy évszám is, és meg tudja mondani a napot, akár formázással is, vagy a HÉT.NAPJA() függvénnyel.
2. sorban a hozzájuk tartozó napok (Hétfő-Vasárnap)
2. Munkalapon csináltam egy listázást a napok alapján és szeretném,hogy amikor a listából kiválasztom a napot (0-31) akkor mellé kiírja hogy ez pontosan milyen nap(Hétfő-Vasárnap)
Tudnátok segíteni milyen képletet használjak?
(HA függvénnyel próbálkoztam de nem akart összejönni!)
Például miért ne nyúlhatna át több hónapon is a bérleti idő ;)
Amúgy én a helyedben nem tólig dátumokkal dolgoznék, hanem egyetlen mátrixszal ez kifejezhető. (Az intervallumokból történő megoldás alapja egyébként is egy ilyen mátrixon nyugszik vagy így - vagy úgy.)
A mátrix így nézne ki:
"A2"-től oszlopban naponta a naptári napok
B1. sorban a gépek
belül metszetekben pedig a bérleti díj minden naphoz.
Dolgozz inkább egy ilyenben.
Vagy ha adottak az intervallumok, akkor egy ilyen mátrixot fel lehet tölteni szerintem képletekkel is.
Persze van több megoldás is, biztosan ki lehet matekozni szebben is...
Csak hangosan gondolkodni tudok, mert nincs itthon olyan verzióm, ami tudja a hónapok napjainak a számát, de az újabb verziókban van ilyen függvény.
Nyilván össze kell adni valamit soronként. Ez a valami feltételes kifejezésekből épül fel: ha a keresett hónap azonos a kezdettel és a véggel is, akkor az eltelt napok száma, ha a kettő között van nyílt intervallumban, akkor a teljes hónap, ha egyenlő a kezdőhónappal, de kisebb a végnél, akkor a hátralevő napok száma + 1 (kezdőnap included), ugyanígy a negyedik eset, ha csak a véggel egyenlő. A feltételes kifejezéseket át lehet alakítani 1 és 0 értékekké, azaz egy aritmetikai kifejezésben automatikusan ezzé válnak, tehát lehet velük szorozni. Mondjuk a bérleti díjat.
Ha elég nagyra hízik ez a táblázat, mert végtelenségig írsz bele, akkor ez bitang lassú lesz, cserébe a képletet összerakni is nehéz.
Sziasztok, a segítségeteket szeretném kérni a következőben.
Gépek bérbeadásával kapcsolatban a következőt szeretném megcsinálni Excel-ben:
"A" oszlop: bérlés kezdeti dátuma
"B" oszlop: bérlés végének dátuma
"C" oszlop: napi bérleti díj
Ezek az adatok állnak rendelkezésre!
Egy másik lapfülön "A" oszlopban végig az év+hónapok (2021 január, 2021 február stb.) és "B" oszlopba szeretném mellé az havi összesített bevételt.
Ehhez valami olyan függvény kéne nekem ami figyeli a bérlés dátumát, és a bérleti díjat beszorozva a napok számával felviszi az aktuális hónaphoz.
Csak ugye ahol átnyúlás van a dátumok között, pl. egy bérlés január 30-tól február 10-ig, ott úgy kéne hogy eljárjon, hogy januárhoz 2 napot számol, februárhoz 10-et.
Szeretném a segítségeteket kérni, diagrammal kapcsolatban.
A mellékelt képen láthatjátok az adatokat és a diát. Jelenleg a dia oszlopait manuálisan színeztem át, attól függően, hogy határérték alatt vagy felett van a tény érték. De van lehetőség arra, hogy ez automatikus legyen?
Szeretném a segítségeteket kérni, diagrammal kapcsolatban.
A mellékelt képen láthatjátok az adatokat és a diát. Jelenleg a dia oszlopait manuálisan színeztem át, attól függően, hogy határérték alatt vagy felett van a tény érték. De van lehetőség arra, hogy ez automatikus legyen?
Sziasztok! Lehet, hogy nagyon láma kérdés, előre is bocs! Leltározunk. Alapesetben a készlet mennyiség cellában 0 van.Szeretném ha automatán változna a szöveg vagy a háttér színe amikor beírom a tényleges mennyiséget, hogy lássam azzal már foglalkoztam. Hogyan oldható meg a legegyszerűbben?
"Az ok szerintem nem az excelben van, hanem a konvertálóprogramban."
Ebben is igazad van.
Off: A konvertálást egyébként az Adobe saját konvertálóját is mesze felülmúló
ABBYY FineReader 14 programmal csináltam. És ez nem csak a konvertálásban használható kitűnően, de például Word dokumentumok összevetését is nagyságrenddel használhatóbban végzi, mint a Word saját összehasonlítója. És az OCR funkciót is ezzel tudom a legjobban megoldani.
Az, hogy a konvertálásnál ez az apróság becsúszott, az nem kissebbíti a pozitév véleményemet.
"Én amúgy ilyenekkel nem foglalkoznék... felesleges körök és idő."
Tulajdonképpen igazad van. De amilyen békés természetű vagyok az életben, annyira agresszív vagyok, amikor a számítógépen valami nem úgy viselkedik, ahogy azt megszoktam, és elvárom.
Az az észrevételem, hogy ha az oszlopszélességet akár csak egy századdal is megváltoztatod - akkor már átmásolja.
Az ok szerintem nem az excelben van, hanem a konvertálóprogramban.
Azt gondolom, hogy a konvertálóprogram bár szemmel láthatólag átadja az oszlopszélességet - de az excel számára az "fizikailag" láthatatlan marad valamiért.
Ha megváltoztatod az oszlopszélességet, akkor már rögzül az excel számára is. Ezért már működik a szélességgel együtt is a munkalapmásolás.
Én amúgy ilyenekkel nem foglalkoznék... felesleges körök és idő. Nyilván ezt most épp megcáfoltam, mert kíváncsi lettem én is...:)
Letöltöttem egy PDF táblázatot az internetről, átalakítottam Excelbe, majd az egyetlen munkalapról szerettem volna egy másolatot készíteni.
Hozzá vagyok szokva, hogy a másolat készítés a teljes formázással együt viszi át az eredeti munkalapot a másolatba.
Itt viszont nem ez történt. A karakter formátumok rendben levőnek látszanak, de az oszlopszélességek nem. Kipróbáltam 2010-es és 2019-es verzióval, és ugyanaz a jelenség, tehát nem verziófüggő.
Mi lehet az ok? A fájlt feltettem a drájvra: https://drive.google.com/file/d/187Gar7YkSXB-qX5NGTcGUvULs-WDTXX6/view?usp=sharing (egy E-szám táblázatól van szó. Ebből akarok párat kigyűjteni az olyanoknak, akik azt hiszik, hogy létezik "e-szám mentes" termék. Megkérdezni, higy mit csinál, amikor C-vitamint veszik, vagy karamellt, stb.)
Amúgy az okra csak érdekességként vagyok kíváncsi. A Google.Docs meg tudta csinnálni a másolatot hibátlanul.
Sziasztok! Egy egyszerű függvényhez kérnék segítséget, de sajnos egyáltalán nem értek hozzá. Csak annyiról volna szó, hogy ha B1 cella ki van töltve, akkor az A1 cellába beírja, hogy EGÉSZ. Persze, ha B1 cella nincs kitöltve, akkor az a bizonyos 0 ne jelenjen meg. Köszönöm.
Most olvastam egy megoldási lehetőséget, de az sem jött be. Aszerint a textboxot tegyem fókuszba, mielőtt beleírnék. Első két indítás jó volt, aztán ugyanúgy nem ment.
Memória problémák is lehetnek. De szerintem a formokat kezelő dll lehet a bűnös (64 bites Win10-nél MS Forms 2.0 Object Library (FM20.DLL).
Nézd meg légy szíves, hogy mindkét gépen ugyanaz a verzió van-e a formkezelőből.
A MS valamikor 2015-ben kicserélte a formkezelőt, mivel nem volt kompatibilis az újabb Excel verziókkal valami miatt. Most nem találom a hivatalosan kiadott javítási menetet sajnos. Erre a keresésre: the object is detached from its clients vba
Ezt eddig úgy oldottam meg, hogy megnyitáskor egy Start makró a fenti példának megfelelő With-tel végigment a lapokon, kitöltötte magát, majd megjelent.
Egy ideje időnként megnyitáskor szó nélkül bezáródott, még debugot sem engedett.
Akkor azt gondoltam, hogy szétszedtem a With Multipage részeit, és a lapokra tettem rá egyenként. Vagyis a Startban csak egy lapnak hagytam meg a kitöltését, a többi a lapra való kattintással aktíváltam....volna :-(
Ám itt időnként újra csak behalt. "A meghívott objektum levált az ügyfeleiről" és ezt a hibaüzenetet adta. A legkülönféle soroknál állt meg. Az egyik lapon a dátumnál, egy másiknál a felhasználónál, egy harmadiknál, ha a munkafüzetből kellett kiolvasni valamit. De van olyan lap, aminek a listboxa egy szűrést követően hiba nélkül kitöltődik.
A hibajelenség nem teljesen konzekvens. Egy megnyitásnál jó, majd egy következőnél nem. Illetve azt figyeltem meg, hogy ha megnyitom az Excelt teljesen, ÉS belépek a VBA felületére, rákattintok duplán a userformra, majd ezután futtatom, akkor minden jó. Próbáltam a load és a show lehetőségeket kombinálni, cserélni, de semmi. Már levettem teljesen a Before Close-t, hogy ne az legyen, hogy a bezárás kavar bele valamit, illetve változtatja meg a megnyitásra, de semmit sem találok.
Ami végképp őrület, hogy a saját laptompomon (Win10, Office2019, 32 bit) hiba nélkül fut, a cégesen (Win10, Office2016, 32 bit) produkálja a fenti hibát. A VBA References között mindkét gépen ugyanazok vannak pipálva. Egy korábbi "iktatóra" tettem plusz funkciókat, és január 1-jével terveztük beállítani. Az extra dolgok remekül működnek, ez a fránya megnyitás vacakol.
Megint egy áthidaló megoldás lett, de azért leírom, hátha valakinek jól jönne.
Szóval a Microsoft DTPickers az "Additionals controls"-ok között nem volt, és az ezt tartalmazó mscomct2.ocx fájlt nem lehetett telepíteni.
Így Textboxból, Spinbuttonból és egy CommandButtonból összeraktam egy ilyet (illetve az egész formra 10 db-ot).
A form indításakor Tb=CDate(Now)
A Spinbuttonra:
Private Sub SB_SpinUp() Tb.Text = Format(CDate(Tb.Text) + CDate(Tb.SmallChange), "yyyy/mm/dd.") End Sub
Private Sub SB_SpinDown() Tb.Text = Format(CDate(Tb.Text) - CDate(Tb.SmallChange), "yyyy/mm/dd.") End Sub
A MA gombra (ha vissza kellene egyszerűen lépni) szintén -> Tb=CDate(Now)
Érdekes volt, hogy ha a formátumot úgy adtam meg, hogy: "yyyy.mm.dd", akkor nem működött, viszont perjelekkel beírva a pontokkal rendelkező formátumot írja be, illetve kezeli.
Mivel jellemzően csak pár napot kell lépdelni, így nem hiányzik a teljesen lenyíló naptáras megjelenítés.
A céges gépeken eddig Office 2013, majd 2016 volt. Ezeken remekül működtek a korábbi években készített formok, amik többek között DTPickerseket is tartalmaztak.
Pár hete az egyik kolléga új gépet kapott, amin már Office 2019 volt, és az ezzel megnyitott korábbi formokon a DTPickerseket nem jeleníti meg, illetve eltávolította azokat, mert ezek után korábbi Office-szal megnyitás esetén már nincsenek ott azok az objektumok.
Nálam az itthoni gépen szintén 2019-es van, azon hiba nélkül működik.
Időpontok (túlórák) összegzésével birkózunk. Adott hónap/személy - majd szumma egész év. Ezt szumhatöbb függvénnyel összesítem.
Az világos, hogy ha 24 óránál többet szeretnék összegezni, akkor a "[ó]:pp" formátumot kell választani.
Így a cellákban jól összegzi az órákat.
A cél, hogy ezek után egy megnyitott form textboxa vegye át ezeket az összegzett óraszámokat, és csak jelenítse meg. Ám - annak ellenére, hogy a kiolvasott cellában jól jelenik meg az óra formátum - ide már csak a 24 órák feletti óraszámokat írja be.
Ha átírom a textbox1=Format(Sheets(1).range("N14"),"[h]:mm") formátumra akkor meg ezt jeleníti meg: ":12" :-O
Hogyan lehetne jól beolvasni a textboxba a cella tartalmát?
Erre azt javasolnám, hogy a MouseMove és az Enter eseményekben beállított szín legyen eltérő. MouseMove-ra pl. halványpiros, Enter-re erős piros. Amíg a user csak kaszál az egérrel, addig legfeljebb előrejelez egy kattintási szándékot, de ha belekattint a vezérlőbe, akkor úgyis életbe lép az ENTER esemény, és akkor a vezérlőbe megkapja a fókusz-színt.
Ez szabadon lévő checkboxnál remekül működik, de ha frame-ben van ÉS az utolsó objektum, akkor továbblépés esetén (vagyis, amikor kikerül a fókuszból) nem is megy bele az Exit eseménybe, és így az Enternél beállított backcolort megtartja.
Private Sub CheckBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) CheckBox1.BackColor = RGB(255, 0, 0) End Sub
Ez esetben viszont a háttérszín alaphelyzetbe állítása kicsit macerás, mivel lényegében minden control MouseMove eseményében el kell helyezni egy szubrutint, ami az összes control hátterét alapba állítja.
Private Sub CheckBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Alaphelyzet CheckBox1.BackColor = RGB(255, 0, 0) End Sub
Ez az oszlop, amit helytelenül jelenít meg a körlevél, a "C" oszlop.
Most az egész tartomány legutolsó oszlopába beírtam simán, hogy =C2, majd lemásoltam. Vagyis simán egy másolatot hoztam létre.
Majd most a körlevélben erre az oszlopra hivatkozva szúrtam be a mezőt, és tökéletes lett.
Ezek után megpróbáltam, hogy a jól működő oszlop formátumát átmásoltam a C oszlopra, de akkor sem jelenítette meg. Ezt végképp nem értem, de most legalább működik.
A dátum-megjelenítési probléma megoldódott, most egy újabb "jelent meg".
Egy olyan mezőt illesztek be, aminek az Excel forrásoszlopában vagy 4 jegyű számok (2463) vannak, vagy 1 betű és négy szám (A4562).
Ennek ellenére minden értékre ezt jeleníti meg: "12:00:00 AM"
Az Excelben a cellák formázásával mindent végig próbáltam. Szöveg, általános, mindegyik. Minden formátum állítás után mindkét fájlt bezártam, és elölről kezdtem, mégis ugyanez a megjelenítés.
Ezekben az esetekben már nyitva volt a forrás munkafüzet, ÉS utána nyitottam meg a Word körlevelet.
Aztán azt vettem észre, hogyha úgy nyitom meg a Word körlevelet, hogy MÉG nincsen nyitva a forrásmunkafüzet, akkor helyes formátumban írja be a 4 számot vagy 1 betűt és négy számot. Ezzel viszont az a gond, hogy a körlevelet a forrás Excel munkafüzetből kell indítani egy makró segítségével, ami a kiválasztandó rekordot változóként emeli át a körlevélbe.
Több órás küszködés után az ötleteitek alapján eljutottam oda, hogy a ctrl-x letiltva (C és V kell nekem), az egérel való fogd vidd letiltva. A Ctlr+v re írt makró, amivel értéket illeszt be tökéletes.
A fennmaradt probléma az excel menü gombjai továbbra is működnek.
Private Sub Worksheet_Activate() 'Másolás tiltása, engedélyezése Dim oCtrl As Office.CommandBarControl
Oké, de szerintem nem akarta teljesen letiltani ezeket, csak azt akarta, hogy ne másolódjon át a formátum is a tartalommal együtt. Ezért javasolták az érték beillesztést, és ezért említettem én is az erre írt kis makrómat.
Én írtam erre egy kis makrót, és beállítottam, hogy a Ctrl-Q kombinációra induljon el. Általában működik is, bár néha csak akkor, ha a forrás cellán kétszer egymás után nyomok Ctrl-C-t. Viszont ezt látom is, mármint hogy elég volt-e egy is, mert ha igen, akkor megváltozik a cella kerete szaggatottra. Mindenesetre azt talán nem annyira nehéz megtanulni, hogy Excelben a Ctrl-Q-t használják az érték beillesztésére.
Természetesen az irányítot beillesztés csak értéket funkcióval működne, de előbb tanítom meg a macskámat ugatni, mint a kollégáimat ennek használatára. :D
Ez így ebben a formában nem megy. Csinálj 3 cellát egymás alá, az elsőt keretezd be. Állítsd be a cellazárolást, védd a munkalapot. Na most az első cellát másold a második helyre mondjuk.
Sajnos a cella keret vándorol a második cellára is... :(
Lapvédelemmel. Először jelöld ki azokat a cellákat, ahova írni kell, a cellaformázás védelem fülén engedélyezd a tartalom módosítását, aztán védd le jelszóval az egész munkalapot.
Hogyan tudnám letiltani a táblázatban a cellaformátumok, feltételes formázás másolását?
Sokan használunk egy táblázatot előszeretettel másolják a hasonló adatokat húzással vagy CTRL-C megoldással, ez rendben van - sőt célszerű is -, de ezzel a másolással a cellák keretét, betűszínt, feltételes formázást stb elcseszik, nem győzöm visszaállítani, hogy valahogy kinézzen a táblázat.
Értelemszerűen az strFile-t az elején meghatározom, és akkor szó nélkül menti a háttérben. Sőt, mivel ez ez csak egy ideiglenes fájl, ezért miután a formba visszaillesztettem, törlöm is.
Szia! Ez a makró kimásolja az adott munkalap által használt területet képként a vágólapra. Majd egy diagramra beilleszti és az általad megadott néven, png formátumban elmenti.
Sub RangeToImageFile() Dim wsh As Worksheet Dim rng As Range Dim cht As Chart Dim strFile As Variant Set wsh = ActiveSheet Set rng = wsh.UsedRange ' ide írhatod a UsedRange helyére a szűrt adataid címét. rng.CopyPicture Set cht = Charts.Add cht.ChartArea.Clear Set cht = cht.Location(Where:=xlLocationAsObject, Name:=wsh.Name) cht.ChartArea.Width = rng.Width cht.ChartArea.Height = rng.Height cht.Parent.Border.LineStyle = 0 cht.ChartArea.Select cht.Paste strFile = Application.GetSaveAsFilename(FileFilter:="Image (*.png), *.png") If strFile <> False Then cht.Export Filename:=strFile, FilterName:="PNG" End If wsh.Cells(1, 1).Activate wsh.ChartObjects(wsh.ChartObjects.Count).Delete End Sub
Formon szeretnék megjeleníteni egy leszűrt tartományt képként. Azért képként, mert egy formos listboxba betöltött leszűrt tartomány nem formázható, és fontos lenne bizonyos feltételek szerint a vizuális megjelenítés.
Tehát a tervem, hogy:
- A formon nyomok egy gombot, amire
- megadott feltételek szerint leszűri a tartományt (sima ügy), majd
- ezen a tartományon másolás képként, és
- ezt a képet jelenítse meg a formon.
Ha manuálisan csinálom, akkor a form felületére előzetesen beillesztett Image Properties -> Pictures melletti részbe simán CTRL+V billentyűkombinációt nyomok, és megjelenik a formon a vágólapról beillesztett kép. De ezt nem tudom, hogyan lehetne leprogramozni. Még az is működhetne, hogy a vágólapról automatikusan képfájlba mentődik valahová, majd onnan már vba-val visszahozható, de itt meg a mentés nem megy.
Próbáld bezárni a körlevelet és utána újra megnyitni és hozzárendelni az adott Excel táblát. Az Excelben mindenképp dátumformátumban legyenek a dátumok.
Körlevelet készítenék, de a dátum megjelenítés nem akar tökéletesen működni.
A táblázatban van 60 oszlop, amiből két dátum is van. Ezek tartalma nem egyformán jelenik meg a levélben. Annak ellenére, hogy mindkét oszlopban a formátum ugyanúgy van beállítva, egyik 12/6/2020, a másik 44171-ként jelenik meg. Ráadásul nekem "2020.12.06." vagy "2020. december 06."-ként kellene, hogy megjelenjen.
Az adatok alapvetően formból makróval kerülnek a cellába, de most manuális is próbáltam beírni, állítani, de semmi :-( Még szövegként és Általánosként is próbáltam, mégsem változik. Azt ellenőriztem, hogy megfelelő mezőt nézek. Vagyis átírtam a cella tartalmát simán "kutya"-ra, és azt megjeleníti.
Azt olvasom, hogy Registry-ben (rendszerleíró adatbázis) kell valamit valahol állítani, hogy a *.dwg-t ne a viewerhez társítsa, hanem máshoz... nem próbáltam ki - nem is annyira értek hozzá:(
Két feladatot kell megoldanom MS Excel 2019 alatt, ebben kérnék segítséget. Az excel táblázatomban vannak beágyazott "képek". Ezek nem hagyományos képek hanem egy külső programmal (AutoCAD) készült állományok amit képként jelenítek meg nyomtatáskor. Ezen kívül vannak beágyazott képek is, amik jellemzően jpg állományok.
Az első (1) probléma minden beágyazott "képnél" létezik. Nyomtatás esetén, illetve alapvetően pdf létrehozásakor is a képek torzulva jelennek meg. Ez azt jelenti hogy egy kör a beágyazott képen akkor lesz kör ha a kép méretének arányát 4% -al eltolom, tehát a kép magassága 4% -al nagyobb mint a szélessége. Ekkor nyomja össze úgy a képet hogy a kör az kör legyen. Ezt csinálja minden nyomtatón, pdf creatorokkal és saját pdf exporttal is, a 0 -ról újratelepített rendszer esetén is.
A második (2) probléma az hogy a csatolással beágyazott AutoCAD fájlokat nem a saját programjával (AutoCAD) hanem annak nézegetőjével nyitja meg, így pedig nem szerkeszthető. Letelpítettem a nézegetőt, így pedig azzal az üzenettel hogy "nincs meg a program" nem is nyitja meg. Korábban jó volt, most egy új telepítés miatt rosszul rendelte hozzá az excel az objetumok az editáló programhoz. A kérdés az hogy hogyan tudom megváltoztatni azt hogy egy objektumot melyik program editálja?
Sub Nem_vállalol_felelősséget() Do With Application ActiveCell.Copy .wait Now + 1 / 86400 .SendKeys ("%{TAB}") .wait Now + 1 / 86400 .SendKeys ("^v") .wait Now + 1 / 86400 .SendKeys ("{ENTER}") .wait Now + 1 / 86400 .SendKeys ("%{TAB}") .wait Now + 1 / 86400 .SendKeys ("{DOWN}") .wait Now + 1 / 86400 End With DoEvents Loop End Sub
A SendKeys parancs küldi a billentyűparancsot, a Wait pedig vár a megadott ideig.
Különösen az ENTER elküldése után (piros sor) érdemes megfontolni egy hosszabb várakozási idő beiktatását, hogy a "céges program" mindenképpen befejezze az előző adat feldolgozását, mielőtt megjön a következő. A többi Wait parancs igény szerint elhagyható, rövidíthető, stb.
A Wait parancs paramétere: Now + 1 / 86400 annyit tesz, hogy az aktuális most-hoz képest 1 másodpercet vár, ami alatt felfüggeszti a kód végrehajtását.
A végtelen ciklusból Ctrl+Break kombóval tudsz kilépni.
Sziasztok. Belefutottam egy újabb problémába, amit az eddigi ismereteimmel ne sikerült megoldanom. Helyzet a következő:
ITERÁLÓ számítással kell egy értéket kiszámolnom, ez működik is, ámbár, ha az egyik bevitt - a számításhoz szükséges adat nem megfelelő és hibás értéket ad a számítás (zéróosztás, hiányzó adat, stb.), akkor később hiába adok meg a számításhoz megfelelő adatot, a hiba nem szűnik meg, mintha nem számolná újra. Ha viszont a már megfelelő adat bevitele után a számolt érték képletére nyomok egy ENTERT, minden megy tovább.
Azt szeretném elérni, hogy bármely bevitt adat változása esetén újraszámolja ezt az értéket, tehát ha hibát dob és végül a megfelelő adat lett betáplálva, akkor ez a bevitel újraszámoltassa ezt az ITERÁLÓ számítást - ne kelljen manuálisan leenterezni a képletet.
Megadott karakterekkel kezdődő Excel fájlt szeretnék megnyitni. Ez egy hosszabb kód részlete lenne, mert a teljes feladat, hogy a megtalált fájlt megnyitva, abból kiolvas adatokat, majd visszazárja. Eddig teljesen jól eljutottam, mert tudtam a fájl pontos helyét. Ám most felmerült, hogy nem tudjuk, melyik ügyintéző mappájában van, ezért át kellene fésülni az almappákat is.
Találtam egy kódot, ami adott mappában megtalálja, de beljebb nem "néz". Keresgettem ehhez kódokat, de nem teljesen értettem.
Tehát most ez van meg, ami adott mappában keres, és meg is találja. A fájl eleje, amit keresünk "ELL123_*", az ELL állandó, és utána egy 3 vagy 4 jegyű szám, amit a felhasználó textboxban ad meg.
Public Sub fajlkeresomegnyito() Const holkeres As String = "C:sokmappa" Dim fajlneve As String fajlneve = Dir(holkeres & "ELL" & textbox1 & "*") Do While Len(fajlneve) > 0 Workbooks.Open FileName:=fajlneve fajlneve = Dir Loop End Sub
Abban szeretném a segítségeteket kérni, hogy miként kellene ezt kiegészíteni, hogy beljebb is keressen.
Kétségkívül adatbázisra termett feladat, de el lehet molyolni vele Excelben is. Sok mindentől függ, hogy melyiket választanám, de ehhez meg kellene ismerni a munkafolyamatokat, üzleti célokat és a céges kultúrát is.
Olyasféle segítséget keresek ( fizetés ellenében természetesen) amit úgymond készen megkapok.
vagy olyasféle segítséget, hogy hol találok ilyen embereket.... :) vagy ha triviálisan egyszerű a megoldás, merre induljak el.
A probléma a következő:
A kis cégünk kb. 1980 ban elmaradt informatika terén. nekem annyi a feladatom, hogy a meglévő dolgokat örülök ha csinálom....
leginkább kézzel vezetnek mindent....
feladat:
adott 1 fuvarhoz tartozó 15 mező. (ár, ekaer szám, szerződés szám, fuvar mennyisége, fuvartétel megnevezése, rendszám, partner,)
van egy másik táblázat, amiben a megrendeléseket tartjuk nyilván, partnerenként, szerződések szerint (partner, ár, áru megnevezése, fuvardíj, szerződés határideje, ilyesmik. )
nekem folyamatosan napra késznek kéne lenni, hogy az adott szerződésből mi a hátralévő mennyiség... lejárt e a szerződött mennyiség, túlszállítás van, e vagy az adott partnerrel, az adott tételre nincs is szerződésünk, vagy már idejében lejárt.
-egy partnerrel több szerződésünk is lehet, akár ugyanarra az árura, csak eltérő áron
odaáig mindig eljutok gondolatban, hogy kell 1-1 táblázat mindkettőre, csak összehozni nem tudom őket.
vagy ez már access?
vagy makrós dolog?
előre is köszönöm ha némi felhomályosítással tudtok részemre szolgálni.
Az a baj az ilyen Alt+Tab vagy Ctrl+c dolgokkal, hogy nagyon könnyen elhasalhatnak egy nem szándékolt ablakváltáson, vagy egyéb környezeti interferenciákon. Mi lenne, ha inkább elmesélnéd, hogy mi ez a másik app? Hátha van jobb megoldás. Meg nekem úgy tűnik, egy összefüggő cellatartomány celláit egyesével akarod átmásolgatni, pedig talán egyszerre is lehetne.
belátom, hogy csak félig-meddig tartozik ide az alábbi, de hátha mégis.
Abszolút kezdő vagyok, a következőhöz szeretnék tanácsot kérni.
Win10-ben szeretnék egy makrót írni. A célja, hogy a következő billentyű szekvenciát egy custom hotkey-jel vagy egyéb egyszerű trigger-rel végrehajtsa, akár végtelenített hurokban (amíg meg nem állítom), akár lépésekben.
Adott két ablak, az egyik az Excel, a másik egy másik app. Excel-ből indulok:
CTRL+C => ALT+TAB => CTRL+V => ENTER => ALT+TAB => LE
Ezt Power Shell-el meg lehet csinálni? Vagy VBA?
Excel-ből a rengeteg manuális átmásolást szeretném megspórolni.
Köszönöm, ez volt a nyerő kis módosítással (kivettem az A2-t és a határokhoz a tűrés értékeit írtam be, nem pedig a magasság+tűrési értéket.) Meg sikeresen néhány szelvényben elírtam a réteg vastagságát....
Alső és felső határ között kell véletlenszámot generálnod szerintem továbbra is - csak éppen határok valamelyikét (alsó/felső) változóvá kell tenned a leírt igények szerint.
hogyan tudnám megoldani azt, hogy 2 cellában szereplő szám között generáljon egy számot az excel, úgy hogy figyelembe vesz egy harmadik cellát is.
Elméleti magasságokat és rétegvastagságokat szeretnék így számolni. A rétegek egymásra épülnek, a vastagságoknak adott tűréshatárok között kell lennie. A fogadó felület magassága lenne amit harmadikként figyelembe kellene venni. Sok szelvény van és egyesével szerintem idén meg is tartana a feladat... A problémám abból adódik a véletlen.között függvénnyel, hogy ott alsó-felső határok között generál, más kritériumot nem lehet megadni. Az első fogadófelület (földtükör) +-3 cm közötti hibahatárral meg van. A ráépülő réteg 20 cm vastag +- 2 cm tűréssel. A gond, hogy ha a földtükör pl. 3 cm-rel alacsonyabb, mint a tervezett és a következő réteget is úgy generája, hogy a -2 cm tűrésbe esik akkor ennek a rétegnek a terv szerinti magasságától már 5 cm-rel alacsonyabban leszek, ami már nem felel meg a kritériumoknak. Tehát azt szeretném, ha +-2 között generál akkor vegye figyelembe, hogy az előző réteg "milyenre sikerült"; ha mélyebb és akkor ne engedjen negatív számot generálni ( ha magasabb akkor meg pozitívat).
A tartományok szerkesztésének engedélyezése makróval a Munkalap.Protection.AllowEditRanges.Add metódusával lehetséges, az egyes tartományok szerkesztőit pedig Munkalap.Protection.AllowEditRanges(index).Users.Add metódussal adhatod hozzá.
A zároláshoz mindenképpen be kell kapcsolni a munkalap védelmet. Azonban a hozzáférés szabályozása többféle is lehet:
a. A cella zárolása: alapból minden cella zárolt. Ha bekapcsolod a munkalap védelmet a zárolt cellába nem lehet írni stb.
Kijelölt területet úgy tudsz szerkeszthetővé tenni, ha a zárolást feloldod.
Esetedben pl. sh.Usedrange.Locked=False -- feloldja a zárolást
sh.Range("A:K").Locked=True - zárolttá teszi az A:K tartományt
de mivel a zárolás csak akkor érvényesül, ha a munkalap védve van, be kell kapcsolni a védelmet:
sh.Protect "1234", UserInterfaceOnly:=True
Ez a paraméter lehetővé teszi, hogy a zárolt cellákba makróból tudj változtatást végrehajtani, csak kézzel nem lehet változtatni. Tehát nem kell minden alkalommal feloldani a zárolást, ha makróból szeretnél bele írni ebbe a területbe.
Viszont ezt a paramétert a munkafüzet becsukásakor "elfelejti" az Excel, tehát mind megnyitásnál le kell futtatni a zárolást ezzel a paraméterrel -> de ameddig nyitva van a munkafüzet, él a "kivétel".
b. egyes területeket hozzá lehet rendelni meghatározott userekhez, ezeket a területeket csak ők módosíthatják. Magyar menüben a Véleményezés - Tartományok szerkesztésének engedélyezése.
VBA ban megírt userfrom segítségével viszünk be adatokat egy nagy táblázatban, azonban úgy szeretném megoldani hogy csak a userformal tudják bevinni a sorokat. Az egész munkalapot nem szeretném zárolni, mert van ahol kell hogy tudják állítani manuálisan az adatokat, nekem elég lenne hogy ha a program kódba az A oszloptól a K ig lezárná a táblát. Tehát az kéne hogy a userform kódjában benne legyen hogy amikor a hozzáadás gombra kattintanak, elsőnek feloldla-beleviszi az adatot-majd lezárja. Bízom benne hogy valamennyire érthetően fogalmaztam meg a problémát :) Jelenleg az egész munkalapot zárolja ahogy a kódban is látszik.
'===============================hozzaadasgomb==================== Private Sub CommandButton1_Click()
If Me.ComboBox4.Value = "" Then MsgBox "Kerlek toltsd ki a hianyzi adatokat" Exit Sub End If
If Me.TextBox7.Value = "" Then MsgBox "Kerlek toltsd ki a hianyzi adatokat" Exit Sub End If
'''If Me.DTPicker1.Value <= Now - 1 Then'''' ''MsgBox " A main_l rëgebbi d_tumot nem lehet kiv_lasztani a bejgyzës d_tum_n_l"''' ''Exit Sub''' ''End If '''
If Me.TextBox11.Value = "" Then MsgBox "Kerlek toltsd ki a hianyzi adatokat" Exit Sub End If
If Me.TextBox10.Value = "" Then MsgBox "Kerlek toltsd ki a hianyzi adatokat" Exit Sub End If
If Me.ComboBox1.Value = "" Then MsgBox "Kerlek toltsd ki a hianyzi adatokat" Exit Sub End If
If Me.ComboBox2.Value = "" Then MsgBox "Kerlek toltsd ki a hianyzi adatokat" Exit Sub End If
If Me.ComboBox5.Value = "" Then MsgBox "Kerlek toltsd ki a hianyzi adatokat" Exit Sub End If
If Me.ComboBox3.Value = "" Then MsgBox "Kerlek toltsd ki a hianyzi adatokat" Exit Sub End If
Dim sh As Worksheet Set sh = ThisWorkbook.Sheets("Adatbazis")
Dim Last_Row As Long Last_Row = Application.WorksheetFunction.CountA(sh.Range("A:A"))
- A2:A25 az A oszlopban a nevek tartománya, célszerűen bővítendő
- B1-J1 a számolásnak kitett oszlopok fejléce , szintén célszerűen bővítendő
- a képlet elején és a végén a kapcsos zárójelből látszik, hogy ez tömbképletet, amit úgy viszel be, hogy a sor végén Enter helyett Crtl+Shift+Enter kombót nyomsz.
Igen, lehet, hogy pl az az ember elmegy a cégtől és jön a helyére egy másik, vagy nem jön senki a helyére és felcsúszik a név oszlop 1 sorral, máris minden sor rossz.
Több nem igen lehet, ha ugyanaz a név lenne, akkor valahogy megkülönböztetném.
Lehet, hogy rosszul írtam le, most kibővítettem a képen a lényeget.
A bal oldalon található táblázat adatait (ami bővülhet) szeretném a jobb oldaliba összeszámolni, hogy adott termékből hány darab szerepel összesen az adott névnél.
De mivel ez házi feladat, az is lehet, hogy a Google használatának megtanulása volt a cél. Vagy hogy lássa a nebuló: ilyen is van. Vagy próbáljon ki egy csomó mindent, és szerezzen azokról tapasztalatot, mielőtt feladja.
Végül is a matekpéldákat sem azért adják fel, mert túl sok gyakorlati értelmük van.
Azt megteheted, hogy mindenhová vastag keretet állítasz be normál cellaformázással, aztán feltételesen beállítasz sima vagy nem látszó szegélyt azokban a cellákban, ahol nem kell a vastag.
Sziasztok, azt szeretném megkérdezni, hogy miért nem lehet (képletes) feltételes formázásnál, vastag szegélyt beállítani a feltétel teljesülése esetére ?
Sziasztok, a gyermek (13) kapott a suliban egy Excel feladatot: formázzon meg egy nyers táblázatot a mellékelt ábra szerint. Minden OK, de hogy kell a $ jelet (3. oszlop) a cella bal szélére passzítani úgy, hogy a számok jobbra igazítottak? Ez egy cella, nem csak a függőleges cellahatár van eltüntetve.
Amíg nem próbáltam ki, én is azt hittem. De mivel a a hiányzó helyén a B oszlop ugrik egyet, a C oszlop meg ismét hozzá viszonyítva növel, amivel "utóléri" a B oszlopot:
De amit csak most próbáltam ki, az tényleg hiba: Ha két egymást követő szám (3 és 4) hiányzik, akkor csak az elsőnél jelez:
Szerintem ez így nem lenne elég, mert ha az egyik érték hiányzik, akkor nem csak abban a sorban nem fog egyezni a két érték, hanem az összes alatta levő sorban sem, tehát onnantól lefelé mindent hiányzónak fog jelezni.
Köszönöm az ötletedet, alkalmani fogom! (eddig úgy csináltam, hogy egy olyan referencia oszlopot hoztam létre, amelyik tartalmazta a kezdő és a végszám között az összes számot, majd azt kerestettem, hogy az eredeti oszlopból melyik hiányzik, ami a referencia oszlopban megvan és mindezt a DARABTELI függvénnyel kerestem)
Függvényt ugyan nem tudok, de egy megoldást igen. És ha csak egyszer van rá szükség, akkor talán segít:
1. A listát először másold át egy üres oszlopba (vagy egy üres munkalapra)
2. Az Adatok->Ismétlődések eltávolítása paranccsal minden szám csak egyszer fordul elő
3. A kapott listát rendezd nagyság szerint (persze a rendezés történhet az ismétlődések eltávolítása előtt is)
4. A kapott rendezett lista első eleme mellé írd saját magát (Feltételezve, hogy a rendezett listád a B oszlopban van, és a kezdőérték 1, akkor a C1-be is 1-et írj).
5. A következő sorba (A fentiek szernt C2-be) írd ezt: =B1+1, majd ezt a képletet húzd lefelé a végszámig
6. A D2 oszlopba írd a következő képletet: =HA(B2=C2;"";"hiányzik"), majd ezt is húzd lefelé a végszámig.
Ekkor a kimaradt értékeknél látod a "hiányzik" szót a D oszlopban.
Ismertek-e olyan függvényt, ami egy listából megadja, mely számok hiányoznak, abban az esetben is, ha megadom a kezdő és a végszámot.
Például.:
1 kezdő szám
4 végső szám a referencia listában.
Amiben keresem, abban az alábbi számok vannak:
1
2
4
Tehát a példa szerint a 3 számot kell kihozni hiányzónak!
Mivel több száz sorom van, ezért gondoltam, hogy ha megadom a kezdő és végpontot és a növekedés mértékét (ami 1), abban az esetben egyszerűbb lenne, mint amit jelenleg csinálok, hogy elkészítem a teljes referencia listát és a mintát abból veszi a függvény!
Formon textboxokat használok adatbevitelre. A form indulásakor adott textboxba beíratok egy értéket, majd setfocus-szal kiválasztom ezt a textboxot, mert lehet, hogy jó a beírt szám, de lehet, hogy mást kell helyette írni. Most a setfocus az utolsónak beírt karakter után "teszi" a kurzort. Ha megfelelő a szám, akkor tab-tal sima ügy továbbmenni. Viszont, ha módosítani kell a beírt számot, akkor vissza kell ezeket törölni.
Van-e lehetőség arra, hogy a textboxban lévő összes karakter ki legyen jelölve, mintha Ctrl+a kombinációt nyomtam volna?
Csoportokra felbonthatod, de az átpakoláshoz már makró kell.
PL. D oszlop a szögjel, akkor az E2-be: D2>ÁTLAG(D:D), F3-ba: ÉS(IGAZ(E3); HAMIS(E2))
Ahol az E IGAZ, ott kezdődik egy új szakasz.
Átpakolás előtt ezt valahogy rögzíteni kell, pl. az E oszlopot irányított beillesztéssel visszamásolod saját magára érték szerint, hiszen az első mozgatáskor megváltozik az átlag.
Nem mindegy, hány szakasz van és milyen gyakran kell csinálni.
Valaki tudna javasolni esetleg megoldást az alábbira:
Számokból álló adathalmaz. Ezt a halmazt "fel kellene darabolni" ~720 soronként. Éppen ott lenne a határ, ahol a szögjel átlépi a szögjel oszlop átlagát fölfelé. Lényegében azt szeretném elérni, hogy ezt az adathalmazt feldarabolom periódusok szerint, hogy aztán a periódusok 1., 2., ... elemeiből soronként Fx és Fy átlagot képezzek. Beszíneztem feltételes formázással: a kék az átlag feletti, a sárga az átlag alatti értékek. Van valami módja, hogy automatizált módon (mondjuk a szín alapján) csoportokra bontsam az adathalmazt (egy csoportot jelent egy kék és egy sárga szakasz), aztán egymás mellett lévő oszlopokba rakjam?
Nem vagyok túl expert Excelben, ezer hála ha vki tud segítni! :)
Valami ilyesmire gondolok, hogy aztán soronként átlagolni tudjak:
Nekem is eszembe jutott, de azt olyan ritkán használom, hogy egyszerűbbnek tűnt nulláról megírni egy algoritmust, mint kitalálni azt a regex formulát, ami lefedi a kreatív telefonszámokat.
De mivel a megoldásom nem tökéletes, nyugodtan bedobhatod magad, és hozhatsz jobbat :)
Viszont arra nem gondoltam, hogy a vidéki vezetékes telefonszámok 6 jegyűek... tehát a függvény mégse teljesen jó, mert csak mobil vagy budapesti vezetékes számokra működik. Ez nagy gond?
A kiegészítő függvény megkapja bemenő adatként az eredeti cellatartalmat valamint egy karakterpozíciót, és azt csinálja, hogy:
- az adott karakterpozíciótól visszafelé indulva megvizsgál minden karaktert,
- a számokat megtartja,
- az elválasztójeleket eltávolítja,
- és megáll az első olyan karakternél, ami se nem szám, se nem elválasztójel.
Az értelme az, hogy a számsorokat közös formátumba hozza. Így például a
"telefonszám +36 - 70 / 12-34-567"
"telefonszám:36 70 1234567"
"telefonszám=+36 70/123-4567"
stb. verziókból egységesen "36701234567" lesz.
Ami azért kell, hogy utána egyszerűbben lehessen a telefonszámot leválasztani (ez az utolsó 7 számjegyet), és az előtte lévőket vizsgálni országhívó ill. körzetszám szempontból.
Ha a függvény által visszaadott számsor hossza nem éri el a 8 karaktert, akkor az nem lehet telefonszám (8 is csak akkor, ha budapesti vezetékes).
De ha mondjuk valakinek
- az email címe úgy néz ki, hogy "ekkorakirályvagyok12345678921@gfail.com",
A sorokat ahogyan átírtam tökéletesen működik minden variáció szerint. Egy két nagyon extrém eset volt amelyre már nem tudott mit mondani de ezeket úgy gondolom figyelmen kívül hagyhatom mert ott már a sírás kerülget:) az érdeklődőtől.
"A H9 helyén valami@gmail.com 20/2415866 szerepel a visszakapott érték: +36 1 241 5866 lett ezért"
Az fura, mert nálam ugyanerre teljesen jó eredményt ad...
Viszont megint megfeledkeztem arról, hogy a fórummotor lenyeli a backslasht. A kiegészítő függvény helyesen:
Private Function PotentialPhoneNumber(ByVal BaseString As String, ByVal Pos As Long) As String Dim sTemp As String, i As Long, c As String
For i = Pos To 1 Step -1 c = Mid(BaseString, i, 1) Select Case c Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" sTemp = c & sTemp Case "-", " ", "/", "\", "+" 'valamilyen elválasztó jel, nem érdekes Case Else Exit For End Select Next PotentialPhoneNumber = sTemp End Function
És igen, az elválasztó jelek listája szabadon bővíthető.
Közben rájöttem:) Szerintem működik de mobilszám helyett vezetékes számot ad vissza
A H9 helyén valami@gmail.com 20/2415866 szerepel a visszakapott érték: +36 1 241 5866 lett ezért
If (Pre = "1") Or (Pre = "06") Or (Pre = "0061") Or (Pre = "36") Or (Pre = "036") Or (Pre = "+36") Then sort erre változtattam és így űgy néz ki működik
Nagyon hálás vagyok köszönöm szépen. Nagy segítséget kaptam.Hipp hipp hurrá:)
Case "-", " ", "/", "", "+" 'elválasztó jelek, nincs velük teendő ez a sor bővíthető gondolom az előforduló karakterekkel amelyekkel esetleg a felsoroltakon kívül elválasztanak?
Keressen olyan számsorozatot vagy szövegrészletet amely első 4 karakterében előfordul a "20" "30" "70" "31" érték de ha ugyanebben a részletben található @karakter akkor ugorja át és folytassa a keresést. 'ez esetben a körzet megvan.
A körzetszám elé tegye be a +36 értéket
A "talált" körzetszám után egy tisztázás kellene és a maradék 7 karaktert illessze e a körzetszám után. Valami ilyesmi szabályt tudok felállítani a telefonszám esetére bár elég kusza:)
Email cím miatt a H9 cellát előszőr is kisbetűssé kellene alakítani
aztán a @előtti karaktereket kell lekérdezni az első szóközig majd
a @ utáni karaktert az első pontig
és a pont utáni részt az első szóközig
És remélem nem lesz valami@valami.valami.hu email cím:)
Közben írtam egy függvényt a telefonszám szövegből történő kibányászására. Szerintem a legtöbb esetet kezelni fogja, de nyilván lehetnek olyan kreatív érdeklődő, akiét nem.
A cellában használható függvény a PhoneNumber2, a másik ennek egy segédje.
Az algoritmus lényege, hogy a szöveg végétől visszafelé haladva végignézi azokat a szövegrészeket, amelyek csak számjegyekből és/vagy a számjegyek közötti elválasztó karakterekből állnak. Ha talál egy ilyen karaktersorozatot, és az legalább 8 számjegyet tartalmaz, akkor lehet telefonszám. Akkor megpróbálja értelmezni, és ha bizonyos feltételeknek megfelel, akkor elfogadja telefonszámnak, aztán kiírja az általad megadott formátumban.
Teszteld lécci a meglévő adataidon.
Public Function PhoneNumber2(Szöveg As Range) As String Dim Length As Long, i As Long, N As String Dim sInput As String, Pre As String, Post As String
sInput = Szöveg.Value Length = Len(sInput) For i = Length To 1 Step -1 N = PotentialPhoneNumber(BaseString:=sInput, Pos:=i) If Len(N) <= 7 Then 'menjünk tovább a ciklusban Else Post = Right(N, 7) Pre = Left(N, Len(N) - 7) If (Pre = "1") Or (Pre = "061") Or (Pre = "0061") Or (Pre = "361") Or (Pre = "0361") Then Pre = "1" ElseIf (Len(Pre) = 2) Then 'ez a körzetszám ElseIf (Len(Pre) = 4) And ((Left(Pre, 2) = "06") Or (Left(Pre, 2) = "36")) Then Pre = Right(Pre, 2) Else PhoneNumber2 = "nincs felismerhető a telefonszám" Exit Function End If PhoneNumber2 = "+36 " & Pre & " " & Left(Post, 3) & " " & Right(Post, 4) Exit Function End If Next PhoneNumber2 = "nem felismerhető a telefonszám" End Function
Private Function PotentialPhoneNumber(ByVal BaseString As String, ByVal Pos As Long) As String Dim sTemp As String, i As Long, c As String
For i = Pos To 1 Step -1 c = Mid(BaseString, i, 1) Select Case c Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" sTemp = c & sTemp Case "-", " ", "/", "", "+" 'elválasztó jelek, nincs velük teendő Case Else Exit For End Select Next PotentialPhoneNumber = sTemp End Function
A H9 cellába email cím és telefonszám kerül de ezeket facebook messenger üzenetben kapom. Szóvel előre nem tudom melyik lesz elől és a lelkes érdeklődők megannyi módon képesek megadni adnak egy telefonszámot persze semmilyen állandó formában aztán kérdez valamit majd hirdtelen eszébe jut, hogy az email címet elfelejtette megírni. Amikor megírja akkor persze a mobilról kapott email cím sokszor nagybetűvel kezdődik . Így szabályszerűséget sajnos nem tudok rá mondani. Van aki / jelet használ van aki a 06-ot elfelejti van aki +36 kezdődéssel használja a megadást. A messengerből csak kimásolom az egybn kapott szöveget és sokszor ugyan jók a kinyert adatok de valami automatizálást szeretnék rá:(
Amikor azt mondod, hogy "vegyesen email cím és telefonszám és más szövegeket tartalmaz", ez mit jelent?
Jelentheti azt, hogy a telefonszám mögött még további szöveg jön? Jelentheti azt, hogy az email címet egyéb szöveg előzi meg? Jelentheti azt, hogy az email cím és a telefonszám közé valami szöveg beékelődik? El lehet mondani azt, hogy a telefonszám után esetleg megjelenő szövegben nem fordulhatnak elő további számjegyek? Vagy mit lehet mondani? El lehet mondani legalább azt, hogy minden telefonszám magyarországi?
Kicsit több konkrétum kellene, hogy a H9 cella mindig változó tartalmára milyen szabályszerűségek érvényesek.
Az első kapottemail címemnél hozta is a hibát sajnos. A kapottemail címben volt szám és persze mobiról kaptam így a kezdőbetű is nagybetű volt Svalami76@gmail.com 20/5234572
Írtam egy saját funkciót a feladathoz. A hivatkozott cellából kigyűjti a számokat, majd a megfelelő formátumúra rendezi. Baj akkor van, ha a szövegben máshol is szerepel számjegy, pl. gefghggh15@gmailcom 20/5234572.
Function TelSzam(Cella As Range)
Dim betu As Integer, szoveg As String
For betu = 1 To Len(Cella)
If IsNumeric(Mid(Cella, betu, 1)) Then szoveg = szoveg & Mid(Cella, betu, 1)
Next
If Left(szoveg, 2) = "06" Then szoveg = Right(szoveg, Len(szoveg) - 2)
H9-ben van a vegyes szöveged, I3-ba jön a képlet: =TelSzam(H9)
A vágólapra a szokásos Ctrl+c-vel teheted ki, de a beillesztésnél ne Ctrl+v-t alkalmazz, hanem irányított beillesztést, értékként. Ez persze az Excelbe beillesztésre igaz.
Adott egy táblázatban a H9 cellám amely tartalma mindig változik vegyesen email cím és telefonszám és más szövegeket tartalmaz pl gefghggh@gmailcom 20/5234572
Ebből a H9 cellából kivettem az email címet az alábbi képlettel I2 cellába :
=HAHIBA(KIMETSZ(KÖZÉP(HELYETTE(KIMETSZ(H9);" ";SOKSZOR(" ";200));(HOSSZ(BAL(H9;SZÖVEG.KERES("@";H9)))-HOSSZ(HELYETTE(BAL(H9;SZÖVEG.KERES("@";H9));" ";"")))*200+1;200));"H9 cellába adj meg egy email címet!")
Ebből a H9 cellából kivettem formázatlan " telefonszámot"az alábbi képlettel I9 cellába:
1. Szeretném I3 cellába beilleszteni ezt az adatot úgy hogy +36 20 523 4572 jelenjen meg (azaz egy telefonszámként). A szóköz a számok között nem fontos de átláthatóság szempontjából szebb lenne. Probléma még, hogy a kapott adatokban a telefonszámok mindig másképp jelennek meg. pl.: 20 5234572;20/ 5234572; 06205234572 íígy az I9 cellába kinyert adatok mások. Ritkán ugyan előfordul a ó formátum is:)
2. I2 és I3 cellára ha rákattintok akkor ott a képlet jelenik meg és másolás esetén az is kerül a vágólapra. Hogyan van arra lehetóség, hogy az eredmény legyen a másolt tétel és ne a képlet.
3. Amennyiben az emailcím tartalmaz számot akkor az I9 cellába bekerült adat az email címből kivett számot is tartalmazza ezt ki lehet úgy küszöbölni, hogy ne vegye figyelembe?
4. az email cím amelyet I2 cellába kinyerek helyes formátumba megjelníthető pl ha nagybetűvel kezdődik az email cím akkor az helyesen változzon át kisbetűre
Adott egy táblázatban a H9 cellám amely tartalma mindig változik vegyesen email cím és telefonszám és más szövegeket tartalmaz pl gefghggh@gmailcom 20/5234572
Ebből a H9 cellából kivettem az email címet az alábbi képlettel I2 cellába :
=HAHIBA(KIMETSZ(KÖZÉP(HELYETTE(KIMETSZ(H9);" ";SOKSZOR(" ";200));(HOSSZ(BAL(H9;SZÖVEG.KERES("@";H9)))-HOSSZ(HELYETTE(BAL(H9;SZÖVEG.KERES("@";H9));" ";"")))*200+1;200));"H9 cellába adj meg egy email címet!")
Ebből a H9 cellából kivettem formázatlan " telefonszámot"az alábbi képlettel I9 cellába:
1. Szeretném I3 cellába beilleszteni ezt az adatot úgy hogy +36 20 523 4572 jelenjen meg (azaz egy telefonszámként). A szóköz a számok között nem fontos de átláthatóság szempontjából szebb lenne. Probléma még, hogy a kapott adatokban a telefonszámok mindig másképp jelennek meg. pl.: 20 5234572;20/ 5234572; 06205234572 íígy az I9 cellába kinyert adatok mások. Ritkán ugyan előfordul a ó formátum is:)
2. I2 és I3 cellára ha rákattintok akkor ott a képlet jelenik meg és másolás esetén az is kerül a vágólapra. Hogyan van arra lehetóség, hogy az eredmény legyen a másolt tétel és ne a képlet.
Addig kínlódtam, míg összejött a dolog. (A "B" oszlopban egy-egy kód, a "C" oszlopban a kód két elhelyezkedési változata szerepel)Ezzel a megoldással egyszerre két feltételt lehet figyelembe venni a keresésnél, pl. a HOL.VAN függvény keresési értékét így lehet egyszerre két keresési célra megadni. Ha nem írod meg a | jel beviteli kódját, akkor nem jutottam volna el a megvilágosodáshoz. Köszi!
Sziasztok! Sajnos egyáltalán nem értek az excel bugyraihoz. Segítséget szeretnék kérni egy név függvény kiegészítéséhez. Azt szeretném, hogy ha az AG oszlop megfelelő cellája üres, akkor a CC oszlop megfelelő cellájába a 0 ne jelenjen meg. Segítségeteket előre is köszönöm.
A feltételes formázás a te barátod. Jelöld ki az oszlopodat, ahol az A és B váltakoznak, és a menü (felső sor) Kezdőlap fülén kattints a Feltételes formázás parancsra. A szabálytípusnál válaszd a "Csak az adott tartalmú cellák formázása" parancsot, ott pedig szerkeszd a szabályt úgy, hogy a cellaérték egyenlő legyen "A"-val, a Formátum résznél pedig állítsd be a betű színét pl. pirosra) és ha akarod még félkövérre is. OK és már működik is, hogy ha "A" betű kerül a kiválasztott oszlopod egyik cellájába, akkor az pirossal fog megjelenni. Ha nem működne, akkor több idézőjel van a szabályban a kelleténél, ami a szabály szerkesztésénél tudsz eltávolítani. Ha a "B" betűt is színezni akarod,akkor ugyanezzel a módszerrel válassz másik színt arra. A szabály hatása arra a tartományra lesz igaz, amely az Érvényesség résznél látszik. Ha a szabály választása előtt kijelölted a teljes oszlopot, akkor ezen a helyen a teljes oszloptartomány fog látszani.
Megtaláltam a teljes feladatot a YouTube-on, elküldöm neked a linket, hátha téged is foglalkoztat ennek a | jelnek a használata. Sajnos angolul megy alatta a komment, így számomra a szöveg nem elég jól érthető. Ha te jobb angol szövegértéssel rendelkezel, akkor biztosan minden megvilágosodik, mert a kommentelő külön magyarázza a videóban ennek a | jelnek a használatát is, de nekem ez több meghallgatás után sem lett lefordítható. A link: https://www.youtube.com/watch?v=4QaSwRgkeZo&list=PLrRPvpgDmw0kjL4875H36yNhWBb0f-nci&index=2
Nagyon jó lenne, ha te meg tudnád fejteni a HOL.VAN fv. ilyen használatát, mert engem legalább is erősen kíváncsivá tett ez a (számomra) szokatlan módszer. Kérlek nézz rá, és segíts a megfejtésben. Kösz előre is.
Excel táblázatom egyik oszlopában 1db A vagy B betű van írva. Hogyan tudnám az egyiket más színnel íratni? Több mint 100 sorról van szó és a betű naponta változik. Köszönöm
Szia, kösz a válaszaidat. Pontosan azért kérdeztem rá, mert eddig még nem találkoztam a cellák összefűzésének(??) ezzel a formájával. Elég fura, elég körülményes, és nem értem az indokát sem, amikor egy sima "&" is összefűzné a két cellát. (Ha már egyszer pl. lusták lennénk az ÖSSZEFŰZÉS függvény használatára.) Ez mitől jobb, mitől indokolt, egyáltalán mi miatt kellett(??) kitalálni? Te már használtad ezt korábban, vagy találkoztál vele korábban? A korábbi Excelek is elfogadták utasításnak?
A HOL.VAN függvény következő paramétere (ami már nem látszik a képen) mutatja meg az F és G oszlopok összefűzésének az oszlopát, ahol keresel. Nyilván ezzel (|) a karakterrel fűzték össze a két értéket, azért kell így rákeresni.
Szokás a 2 érték közé szóközt, kötőjelet, alsó kötőjelet, miegymást tenni. Ez azért kell, mert pl. a 111 és 50 összefűzése 11150 értéket ad, de ugyanezt kapod a 11 és a 150 összefűzésével.
Itt az INDEX, HOL.VAN függvény párossal keresel ki egy értéket egy tartományból.
A keresés sorát az F és G oszlopok együttes tartalma határozza meg. Valószínű, hogy egy oszlopban ezeket előre összefűzték, csak a képletnek a további része nem látszik a képen.
Érdekes, hogy az F-nél a 9. sort fűzik össze a G oszlop 8. sorával, de biztos így kell.
Már nem először segítesz! Kösz a gyors válaszodat. Ez tényleg hozza a keresett jelet, de tudnál mondani valamit arról is, hogy ez milyen Excel funkciót határoz meg? Látszólag ez a jel két cella tartalmát "segíti" összefűzni, de ez menne enélkül a fura karakter nélkül is, tehát nyilván ennél többről van szó.
Belefutottam egy tömbképletes megoldásnál egy olyan szintaktikába, amit eddig nem ismertem, és nem is találok a billentyűzeten olyan billentyűt, amivel ezt - működőképesen - meg tudnám valósítani. Erről van szó: &" I "& Olyan, mintha egy kis l betűt, vagy egy nagy I betűt tartalmazna idézőjelek között és - funkcióját tekintve - mintha két keresési tartományt kapcsolna össze: HOL.VAN(F9&" I "&G8).......... Tudnátok erről valamit mondani? Hogyan lehet ezt létrehozni? Előre is köszönöm.
Ahaaa, akkor ilyesmit már használok párat, csak jelölőnek hívom :-)
Több lapból álló formot használunk, több lapból álló munkafüzettel, és például szerettem volna azt, hogy ha adott munkalapról indítom a formot, akkor azt bezárva ugyanarra a lapra menjen vissza. Ezért egy rejtett jelölőbe beírtam, hogy honnan "jöttem", és ezt vizsgálom a form bezárásakor. De volt olyan textbox_change eseménykezelés, ami egy folyamat végén újra lefutott, de akkor már nem volt rá szükség. Ezért itt is egy rejtettjelölőbe írtam be, hogy "aktív", illetve "nem aktív", és ezt figyeli a textbox eseménye.
No, akkor az eredeti problémára visszacsatolva, arra kellene rájönnöm, hogy melyik esemény szúrja el a textbox működését, és azt feltétellé tenni. A baromi nehéz, hogy gyakorlatban időnként olyan combobox-ban is boxon belül ugrik tabot, amelyiknek nincs is tulajdonsága, illetve nem találtam ilyet a comboboxnál. Valamint az érdekes, hogy amennyiben egérrel kikattintok a boxból, majd vissza, akkor megjavul. Vagyis, ha kikerül a fókuszból, akkor megszűnik a hiba.
Hmm, közben elkezdett valami derengeni :-)
Programozó az ismerősök között mesélte, hogy van egy "Mondd el a gumikacsának!" mondatuk, Vagyis sok esetben nem kell valós problémamegoldás, hanem elég, ha valakinek (egy gumikacsának az asztalon) elmondani a problémát, és a probléma megfogalmazása olyan módon, hogy a másik fél is megértse, elégséges lehet a probléma okainak feltárására.
Most ilyesmit érzek :-)
Van pár textbox, ahol .setfocus-szal állok rájuk. Megnézem, hogy ezen a vonalon lehet-e probléma.
Szia! Az Application.EnableEvents metódussal tudod az Excel eseménykezelőjét ki-be kapcsolni, azaz szabályozni, hogy egy esemény lefusson vagy ne. Ez az Excel beépített eseménykezelőire van hatással - amiket az adott objektumnál lehet kiváltani (pl. Workbook_Open a munkafüzetnél, Worksheet_SelectionChange a munkalapnál stb. - de nem hat a Formokon végbemenő eseményekre.
A Userformok eseményeit úgy tudod szabályozni, ha a form kódlapján te magad felveszel egy - ajánlatosan publikus - logikai változót, ennek az értékét minden eseménykezelő első sorában megvizsgálod és az értékétől függően végrehajtod az eseménykezelést vagy átléped.
Pl.
Public esemenykell as Boolean
Private Sub TextBox1_Change()
If esemenykell Then
esemenykell=Not esemenykell ' a következő esemény kezelések kikapcsolása
Kapcsolódva Fferihez kérdezem, használsz-e eseménykezelést? Feltehetőleg igen.
És ha igen előfordul-e, hogy az eseménykezelőd új értéket ad az éppen elemzett textboxnak?
Ha igen, akkor haszálod-e az eseménykezelések tiltását. Ez az Application.EnableEvents property ami False-ra állítva megakadályozza, hogy az eseménykezelőn belüli értékadásnál ismét ráugorjon a vezérlés magára az éppen használt eseménykezelőre.
Az Application.EnableEvents sajnos formokon nem működik, ezért saját változót kellene bevezetni helyette.
A cél az, hogy egy fix cellába tudjam beírni az aktuális kiadás összegét, ami ekkor rögtön törlődne és kivonásra kerülne egy havi keretet tartalmazó cellából.
- Végignéztem, és mindegyiknek False a tulajdonság, de ha ez okozná a problémát, akkor mi állíthatja át időnként, és mitől áll vissza. Mert, ha egérrel kikattintok a boxból, utána jó lesz.
- Eddig nem is hallottam ilyet, nem tettem ezt változóvá sehol.
- Azt elfelejtettem írni, hogy comboboxoknál is csinálja, de azoknak nincs ilyen tulajdonsága.
A TextBox -nak van egy olyan tulajdonsága, hogy TabKeyBehavior. Ha ez False, akkor a TAB azt csinálja, amit szeretnél, ha True, akkor pedig azt, amit most hibának gondolsz. Meg kéne nézni, hogy van-e a textboxok között olyan, aminek True ez a tulajdonsága.
Talán valamelyik eseménykezelő babrál ki vele (feltéve, hogy vannak ilyenek benne - gondolom az automatikus kitöltést ilyenek végzik).
Megpróbálnám alaposan tesztelni a folyamatot, figyelve és feljegyezve minden történést. Előbb-utóbb elő kell fordulnia a jelenségnek és akkor vissza lehet nézni, mi történt előtte. Ezután megpróbálni ismét előidézni.
Sziszifuszi munka, de enélkül szerintem nem lehet felderíteni az okot.
Sok-sok textboxból álló formot használok. Sokféle szabály alapján töltjük ki, illetve sokféle automatikus kitöltési feltétel segíti a használatot.
Van egy visszatérő hiba, amivel nem tudok mit kezdeni. A textboxok között Tab-billentyűvel haladunk előre alapesetben simán. Bizonyos feltételek esetén automatikusan kitölt mezőket, majd ennek megfelelően a fókuszt áthelyezi egy következő utáni textboxra.
Időnként - egyszerűen nem tudom eseményhez kötni - a Tab megnyomására nem ugrik át a következő textboxba, hanem adott textboxon belül valóban Tab-ként működve eltolja a szöveget, vagy, ha már mögötte van, akkor a kurzor tolódik el, de nem lép ki a boxból. Arra csak egérrel átkattintással van lehetőség.