Hirdetés

2024. május 4., szombat

Gyorskeresés

Útvonal

Fórumok  »  OS, alkalmazások  »  Microsoft Excel topic (kiemelt téma)

Téma összefoglaló

Téma összefoglaló

  • Utoljára frissítve: 2023-11-13 08:31:56

LOGOUT.hu

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.

Összefoglaló kinyitása ▼

Hozzászólások

(#14001) -Solt- válasza Delila_1 (#14000) üzenetére


-Solt-
veterán

Ó, elnézést Hölgyem! :)

Köszönöm a gyors választ! Annyi lenne még a kérdésem, hogy mennyiben változik a képlet, ha nem csak összeadásról, hanem szorzás is lenne benne?

www.smart-bus.hu

(#14002) lappy válasza -Solt- (#14001) üzenetére


lappy
őstag

=HA(ÜRES(A1);"0 Ft";HA(SZÖVEG.E(A1);SZUM(B1:C1;SZORZAT(D1:E1);""))

[ Szerkesztve ]

Bámulatos hol tart már a tudomány!

(#14003) lappy válasza lappy (#14002) üzenetére


lappy
őstag

=HA(ÜRES(A1);"0 Ft";HA(SZÖVEG.E(A1);SZUM(B1:C1;SZORZAT(E1;F1));""))

Bámulatos hol tart már a tudomány!

(#14004) cousin333 válasza buherton (#13992) üzenetére


cousin333
addikt

Nem hiszem, hogy korlát lenne. Inkább a 81. sorban (vagy rekordban) van valami, ami nem tetszik neki (pl nem szám van ott, ahol ő azt vár). Nem ír ki valami hibaüzenetet?

De továbbiakat csak akkor tudunk mondani, ha valami konkrétumot kapunk.

[ Szerkesztve ]

"We spared no expense"

(#14005) buherton válasza cousin333 (#14004) üzenetére


buherton
őstag

Közben rájöttem, hogy user error volt :) . A hiba üzenet szövege ennyit volt: 400 :D . Az volt a probléma, hogy egy cellában lévő értékből munkalap nevet szerettem volna készíteni. Ez mind addig jó volt, amíg bele nem ütközött egy olyan értékhalmazba, amiben volt kettős pont. Emiatt dobta a hiba üzenetet nekem.

Pont ma volt egy másik hasonló eset, amikor egyik excel fájl cellájáról egy másik excel cellájára hivatkoztam (ezt is automatizáltam), és az elérési útban nem lehet aposztróf, ezért ekkor is ilyen 400-as hibát dobott vissza.

Ez a harmadik VBA-m, és az ilyen "apróságok"-ra még nem tudok könnyen rájönni, mert nincs meg a rutin, hogy hol mi miatt állhat meg. Osztályokkal is sokat bajlódok, mert nem mindegy, hogy mikor mit írok.

Az már csak hab a tortán, hogy két gépen dolgozok. Egyiken magyar office 2010 van, a másikon angol office 2003. Fájlformátumot a 2010-ben mindig be kell állítani, az ilyen Sheets("Sheet1")-eket el lehet felejteni, túl nagy cellát sem lehet másolni 2003-ban, stb...

Eddig teljesen hidegen hagyott az excel, most meg teljesen bele zúgtam, hogy bármit megcsinálhatom benne. :D

Hogyan lehet olyan function készíteni, hogy ne legyen bemenő változó, és ne térjen vissza semmivel? Egyáltalán lehet ilyen? Formázásokat szeretném kitenni függvényekbe. Vagy ilyenkor az objektum referenciája lesz a bemenő változó?

[ Szerkesztve ]

tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!

(#14006) cousin333 válasza buherton (#14005) üzenetére


cousin333
addikt

"Az már csak hab a tortán, hogy két gépen dolgozok. Egyiken magyar office 2010 van, a másikon angol office 2003."

Részvétem... :)

"Hogyan lehet olyan function készíteni, hogy ne legyen bemenő változó, és ne térjen vissza semmivel? Egyáltalán lehet ilyen?"

Tudtommal nem lehet. A function azért function, mert értékkel tér vissza. Cellát formázni meg pláne nem lehet vele, még azt sem, amelyikbe beleírod.

Szubrutinnal viszont tudsz formázni, nem kell, hogy bemenete vagy kimenete legyen. Csak a hívását kell megoldanod valahogy. Vagy egy másik függvény triggereli (szubrutin, nem function!), vagy mondjuk egy gombra kötöd.

[ Szerkesztve ]

"We spared no expense"

(#14007) -Solt- válasza lappy (#14003) üzenetére


-Solt-
veterán

Köszönöm mindenkinek! Küzdök tovább... :)

www.smart-bus.hu

(#14008) buherton válasza cousin333 (#14006) üzenetére


buherton
őstag

Nagyon köszi a segítséget!

Sub asd()

Sheets(1).Activate
Sheets(2).Activate

Sheets.Add

End Sub

Private Sub Workbook_NewSheet(ByVal Sh As Object)

Sh.Cells.Interior.Color = 15773696

End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

Sh.Cells.Interior.Color = -16776961

End Sub

Két formázást használok egy excelen belül, így két utat kellett találni, és meg is van :D . Áááh baromi jó ez a VBA.

Még egy kérdésem lenne, aztán leállítom magam. Ha mondjuk van egy kifejezés Static Planar, akkor hogyan tudom pl. a két nagy kezdő betűt kiszedni? Illetve pontosabban megfogalmazva, hogyan tudok egy stringen belül egyesével végig menni a karakteren? Ezzel együtt, hogyan tudok összeállítani stringet?

tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!

(#14009) Delila_1 válasza buherton (#14008) üzenetére


Delila_1
Topikgazda

Ehhez nem kell makró. A =KISBETŰ(A1) függvény megteszi.

Mire jó egymás után a
Sheets(1).Activate
Sheets(2).Activate
?

Ez annyit csinál, hogy egymás után a két lapot aktívvá teszi. Mivel az első lap aktiválása után nem csinálsz semmit, az első sor kihagyható.

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#14010) buherton válasza Delila_1 (#14009) üzenetére


buherton
őstag

Köszi! Én vagyok a hibás, mert nem írtam le rendesen a feladatot. Az a feladat, hogy adott pl. a Static Planar, akkor abból a nagy betűket olvassa ki, és tegye bele egymásik cellába. Viszont ha nem több szóból áll a kifejezés, akkor olvassa be az első nagy betűt, és a közvetlenül utána közvetkező kisbetűt is. Bonyolódik a dolog, azzal, hogy nem lehet két azonos rövidítés.

Csak példának lett betéve :) . A másodiknál különböző műveleteket csináltam, hogy még mire fog leftuni az sheet active szubrutin

tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!

(#14011) Cheesy


Cheesy
őstag

Sziasztok

A következőt nem sikerül megoldanom:

1. A1-A5 cellákban zsalukő méretek
2. B1-B2 cellákban zsalukő súlyok

Egy tetszőleges cellába (pl. másik munkalap D1) kellene egy legördülő menü, mely tartalmazza A1-A5 cellák tartalmát (idáig megy, el is neveztem "méretek"-nek), majd a mellette lévő cellába kiírja a hozzá tartozó súlyt. Tehát, ha A2-t választom legördülőből, akkor B2-t írja ki a másik munkalapon a D2-be.

Remélem érthető valamelyest... segítségeteket előre is köszönöm!

www.vakbelmutet.hu

(#14012) lappy válasza Cheesy (#14011) üzenetére


lappy
őstag

=FKERES(Munka1!A1;Munka1!A1:B5;2;0) egy egyszerű fkeres-el csak minden méret mellé rakd oda a súlyt is

[ Szerkesztve ]

Bámulatos hol tart már a tudomány!

(#14013) lappy válasza lappy (#14012) üzenetére


lappy
őstag

=FKERES(D1;Munka1!A1:B5;2;0)

[ Szerkesztve ]

Bámulatos hol tart már a tudomány!

(#14014) Cheesy válasza lappy (#14013) üzenetére


Cheesy
őstag

köszönöm!

www.vakbelmutet.hu

(#14015) Delila_1 válasza buherton (#14010) üzenetére


Delila_1
Topikgazda

Az A1:A10 tartomány rövidítését beírja a B1:B10 tartományba, és megvizsgálja a COUNTIF (darabteli) függvénnyel, hogy hány db ilyen van a B oszlopban. Ha 1-nél több, akkor a B oszlopba az A megfelelő cellájának az első és harmadik betűjét írja. Lehetne cifrázni, mert előfordulhat, hogy több azonos alakul ki így is. Ahhoz újabb ciklusok kellenek, egy Do-Loop, és egy For-Next. Ha több időm lesz, és szükséges, megírom.

Sub rovidites()
Dim sor%, szo$, betu%
For sor% = 1 To 10
szo$ = Cells(sor%, "A")
If InStr(1, szo$, " ") Then 'ha van benne szóköz
For betu% = 1 To Len(szo$)
If Asc(Mid(szo$, betu%, 1)) > 64 And Asc(Mid(szo$, betu%, 1)) < 91 Then 'nagybetű
Cells(sor%, "B") = Cells(sor%, "B") & Mid(szo$, betu%, 1)
End If
Next
Else
Cells(sor%, "B") = Left(szo$, 2)
End If
If WorksheetFunction.CountIf(Columns(2), Cells(sor%, "B")) > 1 Then _
Cells(sor%, "B") = Left(szo$, 1) & Mid(szo$, 3, 1)
Next
End Sub

[ Szerkesztve ]

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#14016) detroitrw


detroitrw
addikt

Sziasztok!

Egy olyan kérdésem lenne hogy miként lehet egy bizonyos cellába iratni a fájl mentési idejét?
Élőlábnak már megcsináltam, de fogalmam sincs hogy kéne konkrét cellába (L5) rakatni :(

ez az élőláb tartalma:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Calculate the date and time stamp string
Dim TS As Date
TS = Now
Dim TSS As String
TSS = FormatDateTime(TS, 1) & " "
'Place time stamp into the cell labeled SaveTimestamp
'Range("SaveTimestamp").Value = TSS
'Place time stamp into the header or footer for printing
Dim WS As Worksheet
For Each WS In Worksheets
WS.PageSetup.LeftFooter = " City," & TSS
'WS.PageSetup.LeftFooter = ThisWorkbook.FullName
Next WS
End Sub

miként kéne átírni hogy az L5-ös cellába legyen a tartalom?

Előre is köszönöm a segítséget :))

:R

(#14017) Oly


Oly
senior tag

Sziasztok

Adott egy ComboBox, aminek a forrását egy nagy adattáblából akarom szűréssel megoldani.
A Rowsource-ba kellene beraknom egy filtert? :U

Az űrlapon van egy TextBox, ami alapján a táblában lévő adatokból csak a hozzá tartozót kellene betöltenie.

Gyümölcs - Alma
Gyümölcs - Körte
Autó - Opel
Autó - BMW
Szín - Zöld
Szín - Kék

Ha a textbox értéke gyümölcs, akkor a Combobox-ban csak az Alma és Körte legyen.
A dolgot bonyolítanám azzal, hogy a ComboBox-ban 2 oszlop értékét is megjeleníteném.

Segítségetek előre is köszönöm.

SonyEricsson T20 - T68 - T610 - K700 - W800 - K750 - K800 - C702 - P1 - MOTO Defy - Galaxy S Advance - Galaxy S4 - Lumia 820 - Honor 7 - iPhone 5S

(#14018) Oly válasza Oly (#14017) üzenetére


Oly
senior tag

Utánajártam... Nem lehet megcsinálni csak segédtáblával... Azzal megmókoltam.

SonyEricsson T20 - T68 - T610 - K700 - W800 - K750 - K800 - C702 - P1 - MOTO Defy - Galaxy S Advance - Galaxy S4 - Lumia 820 - Honor 7 - iPhone 5S

(#14019) bozsozso


bozsozso
őstag

Sziasztok,

Szeretnék makróban olyat csinálni, hogy egy adott oszlopban adott szöveget keressen meg és ha megtalálta akkor a ennek a sornak az összes adatát másolja át mondjuk az adatok munkalap 2.sorába majd keresi a következőt ha megvan az meg mehet a következő sorba. Makrórögzítéssel megcsináltam auto szűrő majd másol beilleszt a megfelelő helyre, de nincs ettől jobb, "elegánsabb" megoldás? Valamint esetleg olyat, hogy ha az oszlopban amiben keresek bármi módosítás történik akkor legyen végrehajtva a makró?
Pl.:

Érték1 jó 5,00
Érték2 rossz 10,00
Érték3 nagyon rossz 15,00
Érték4 jó 48,00

Szeretném ahol jó szerepel az kerüljön át az adatok munkalapra a 2. sortól kezdődően.

Érték1 jó 5,00
Érték4 jó 48,00

Előre is köszönöm a segítséget.

[ Szerkesztve ]

(#14020) detroitrw válasza detroitrw (#14016) üzenetére


detroitrw
addikt

közbe megleltem :))

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cells(Row, Column) = Date
End Sub

[ Szerkesztve ]

(#14021) detroitrw


detroitrw
addikt

Ezt lehetne szerintetek valahogy automatizálni?

- a zöld a fix
- a sárgába kéne az adatokat automatikusan bevinni amíg a kék el nem éri a 0 (nulla) értéket
majd sort vált s folytatja tovább ...
- remélem érthető :))

:R

(#14022) cousin333 válasza detroitrw (#14021) üzenetére


cousin333
addikt

Ki szerelmes ennyire a szorzatösszeg függvénybe, hogy még egy egyszerű kivonáshoz is ezt használja? :))

Gondolom a zöldben megadott számú és hosszúságú léceket(?) kellene kihozni a megadott hosszakból úgy, hogy minél optimálisabb legyen az elosztás.

"We spared no expense"

(#14023) detroitrw válasza cousin333 (#14022) üzenetére


detroitrw
addikt

:B a szerény személyem az :U

igen végülis ez lenne a lényege, valahogy meglehetne oldani? :F

[ Szerkesztve ]

(#14024) buherton válasza Delila_1 (#14015) üzenetére


buherton
őstag

Köszi! Végre ezen a vonalon is elindulhatok :DDD . Csak a probléma, hogy nincs elég időm kidolgozni rendesen :( .

Lehet olyat csinálni, hogy a makróból létrehozott excelhez rendelek saját makrót? Például én azt szeretném ha a makró által létrehozott excelben ha beírok egy számot akkor a másik lap váltson piros háttérre valamilyen esemény hatására. Nekem elég az absztrakt megközelítés is. Fontos, hogy ahhoz az excelhez tartozzon, vagyis önállóan működjön, és makró legyen ne függvény, és nem tudom hogy angolul hogyan keressek rá.

tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!

(#14025) Delila_1 válasza buherton (#14024) üzenetére


Delila_1
Topikgazda

Költözés (és T-home) miatt nincs internetem, ezért nem válaszoltam előbb.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" And IsNumeric(Target) Then
Sheets("Munka2").Cells.Interior.ColorIndex = 3
End If
End Sub

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#14026) bozsozso válasza bozsozso (#14019) üzenetére


bozsozso
őstag

Sziasztok,

Ebben valaki nem tudna segíteni?

(#14027) #90999040 válasza detroitrw (#14023) üzenetére


#90999040
törölt tag

Megoldani meg lehet, csak kérdés, hogy mennyi idő alatt. :DDD

Sima függvényekkel szerintem teljesen kizárt, vba-val lehetséges. De azért gondolj bele:

Úgy látom, hogy 72 darab léc van jelenleg. Ennek a 72 elemnek kell(ene) az ismétlés nélküli permutációja, ami ugye 72! (faktoriális) ez ~~8,50478588567862E+101 eset, azaz kb. 8 a 101-ediken. :D Namost ezt ha most elindítod, akkor talán( :F ) 1 hét múlva végez.

Esetleg azt meg lehetne próbálni, hogy bizonyos hulladékszálakot megadni, és ha ez a százalék elég nagy, akkor van esély, hogy előbb talál egy ezen belülit.

Vagy random generálással is lehetne, szerencsés esetben előbb-utóbb beleakad egy alkalmas lehetőségbe....

(#14028) #90999040 válasza #90999040 (#14027) üzenetére


#90999040
törölt tag

Bocs, az előbb elszámoltam.Nem 8 a 101-ediken, hanem 6 a 103-adikon. :B

(#14029) cousin333 válasza #90999040 (#14027) üzenetére


cousin333
addikt

Szerintem meg ismétléses permutáció lenne, mert az egyforma hosszú léceket nem lehet megkülönböztetni. Akkor pedig 72! / (12! * 6! * 6! * 12! * 24! * 12!), ami persze még mindig nem kevés.

De a megoldás nem ilyen bonyolult, mert nem kell ennyi esetet végigvenni éppen azért, mert a szálak hossza fix, tehát a lécek nem jöhetnek akármilyen sorrendben.

[ Szerkesztve ]

"We spared no expense"

(#14030) detroitrw válasza #90999040 (#14027) üzenetére


detroitrw
addikt

ennél már akkor egyszerűbb ha egy táblakiosztó progiba beadom a tábla szélességű hosszakat s így úgy működne mintha szálkiosztana ...

de ott is ismételten kézzel kéne bevinni az adatokat ami további hibalehetőséget generál

mert az a kis egyszerű excel amit csináltam legalább képes arra hogy a végösszegeket ellenőrizze hogy biztos minden elemből a megfelelő darabszám szerepel e

a táblakiosztási módszerbe meg az lenne a jobb hogy ott tudok a vágóréssel is kalkulálni

mod: s merre lehetne elindulni amúgy?

[ Szerkesztve ]

(#14031) #90999040 válasza cousin333 (#14029) üzenetére


#90999040
törölt tag

Igen, ismétléses kell, de abból indultam ki, hogy ahhoz, hogy algoritmus szintjén ki tudd szűrni az ismétlődéseket, ahhoz jó eséllyel le kell generálni az ismétlés nélküli eseteket...
De ha felesleges körök nélkül sikerülne is csak az ismétléseseket egyből eltalálni, még az is 1,7322649796561E+48, szóval iszonyatosan sok, és akkor még nem is vettük figyelembe, hogy ez csak a konkrét példára vonatkozik, ami természetesen még negatív irányba is változhat...

De a megoldás nem ilyen bonyolult, mert nem kell ennyi esetet végigvenni

Semennyire sem bonyolult, ha írsz olyan algoritmust, ami elsőre eltalálja a legjobb megoldást, mert ekkor 1 kísérlet bőven elég. :C

Azon az úton még el lehetne indulni, hogy az adott fix hossz ismeretében csak a lehetséges megoldásokat figyelembe venni. Ez az algoritmus viszonylag gyorsan lefut(kb. 1 másodperc sem), de a gondok utána jönnek. Ugyanis ezekkel az adatokkal a lehetséges esetek száma 1048. Ebből 238 olyan, amelyekre még a legrövidebb szál sem férne rá pluszban a 6 méterre. Ha biztosra kellene menni, akkor a következő eseteket kellene vizsgálni:

N K
1048 19
1048 20
1048 21
..... és még ki tudja meddig???

mert a hosszokból az következik, hogy elvileg 19 darab 6 méteresnek elégnek kellene lennie(elméletileg). Azért több K-ra, mert egyáltalán nem biztos, hogy a valóságban is elég a 19 szál(mi van, ha pl. csak 23 szál a legkedvezőbb???). Ha az 1048 helyett a 238-al(tehát csak azokkal foglalkozunk, amire több már biztos, hogy nem fér rá), még akkor is elég sok esetnél tartunk...

(#14032) detroitrw válasza #90999040 (#14031) üzenetére


detroitrw
addikt

nem a legjobb megoldás lenne a lényeg, mivel kézzel se arra törekszek!
prioritás alapján megyek végig szal előre kerülnek a legmagasabb értékek ... mert fölösleges először a kisebbeket kiosztani

ill. ott van az is amit említettem hogy egy bizonyos cella értékétől függően új sort válthatna
pl. ha az érték ~200 -ra csökken (ill. min. db x 5 meglegyen)

[ Szerkesztve ]

(#14033) cousin333 válasza detroitrw (#14032) üzenetére


cousin333
addikt

A sokféle lehetséges variáció miatt nem elhanyagolható a kézi módszer.

Én készítettem egy gépi változatot, ami a Solver funkcióra alapoz, és brute-force módszert használ: [link].

Persze igyekeztem minimalizálni a lehetőségeket számos korlátozás bevezetésével. Mindenesetre nálam gond nélkül futott egy órát, és még nem adott végleges eredményt. Igazából nem tudom, meddig futna...

Az egyes cellákat kicsit nehéz kibogarászni, mert a lehető legtöbb konkrét számot és a legkevesebb képletet szerettem volna felhasználni, így remélve azt, hogy gyorsul a számolgatás.

A lényeg, hogy az egyes sorokban látod a különböző elosztási típusokat (max. 5-öt), ahogy te is csináltad a kézi módszernél. A rendszer azt számítja, hogy melyik hosszból mennyit használjon, illetve az adott osztást hány lécen alkalmazza.

A Solver a maradék hosszok négyzetösszegét igyekszik minimalizálni, ami nem feltétlenül a legoptimálisabb cél, de talán nem okoz olyan nagy hibát.

[ Szerkesztve ]

"We spared no expense"

(#14034) detroitrw válasza cousin333 (#14033) üzenetére


detroitrw
addikt

Szia!

köszi hogy foglalkoztál vele :R
bár azt nem tudom miként lehet automatizálásra bírni :F
meg ezt még át kéne írni hogy másnak is érthető legyen

eddig ezt találtam [link]
elég komoly cucc s 1-2 esetbe kihozta kevesebb szálból
s nincs szükség gépelésre, copy&paste módszerrel fel lehet tölteni az adatot, ill az eredményt könnyen vissza lehet másolni
és még vágórést is meglehet adni :)
annyi hogy 60 napig ingyenes (na de akkor mire lenne jó a virtualpc? :DDD )

van egy másik is [link]
ezt viszont nem tudom beüzemelni :(

[ Szerkesztve ]

(#14035) buherton válasza Delila_1 (#14025) üzenetére


buherton
őstag

Ez idáig oké, de ezt hogyan tudom az összesre excel fájlra kiterjeszteni, hogy azok önállóan is tudjanak működni?

Közben van egy másik problémám is. Ezt "egyszerűen nem engedi bemásolni a cellába :( .

SheetNumberReport-ban 2 az érték, ami létezik.

ReportBook.Worksheets("Summary").Range(SheetNumberReport, "N") = "=IF(COUNTIF('CT alr. (Linux) - LT - 001'!H5:H31;Summary!Q2)='CT alr. (Linux) - LT - 001'!A5;Summary!Q2;Summary!Q3)"

A függvényt ha manuálisan másolom be, akkor jól működik!

[ Szerkesztve ]

tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!

(#14036) #90999040 válasza detroitrw (#14032) üzenetére


#90999040
törölt tag

Egy új munkalapra másold át az A1 : B7 tartományt(hogy az új munkalapon is az A1 : B7-ben legyen. Az A10-be írd be a 6000-et(mert milliméterben számol).
ALT+F11, majd INSERT menü -> Module.
Ebbe a modulba másold be ezt:

Sub frissit()
Set cel = Range("D1")
maxsordarab = 20000
sor = 1 + cel.Row
oszlop = cel.Column
eredetisor = sor

Range("A1").CurrentRegion.Sort Key1:=Range("A2"), Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
hosszok = Application.Transpose(Range("A2:A7"))
szalhossza = Range("A10").Value
darabok = Application.Transpose(Range("B2:B7"))
vegsodarabok = Application.Transpose(Range("B2:B7"))
For i = LBound(vegsodarabok) To UBound(vegsodarabok)
vegsodarabok(i) = Application.Min(Application.RoundDown(szalhossza / hosszok(i), 0), darabok(i))
Next

ReDim kimenet(1 To maxsordarab, 1 To 9)
ossz = 0
osszeg = 0
teljes = 0
n = UBound(darabok) - 1
ReDim tomb0(0 To n)
q = -1
Do
While q < n
q = q + 1
tomb0(q) = 0
Wend
ossz = ossz + 1

tele = True
m = 0
For i = 0 To n
If tomb0(i) < darabok(i + 1) Then
If osszeg + hosszok(i + 1) <= szalhossza Then
tele = False
Exit For
End If
End If
Next
If tele Then teljes = teljes + 1
Dim maxdarab As Integer
maxdarab = 200
If tele Then
For i = 0 To UBound(tomb0)
m = m + hosszok(i + 1) * tomb0(i)
kimenet(1 + sor - eredetisor, 1 + i) = tomb0(i)

If tomb0(i) <> 0 Then
If Application.RoundDown(darabok(i + 1) / tomb0(i), 0) < maxdarab Then maxdarab = Application.RoundDown(darabok(i + 1) / tomb0(i), 0)
End If
Next
kimenet(1 + sor - eredetisor, 1 + i) = (szalhossza - m) / szalhossza
kimenet(1 + sor - eredetisor, 1 + i + 1) = "*"
kimenet(1 + sor - eredetisor, 1 + i + 2) = maxdarab
sor = sor + 1
Else
For i = 0 To UBound(tomb0)
m = m + hosszok(i + 1) * tomb0(i)
kimenet(1 + sor - eredetisor, 1 + i) = tomb0(i)

If tomb0(i) <> 0 Then
If Application.RoundDown(darabok(i + 1) / tomb0(i), 0) < maxdarab Then maxdarab = Application.RoundDown(darabok(i + 1) / tomb0(i), 0)
End If
Next
kimenet(1 + sor - eredetisor, 1 + i) = (szalhossza - m) / szalhossza
kimenet(1 + sor - eredetisor, 1 + i + 2) = maxdarab
sor = sor + 1
End If

Do While q > -1
If tomb0(q) < vegsodarabok(q + 1) Then
tomb0(q) = tomb0(q) + 1
osszeg = osszeg + hosszok(q + 1)
If osszeg > szalhossza Then
osszeg = osszeg - hosszok(q + 1)
tomb0(q) = tomb0(q) - 1
osszeg = osszeg - hosszok(q + 1) * tomb0(q)
q = q - 1
Else
Exit Do
End If
Else
osszeg = osszeg - hosszok(q + 1) * tomb0(q)
q = q - 1
End If
Loop
Loop While q > -1
sor = sor - 1
For i = 1 To 9
kimenet(1, i) = kimenet(1 + sor - eredetisor, i)
kimenet(1 + sor - eredetisor, i) = ""
Next

ActiveWindow.FreezePanes = False
Range(Cells(eredetisor - 1, oszlop), Cells(maxsordarab, oszlop + 8)).ClearContents
Range(Cells(eredetisor, oszlop), Cells(eredetisor + maxsordarab - 1, oszlop + 8)).Value = kimenet
Range(Cells(eredetisor - 1, oszlop), Cells(eredetisor - 1, oszlop + 5)).Value = Application.Transpose(Range("a2:a7").Value)
Cells(eredetisor - 1, oszlop + 6).Value = "Hulladék"
Cells(eredetisor - 1, oszlop + 7).Value = "Teljes"
Cells(eredetisor - 1, oszlop + 8).Value = "Max darab"
Cells(eredetisor, oszlop).CurrentRegion.Sort Key1:=Cells(eredetisor, oszlop + 6), Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal

Cells(eredetisor, oszlop + 10).FormulaR1C1 = "=1+RC[-2]"
Cells(eredetisor + 1, oszlop + 10).FormulaR1C1 = "=(1+RC[-2])*R[-1]C"
Cells(eredetisor + 1, oszlop + 10).Copy Destination:=Range(Cells(eredetisor + 2, oszlop + 10), Cells(sor, oszlop + 10))

Cells(eredetisor, 1).Select
ActiveWindow.FreezePanes = True
End Sub

A makró elindítása után(itt arra figyelni kell, hogy az új munkalap legyen az aktív) a D:H oszlopokban megjelennek a darabszámok(a fejléc a hosszt tartalmazza). A J oszlopban a hulladék, a K oszlopban levő csillag azt jelenti, hogy az adott 6m-es szálra már a legkisebb(jelen esetben 410 mm-es) darab sem fér rá.
Az L oszlopban az adott szál maximális darabszáma szerepel.

A legfontosabb: N oszlopban jelzi, hogy hány esetet kellene megvizsgálni - no ez az, ami miatt napok/hetek/évek kérdése, hogy mikor végezne az összes eset megvizsgálásával.

[ Szerkesztve ]

(#14037) saab00


saab00
csendes tag

Sziasztok !

Egy olyan kérdésem lenne hogy hogyan lehet azt excelben(2003) megoldani, hogy van egy táblázatom napi dátummal,hónap, rendszámmal(összevissza), km stb.......és egy másik táblázatba a rendszám(sor)hoz és a hónap(oszlop)-t figyelembe véve összegezze az előző táblázatból az adatokat (pl. a km-t) (ugye egy rendszám többször is előfordul egy adott hónapban) ...vagyis hogy ne kelljen kétszer beírni ugyanazt az adatot de rendszám és hónap alapján szűrje és összegezze az értékeket !?
--
-
És még egy: az fkeres fügyvénynél be lehet azt állítani h a keresési tartományban(ami nincs alapból sorba rendezve) ha több találat van csak a legutolsót vegye figyelembe ill. h pl.a 3. oszlopban az egy sorral lejjebb lévőt adja eredményül ??
-
Köszönöm !

(#14038) detroitrw válasza #90999040 (#14036) üzenetére


detroitrw
addikt

hát ez így eléggé értelmezhetetlen adatsokaság :F

ezt nem lehet valahogy működésre bírni?

(#14039) föccer


föccer
nagyúr

Üdv!

Mivel tudom megoldani azt, hogy amikor makróbol akarok egy xls fájlt megnyitni, akkor az adott fájlt egy opendialog-ból lehessen kiválasztani.

Köszi,

üdv, föccer

mod:

Sub macro1()
Filter = "Excel files (*.xls),*.xls"
Caption = "Kérem, adja meg a fájl elérési útját!"
SelectedFile = Application.GetOpenFilename(Filter, , Caption)
ActiveSheet.Range("A1").Value = SelectedFile
End Sub

Ez így elvileg működik?

üdv, föccer

[ Szerkesztve ]

Építésztechnikus. Építőmérnök.

(#14040) bugizozi válasza föccer (#14039) üzenetére


bugizozi
őstag

Sub Get_Data()
FileToOpen = Application.GetOpenFilename _
(Title:="Please choose a file to import", _
FileFilter:="Excel Files *.xls (*.xls),")
''
If FileToOpen = False Then
MsgBox "No file specified.", vbExclamation, "Duh!!!"
Exit Sub
Else
Workbooks.Open Filename:=FileToOpen
End If
End Sub

VCP7-DCV, CCNA ||| Ami működik, ahhoz nem szabad hozzányúlni!

(#14041) föccer válasza bugizozi (#14040) üzenetére


föccer
nagyúr

Zsír, köszi :R

Ideje lenne találnom egy jó kis listát az WBA objektumokról. :)
üdv, föccer

Építésztechnikus. Építőmérnök.

(#14042) zz76zz


zz76zz
csendes tag

Sziasztok!

Kezdő (illetve már elfelejtő) Excel VB író vagyok.
A kérdés az lenne, hogy egyáltalán kell e makró?

A feladat kellemetlenül sok sorból kitörölni azokat az oszlopokat, amik nem felelnek meg bizonyos kritériumoknak.
A lényege ennek az lenne, hogy pdf ből áttesznek nagy sok sort és a gombnyomásra rendeződnének az adatok. Az oszlopszétszedés nem gond, makro rögzíti majd.
Egy laza ha függvénysorral le tudom szűkíteni, hogy mondjuk az adott megmaradni kívánt sorban van e egy x vagy sincs. (sgondolom a makrorögzítő ezt is veszi). De hogyan szabadulok meg úgy a többi sortól, hogy a sorrendem megmaradjon?
Vagy egyszerűbb lenne, ha mindent egy makro végezne?
Makro tud sort törölni bonyolult szövegbeni tartalmazódás szerint?
Túl sokat kérdezek?
Túl össze vissza? Bocs
:W

www.vagyunk.hu

(#14043) föccer válasza zz76zz (#14042) üzenetére


föccer
nagyúr

Csinálj egy segédoszlopot, amibe a feltétel függvényét írod. Ha igaz, akkor "I", ha hamis, akkor "H". Utána bekapcsolod az autoszűrőt, rászűrsz az "I"-re és copy-paste. A sorrend megmarad.

üdv, föccer

Építésztechnikus. Építőmérnök.

(#14044) Bocimaster


Bocimaster
csendes tag

Sziasztok!
Az volna a kérdésem, hogy hogyan tudom beállítani egy cellába -egyéni cellaformázással-a bankszámlaszám formátumát (3*8 szám, 2 kötőjellel elválasztva)?

Előre is köszönöm.

[ Szerkesztve ]

Az ösztön mindig többet ér az észnél.

(#14045) zz76zz válasza Bocimaster (#14044) üzenetére


zz76zz
csendes tag

Oké köszi holnap megpróbálom, hogy a makrorögzítő különböző táblákon, is "jól" viselkedik e.

www.vagyunk.hu

(#14046) zz76zz válasza zz76zz (#14045) üzenetére


zz76zz
csendes tag

cellaformázás -> egyéni -> majd ez:
########-########-########

www.vagyunk.hu

(#14047) bozsozso


bozsozso
őstag

Sziasztok,

Szeretnék makróban olyat csinálni, hogy egy adott oszlopban adott szöveget keressen meg és ha megtalálta akkor a ennek a sornak az összes adatát másolja át mondjuk az adatok munkalap 2.sorába majd keresi a következőt ha megvan az meg mehet a következő sorba. Makrórögzítéssel megcsináltam auto szűrő majd másol beilleszt a megfelelő helyre, de nincs ettől jobb, "elegánsabb" megoldás? Valamint esetleg olyat, hogy ha az oszlopban amiben keresek bármi módosítás történik akkor legyen végrehajtva a makró?
Pl.:

Érték1 jó 5,00
Érték2 rossz 10,00
Érték3 nagyon rossz 15,00
Érték4 jó 48,00

Szeretném ahol jó szerepel az kerüljön át az adatok munkalapra a 2. sortól kezdődően.

Érték1 jó 5,00
Érték4 jó 48,00

Előre is köszönöm a segítséget.

(#14048) Bocimaster válasza zz76zz (#14046) üzenetére


Bocimaster
csendes tag

Sajnos ez nem jó, mivel az utolsó 9szám helyére 0-át ír.

Keresem a megoldást, de sajnos még nem találtam meg.......

Az ösztön mindig többet ér az észnél.

(#14049) zz76zz válasza Bocimaster (#14048) üzenetére


zz76zz
csendes tag

Bankszámlaszám csak 3*8 vagy 2*8 jegy lehet. Ha 2*8 akkor ki kell egészíteni 8db 0 val

www.vagyunk.hu

(#14050) zz76zz válasza bozsozso (#14047) üzenetére


zz76zz
csendes tag

a kereszteket, ha elszámoltam az lehet . . . vagy te :)

www.vagyunk.hu

Útvonal

Fórumok  »  OS, alkalmazások  »  Microsoft Excel topic (kiemelt téma)
Copyright © 2000-2024 PROHARDVER Informatikai Kft.