-
PROHARDVER!
A Microsoft Excel topic célja segítséget kérni és nyújtani Excellel kapcsolatos problémákra.
Kérdés felvetése előtt olvasd el, ha még nem tetted.
Új hozzászólás Aktív témák
-
Fferi50
Topikgazda
válasz
poffsoft #28710 üzenetére
Szia!
Látom, közben megtaláltad a jó (jobb) megoldást. De most leírt esetben is működik a dolog. Mivel a Thisworkbook modul u.n. osztálymodul, ezért az ott deklarált Public változók úgy érhetők el, ha "teljes névvel", a modul nevével is hivatkozunk rá: Thisworkbook.változónév. Ebben az esetben látható az értéke más modulokból is.
Ez az eljárás minden osztálymodulnál működik (tehát pl. egy munkalaphoz tartozó kódban is deklarálható Public változó és a kódmodulneve.változónév formában lehet rá hivatkozni más modulokban).Üdv.
-
Fferi50
Topikgazda
válasz
poffsoft #28708 üzenetére
Szia!
Akkor deklaráld a tömbödet Public-nak, vagy Global-nak. Egy külön eljárásban töltsd fel a tömböt, mielőtt meghívnád a "számoló" rutint. Ha a külön eljárásod lefut, megnézheted, hogy benne maradnak az értékek a tömbben (ez biztos, de ellenőrizd egyszer). Idézet a 2010-es VBA helpből: "You can also use the Public statement with empty parentheses to declare a dynamic array. After declaring a dynamic array, use the ReDim statement within a procedure to define the number of dimensions and elements in the array"
A többszöri meghíváskor már nem kell feltölteni a tömböt, mert az már megtörtént külön. Az értékük addig él, amíg ki nem lépsz a főprogramból.Üdv.
-
Fferi50
Topikgazda
válasz
poffsoft #28706 üzenetére
Szia!
Mivel a makródnak tudnia kell, hogy mivel számoljon, egyszer mindenképpen meg kell adnod valahol a programban ezeket az értékeket. Mivel a ciklust vezérlő változóid érteke valószínűleg nem állandó, hiszen ellenkező esetben a konkrét számokat adtad volna meg a select case-ben ezért a tömb értékeid sem lesznek valódi konstansok!
Ha tényleges értékeket tudsz, akkor megoldás lehet pl. az, hogy egy munkalapon beírod ezeket az értékeket mondjuk az A1-B8 tartományba, majd a tombvaltozó=range("A1:B8").value utasítással egy lépésben bekerül a tömb értékébe mind. A tömböt dinamikusnak kell deklarálni.
Beteheted az értékeket egy szövegfájlba és akkor onnan is be lehet olvasni fájlművelettel.Ha az excel azt mondja, körkörös hivatkozás van, akkor az úgy is van, csak valószínűleg olyan "bonyolult módon", hogy "szabad szemmel" nem látható. Érdemes ilyenkor a képletvizsgálatot bekapcsolni.
A beállítások képletek részénél van olyan, hogy közelítés engedélyezése x lépésben, ha ide beírod az 1 lépést, akkor nem kiabál a körkörös hivatkozás miatt - cserébe viszont nem is számolja át ismét az értékeket, ha változott a bemenő adat, csak kérésre.
Ezért nem ajánlott a "kikapcsolása".Üdv.
-
m.zmrzlina
senior tag
válasz
poffsoft #28655 üzenetére
Az XP-ig része volt a windowsnak egy clipboard viewer de ez úgy tudom a win7-től már nincs. Gondolom vannak ingyenes külső programok a neten erre a célra.
A képet nem tudom milyen formában akarod használni de a szokványos cellatartalmat a szokványos módon lehet hozni-vinni. A teljes sor is egy Range
-
Golota
aktív tag
válasz
poffsoft #28441 üzenetére
Igen, bocs általában az angol terminológiát használom, így keverem a munkafüzetet a munkalappal. A munkalapoknak kellene külön hozzáférési szint. A VBA-ban nem bízok, elég könnyen hackelhető. Sajnos pont azt akartam elkerülni, hogy manuálisan kelljen összelapátolni a master filet, tekintve, hogy elég bonyolult táblázatokról van szó, sok ráépülő riporttal.
Köszi, keresek tovább.
-
válasz
poffsoft #28425 üzenetére
Feltöltöttem IDE
Nagy nehezen sikerült megoldanom a kerekítéssel, de szerintem ez nem egy elegáns megoldás, egy ilyen "piti" feladathoz képest.
Azért érdekelne, hogy ezek a random számolási hibák miből adódnak, és miért. egzakt egész számokkal végzek el egy egyszerű kivonást. 14 órából 10 órát.
-
spe88
senior tag
-
válasz
poffsoft #28396 üzenetére
"lebegőpontos pontosság?
lehet, az iterációk szàmát bántottad?
általános formátumban mik a számok?
kivonás helyett valami dátumfv-t használva?"Ha arra gondoltál, hogy a beállításokban a pontosság értékét (elfogadható hiba) piszkáltam-e, nos először nem. Gyári értéken volt. Olvasva a kérdéseidet, átállítottam nullára. A probléma fent áll továbbra is.
Őszintén megmondom, hogy fogalmam sincs mi az az iteráció.Így nagy a valószínűsége, hogy nem bántottam.
Az általános formátumon nem változtattam. Gyári.
Amennyiben van alternatíva, amely ezt a problémát megoldja, jól jönne. Elvben nem lenne probléma ez a pontatlanság, de az eredményen feltételezett formázás van, és az ilyenkor nem működik. -
bayay
csendes tag
válasz
poffsoft #28153 üzenetére
Köszönöm szépen!
Megint egy lépéssel közelebb van a dolog. Amikor a start dátum hónap napja nagyobb az end dátum hónap napjánál, akkor azonban egyel kevesebb az eredmény. Ezt lehet egy újabb HA-val meg lehet oldani, de ez utóbbi képletedet már nem értettem meg, tehát nem mertem beleírni sem
A segédoszlop nem gond, hely van bőven. Gondoltam rá én is, hogy kilistáznám a két dátum közötti összes napot és megszámolnám a megfelelő értékeket, itt abba az akadályba ütköztem, hogy nem tudom automatizálni, hogy minden megnyitáskor az aktuális end dátumig írja ki a napokat és a keresés mezőt is automatikusan hozzáigazítsa ehhez.
-
bayay
csendes tag
válasz
poffsoft #28140 üzenetére
Szia!
köszönöm szépen a képletet, jó kiindulási alapnak tűnik, majdnem mindig működik is, de sajnos a következő dátumokkal gondban vagyok:
http://logout.hu/dl/upc/2015-08/20/543737_y20k2lo8jgv5xnl4_untitled_1.jpg
ugye itt csak egyszer volt az intervallumban december 5-e, a képlet, ahogy átnéztem helyesen számol és 2-t ír ki, ez mégsem jó.
Lenne hozzá ötlet?
-
cekkk
veterán
válasz
poffsoft #28145 üzenetére
Nem jól értelmezed. Mert a B-t nem kell vizsgálni.
Az "A" oszlopot kellene össze hasonlítani "C" oszloppal és a "B" oszlopba jelölni, hogy van egyezés. Majd fordítva is "C" oszlopot "A" oszloppal és a "D" oszlopba jelölni az egyezést és a nincs akkor mondjuk írja ki, hogy nincs. De nem akar jól működni nekem a Fkeres fügyvény
-
Delila_1
veterán
válasz
poffsoft #28085 üzenetére
Egyszerűbb megoldás:
Sub mm()
Dim sor As Long, usor As Long
usor = Range("A" & Rows.Count).End(xlUp).Row
For sor = 5 To usor Step 29
Range("B" & sor & ":Z" & sor + 4).Delete Shift:=xlUp
Range("B" & sor + 20 & ":Z" & sor + 24).Insert Shift:=xlDown
Next
End SubMivel nem látszik a képen, melyik az utolsó felhasznált oszlop a táblázatban, Z-ig törlök, ill. szúrok be cellákat.
-
KubanitoS
veterán
válasz
poffsoft #28078 üzenetére
Sajnos majd csak holnap tudom kipróbálni ezt a megoldást, a fáradozásotokat előre is köszönöm!
Itt egy kép, hogy jobban érthető legyen a dolog.
A táblázat számozása 1-25-ig van per oldal. A képen az első oszlopban a 6. és 7. sorban látszódik egy duplázott dátum, alatta ugyanígy folytatódnak a duplázott dátumok a 25. sorig. A munkafüzet következő oldala ugyanígy néz ki, 1-25 közötti számozással, valamint felette a fenti képen is látható "fejléccel". A dátumok viszont folytatódnak oldalról oldalra.
A probléma abban rejlik, hogy a képen is látható két dátum nem az első sorszámnál kezdődik, hanem a 6-7-nél. Azt kellene megoldani, hogy az összes dátum feljebb kerüljön öt sort. Ez a már említett "fejléc" miatt nem lehetséges. A dokumentum nagyjából ötven oldalból áll.
-
Louro
őstag
válasz
poffsoft #28056 üzenetére
Az Indirekt függvénnyel az a baj, hogy csak egy cellát képes átemelni a másik dokumentumból.
Nekem az kellene, hogy van egy könyvtárstruktúra. Év/Hónap/Év_Hónap_Nap.xlsx
Azért, hogy rengeteg emberre ne cserélgessem le egyenként, ezért lenne jó úgy megírni egy DARABTELI-t vagy FKERES-t, hogy a fájl elérését dinamikusság tenném. Szívem szerint makróval csinálnám, de akik használni fogják, ők nem akarnak makrózni. (Aztán lehet erősebb leszek
)
Bár nem az se ment, amit Fferi javasolt pár hónapja, hogy =[hivatkozottfájlnév]munkalap!cella. Nem húzta át a hivatkozott adatot.
Én az ilyeneket úgy oldom meg, hogy megnyitom a fájlt a makróval, átmásolom az eredményt és bezárom a forrást.
-
Törpella
csendes tag
válasz
poffsoft #27930 üzenetére
De igen, mutatja, vlookup függvényre hivatkozik. Az viszont rendesen működik, kivéve, ha kézzel törlöm a comboban levő értéket :/
A tartományban, ahol a függvény keres beszúrtam egy üres sort a tetejére, de asszem nem ez a megoldásÍgy vagy ezt a beállítást kellene megtalálnom, hogy ne jelezzen hibát, vagy a kézzel történő belenyúlást tiltani :/ Egyik se megy egyedül
-
Traxx
őstag
válasz
poffsoft #27868 üzenetére
Szerintem én fogalmaztam kicsit nemjól
Ez a táblázat az, amiben először is segítettél
Ez a napi gyártást lenne hivatott nyomon követni (és bár a mostani állapotában remekül működik, kaptam egy újabb feladatot, ebben nem tudtam előre lépni). A táblázat napi szinten lenne ugye töltögetve és frissítve, mindig az éppen aktuális termékekkel. Ezeket a termékeket, ill. a napi keletkező mennyiséget szeretném átvezetni másik munkafüzetbe, esetleg munkalapra, lehetőleg úgy, hogy ne legyen vele extrasok meló, tehát ne ctrl+c ctrl+v módszerrel kelljen áthozni a terméket, mennyiséget, stb. Magyarán pl. az E4, H4 cella tartalma kerülne át a másik munkafüzetbe, pl. a D-H10 és sz I-J10 cellába:
A problémám az, hogy az első munkafüzetlap ugye minden nap cserélődne, ha a termék nem is, de a darabszám biztosan nem lesz ugyanaz. Tehát a másnap termése bekerülne a P-T10 és az U-V10-be, akkor azt nem tudom úgy megtenni jelen tudásom szerint, hogy képletet vagy egyszerű hivatkozást használok, mert akkor a régebbi adatok is módosulnának. Csak a másolás-beillesztés lenne a jó eddig - vagy valami olyan módszer, ha van, ami "békén hagyja" a már eddig rögzítetteket, és ahhoz nem piszkál hozzá, tehát statikus lenne már azon cellák tartalma, vagy ha eszedbe-eszetekbe jut más értelmes megoldás, azt is szívesen venném
A másolás-beillesztést azért szeretném megkerülni, mert jó sok gépnél kellene minden nap megoldani, és amennyire lehet, szeretném leegyszerűsíteni a folyamatot.
Remélem érthetően írtam le és köszönöm
-
Traxx
őstag
válasz
poffsoft #27832 üzenetére
Köszönöm
Az első része kifogástalan, a feltételes formázásnál a =DARAB($H4)=1 képletet alkalmaztam, ahol a H oszlopba kerülnek rögzítésre a kiszállítások. Ez nagyon jól működik
Viszont az érvényességes részét nem értettem, mert olyat nem leltem, vagy csak nagyon vak vagyok, igaz 2003-as excelt használok (bár ebben az esetben úgy vettem észre, hogy nem is szükséges, hogy legyen).
Talán ez, vagyis a 2003-as excel az oka annak is, hogy a 2. problémámra írt megoldásod nem működött, mivel azt kapom, hogy a feltételes formázáshoz beírt képlet nem mutathat más munkafüzetlapra. Nekem pedig a megrendeléses táblázatból olvasódnak át az adatok a gyártásosba, nem fordítva. Ráadásul már nem egy, hanem 2 ilyen gyártásos munkalapom van, hogy ne legyen egyszerűbb a sorsom
A határidő cellájának színezése jó ötlet, ezt megtettem a gyártásos lapon is, viszont logikus, hogy a megrendelésnél is felvezetem
De itt kicsit csonkítva tenném meg: a feltételes formázásnál a 2003-as excelben csak 3 kritériumot tudok megadni. Az elsőt ugye lefoglalja az, amire adtál megoldást, tehát a kiszállítások figyelése, a 2.-3. at használom fel erre: pl. 1 héttel a lejárat előtt beszínesedik, határidőn túl meg mondjuk piros lesz. =E4<MA()+8 és =E4<MA()+1 formát használva, ahol E4 a határidőt tartalmazó cella. Egy gondom viszont van: ha lemásolom a feltételes formázást, akkor az üres, adatot nem tartalmazó cellák is eleve színesek lesznek. Erre van valamilyen kiegészítés? Tudom, a legegyszerűbb egy újabb feltétel hozzáadása lenne, mely kizárná az ürességet, de ez nem kivitelezhető
Köszönöm még egyszer
-
Fferi50
Topikgazda
válasz
poffsoft #27720 üzenetére
Szia!
Szerintem ezt több lépésben tudod csak megnézni.
1. Selection.Cells.Count=1 akkor biztosan nincs összevonva, mert az összevont cellákat nem tudod egyedüliként kijelölni.
2. Selection.Cells.Count>1, akkor meg kell nézni a Selection.MergeCells tulajdonságot (értékeit írtam korábban).Üdv.
-
Fferi50
Topikgazda
válasz
poffsoft #27711 üzenetére
Szia!
Bocs, de én úgy gondolom, hogy a B1:B3 selection az nem egyenlő összevont cellákból álló tartománnyal, hanem csak 3 cellával. Ez igaz a C1:C3 tartományra is, Illetve, mindkét tartományban ettől függetlenül lehetnek összevont cellák!!
Ezért mindenképpen meg kell nézni a MergeCells tulajdonságot.
Ez úgy viselkedik, ha a kijelölt tartomány összevont, akkor True, ha vegyes, akkor Null, ha nincs benne összevont cella, akkor False az értéke.Azt, hogy összefüggő-e a kijelölés, az Areas tulajdonsággal tudod megnézni. Ha Selection.Areas.Count<>1, akkor a kijelölés nem összefüggő. A Count megmondja, hány részből áll a kijelölés, ezeken külön-külön kell végigmenni.
Az Activecell.Mergearea.Cells.Count pedig csak azt az egy cellát nézi, amit éppen kijelöltél - többszörös kijelölésnél is! - tehát félrevezető eredményt ad.
Üdv.
-
azopi74
addikt
válasz
poffsoft #27697 üzenetére
Hát igen, erről beszélek én is, de azt írtam, hogy a nagy kérdés az, hogy mi a cél és mi a struktúrája az alapadatoknak. Igen, lehet, ez is megoldás, ha csak egy oszlopról beszélünk, sőt, be lehet izzítani a name managert is, és akkor segédoszlop se kell, de ha egész munkalapról beszélünk, már kicsit komplikáltabb a dolog (de persze megoldható makró nélkül az is) , ha viszont az egész munkafüzet összes munkalapjának öszes cellájáról, akkor azt már makró nélkül nemigen tudom elképzelni, és még azt a makrót is brutálisan optimalizálni kell, hogy ne eméssze fel az erőforrásokat
-
Delila_1
veterán
válasz
poffsoft #25624 üzenetére
Mindkét makró az A oszlopra vonatkozik.
Összefűzött cellák szétválasztása:
Sub Szetvalaszt()
Dim sor As Long, usor As Long
usor = Range("A" & Rows.Count).End(xlUp).Row
For sor = usor To 2 Step -1
If Range(Cells(sor, "A"), Cells(sor - 1, "A")).MergeCells Then
Range(Cells(sor, "A"), Cells(sor - 1, "A")).MergeCells = False
Cells(sor, "A") = Cells(sor - 1, "A")
End If
Next
Range("A1:A" & usor).SpecialCells(xlCellTypeBlanks).Select
Selection.FormulaR1C1 = "=R[-1]C"
Columns("A:A").Copy
Range("A1").PasteSpecial Paste:=xlPasteValues
End SubAzonos tartalmú cellák összevonása:
Sub Osszevon()
Dim sor As Long, usor As Long
usor = Range("A" & Rows.Count).End(xlUp).Row
For sor = usor To 2 Step -1
If Cells(sor, "A") = Cells(sor - 1, "A") Then
Cells(sor - 1, "A") = ""
Range(Cells(sor, 1), Cells(sor - 1, 1)).MergeCells = True
End If
Next
End Sub -
csferke
senior tag
válasz
poffsoft #16474 üzenetére
Poffsoft és Delila!
Köszönöm fáradozásotokat.
DE rájöttem valamire
Ez a mondat Valószínűleg az a gondod, hogy a VBA csak "angolul" tudja a formátumokat... ragadta meg a figyelmem.
Windows-ban átállítgattam a számok formázását "angolosra" a magyar-nál és a szerb-nél ( ezres"." tizedes"," ) és láss csodát. Mindenféle nyakatekert vizsgálatok nélkül jól működik a számbevitel VBA-ból is meg simán az Excel-ből is.Az ember mindig tanul/rájön valamire.
köszi
-
Mauzes
addikt
válasz
poffsoft #16457 üzenetére
Érdekes, nekem totál fos és csúnya eredményt ad, ha egy nagyobb táblát csak úgy bemásolok, formázni meg rémálom.
Na mindegy, csak egyszerűen nem értem, hogy amit a képernyőn látsz, az mégis miért tér el a valóstól. A Word és Ppt legalább ezzel nem küzdenek (még ha mással sajnos igen).
-
psg5
veterán
válasz
poffsoft #16411 üzenetére
Köszi,igen így márpróbáltam,de úgy 1300 karakternél többet akkor sem enged mutatni.
Valahol olvastam, hogy 32.676 karaktert be lehet írni, de csak 1024 fog látszani. 1024-től biztosan több látszik, ezért fura ez,de 1300 felett már nem engedni "látszani"
F2-vel kiírja ugyan,de marad fixen,+ enterrel nem csinál semmit
Na ezzel lehet kezdeni valamit? -
gepesz13
tag
válasz
poffsoft #16274 üzenetére
Azigazság az, hogy eg vén F.SZ vagyok aki szeretne sokmindent megtudni az informatikáról amit lehet öreg korára, tehát a Ti egyértemű instrukciótok azért nem mindíg egyértelmű.
Ha ezt a dolgot meg tudom csinálni akkor "" király vagyok magamnak""
Köszönök minden segítséget!
Trehát bocsánat, értetlen vagyok
Köszi, és üdv -
gepesz13
tag
válasz
poffsoft #16250 üzenetére
Sajnos most sem működik, vagy legalábbis nem azt csinálja amit szeretnék.
Lehet hogy nem írtam egyértelműen, hogy mit kellene a képletnek csinálnia.Van egy táblázat, ebben egy munka1 nevű tábla.
Ennek a táblának
A oszlopában városnevek vannak felsorolva.
B oszlopában a városok mellett Budapesttől mért távolsága van felsorolva.Arra lenne szükség, hogy a táblázat munka2 nevű táblájának A oszlopába sorolom fel a városneveket tetszőleges sorrendbe, a képlet pedig B oszlopba írja mellé a hozzá tartozó távolságot.
Üdv, és köszi
-
zup
csendes tag
válasz
poffsoft #16035 üzenetére
Szóval akkor még egyszer megpróbálom:
szeretném megjeleníteni, hogy adott ember, adott napon megjelent-e, az eredményt egy naptárszerű táblában kéne megjeleníteni. (összesítés is jól jöhet, illetve auto formázás)
Példa:
megjegyzés:
A-C oszlop az adattábla kinézete - ezt így kapom
F-től M oszlopig pedig ahogy kb ki szeretném, hogy nézzen -
sztanozs
veterán
-
sztanozs
veterán
válasz
poffsoft #15972 üzenetére
A set nélküli értékadás azért fut le (ha nincs egzaktul definiálva a változó), mert ha nem sikerül objektumként átadnia, akkor a hívás vissza tudja adni a range értékét is (mint a default Value property értéke - ami ráadásul nem a range címe, hanem a range első elemének a tartalma) és ezt egy későbbi Range hívásban (mint ahogy csináltad is) fel lehet használni. A probléma az , hogy nem biztos, hogy jó (sőt szinte biztos, hogy nem jól felhasználható) értéket ad vissza a Range a default property-n... Azt viszont nem tudja felhasználni a Range függvény, ami ezt a hibát adja vissza...
-
Mutt
senior tag
válasz
poffsoft #15888 üzenetére
Hello,
Ha csak ennél a fájlnál viselkedik, akkor ne engedd futtatni a makrókat a fájlban.
Ha safe módban indítod az Excelt akkor is így viselkedik? Nyomj Shift-et amikor indítod az Excelt vagy a /safe kapcsolóval indítsd parancssorból.
Ha ekkor minden rendben akkor az XLSTART mappában lévő fájlol vmelyike a bűnös, mozgasd el innen a fájlokat és így probáld ki az Excelt.Üdv.
Új hozzászólás Aktív témák
Hirdetés
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- Antivírus szoftverek, VPN
- Bitdefender Total Security 3év/3eszköz! - Tökéletes védelem, Most kedvező áron!
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- Kaspersky, McAfee, Norton, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- Bomba ár! Dell Latitude E6530 - i5-3GEN I 4GB I 500GB I HDMI I 15,6" HD+ I W10 I Garancia!
- Telefon felvásárlás!! Samsung Galaxy S24/Samsung Galaxy S24+/Samsung Galaxy S24 Ultra
- ÁRGARANCIA!Épített KomPhone i5 13400F 16/32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- Samsung Galaxy A12 64GB, Kártyafüggetlen, 1 Év Garanciával
- Eladó Apple iPhone Xr 64GB fekete / ÚJ KIJELZŐ / 100% AKKU / 12 hónap jótállással!
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest