- OnePlus Nord 2 5G - észak-északkelet
- Android alkalmazások - szoftver kibeszélő topik
- Samsung Galaxy A54 - türelemjáték
- Samsung Galaxy S24 - nos, Exynos
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Apple Watch Sport - ez is csak egy okosóra
- Megérkezett a Google Pixel 7 és 7 Pro
- Képeken az egyik kameráját elvesztő Sony Xperia 10 VI
- Mindent megtudtunk az új Nokia 3210-ről
- Android szakmai topik
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- bb0t: Gyilkos szénhidrátok, avagy hogyan fogytam önsanyargatás nélkül 16 kg-ot
- GoodSpeed: ASUS ROG STRIX B650E-F GAMING WIFI - Memory Context Restory (MCR)
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- sziku69: Fűzzük össze a szavakat :)
Hirdetés
-
Megbírságolták a Razert a Zephyr maszkok miatt
ph A cég elég olcsón megússza az ügyfelei félrevezetését, de az üdvözlendő, hogy az Egyesült Államok hatóságai nem siklottak el az ügy felett.
-
Spyra: akkus, nagynyomású, automata vízipuska
lo Type-C port, egy töltéssel 2200 lövés, több, mint 2 kg-os súly, automata víz felszívás... Start the epic! :)
-
Mindent megtudtunk az új Nokia 3210-ről
ma Részletes képek, specifikációk és euróban megadott ár is van a legendás modell újraélesztett verziójához.
-
Mobilarena
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
-
baaka
tag
Sziasztok!
Office 365-ben(hun) nan egy nyilvántartásom, amelynek az egyik oszlopában hivatkozások vannak. Ezek a hivatkozások .pdf fájlokra mutatnak melyek egy adott mappában vannak(az összes .pdf egy mappában van). Átszeretném nevezni ezt a mappát, valahogy meglehetne oldani egyszerűen, hogy a hivatkozások lekövessék ezt az útvonal módosítás egyszerűen és ne keljen egyessével újra meghivatkozni minden .pdf-et? -
Hege1234
addikt
sziasztok!
egy kicsit elakadtam a háziban
c2:c11 vannak benne számok
hogy tudom azt megoldani hogy az utolsó előttit (c10) megkapjam a c15 cellába?
kép -
Hege1234
addikt
válasz m.zmrzlina #45354 üzenetére
ennyit kaptunk ez a 7. feladat
képFKERES, INDEX?
nekem egyik se rémlik..
ezek szerint akkor van több megoldás is
melyik lenne a legegyszerűbb?
(kezdő szinten)[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Hege1234 #45355 üzenetére
Szerintem te félreértetted a feladatot. Az van benne, hogy nagyság szerint az utolsó előtti számot kéri. Nem pedig a C2-C11tartomány utolsó előtti értékét. Ha a második legnagyobb számot a =NAGY() fv-nyel csináltad (én azzal csináltam volna) annak van egy párja =KICSI() Így már szerintem magad is meg tudod oldani.
-
Hege1234
addikt
válasz m.zmrzlina #45356 üzenetére
ohh.. tényleg félreértettem
igen a =NAGY(C2:C11;2) fv-t használtam hozzá
ha most már jól értem akkor ez a megoldás hozzá
=KICSI(C2:C11;9)
köszi a segítséget! -
Hege1234
addikt
válasz m.zmrzlina #45358 üzenetére
nagyság szerint az utolsó előtti számot kéri
ez nálam a 15
=KICSI(C2:c11;9)
amit te mutatsz ott kiválasztottam a 9 -et
mivel úgy adja meg az utolsó előtti számotvagy azért nem értem mert
nekem a 2. legnagyobb és az Utolsó előtti
az ugyan az vagyis mindkét sorba ez kerül?
=NAGY(C2:c11;2)[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Hege1234 #45359 üzenetére
Állnak a gyerekek a tornasorban. (nem mostanság, mondjuk 40 évvel ezelőtt, manapság nem frusztráljuk a tökmagot, hogy ő mindig az utolsó ) Nagyság szerint a legnagyobb áll elöl a legkisebb hátul. A második legnagyobb gyerek a sorban a második. Nálad ez az 55 és a 15 ez rendben van. A legkisebb áll hátul, a második legkisebb előtte eggyel. Nálad a legkisebb a 4 ez oké, a második legkisebb szerintem a 7.
Majd holnap írd meg, hogy a tanárod hogyan értelmezte a feladatot? Nagy összegbe mernék fogadni, hogy hasonlóképpen ahogyan én.
-
KBaj
kezdő
Kedves Mindenki!
Régen jelentkeztem, de eléggé lekötnek a munkáim.
A jelenlegi munkámban akadt egy feladat amiben nem tudok dűlőre jutni, ezért kérném és megköszönném a segítségeteket.
Feladat: Adott egy táblázat, melyben van egy range_data névvel elnevezett Range és egycellából álló CellaSzín1 nevű Range tartomány. A cél az, hogy egy tetszőleges eredmény cellában (minél gyorsabban) megszámoljuk a CellaSzín1 nevű cella kitöltő színével megegyező range_data celláit, melyek a keresést megelőzően Excel táblában beállított feltételes formázással lett megszínezve több féle színnel.
Az interneten való kutakodás után a következőkre jutottam: Talán a legjobb lenne táblafüggvényt írni, mert azt sokkal hamarabb elvégzi az Excel, mint a lomha VBA For-Next ciklust. Így az alábbival próbálkoztam:
Function CountCcolor(range_data As Range, CellaSzín1 As Range) As Long
Dim cel As Range
Dim xcolor As Long
Set range_data = Application.Range("Munka1!O3183:S3284")
xcolor = CellaSzín1.Interior.ColorIndex
For Each cel In range_data.Cells
If cel.Interior.ColorIndex = xcolor Then
CountCcolor = CountCcolor + 1
End If
Next cel
End Function
A tetszőleges cellába írtam a meghívó függvényt: =CountCcolor(CellaSzín1;range_data) azzal a szándékkal, hogy a tábla újraszámolás utasításra (amely lehet automatikus Excel vagy VBA külön utasítás) beírja a cellába a range_data tartományban talált CellaSzín1 cella alapszínével megegyező cellák darabszámát. De sajnos nem így van. A funkció függvény lefut ugyan, de nem működik stabilan, ha nem #ÉRTÉK hibát jelez akkor a kijelzett szám annyi mint a vizsgált terület „szín nincs” összes celláinak száma (CellaSzín1.Interior.ColorIndex=-4142; negatív, tehát nincs szín). Pedig lenne mit összeszámolni.
Nem tudom hogyan tovább?
Tisztelettel megkérek Mindenkit, aki tud segítsen.
A segítséget előre is köszönöm.
Kbaj -
Fferi50
őstag
Szia!
Van némi gond azzal, amit leírtál. Először:
a függvényFunction CountCcolor(range_data As Range, CellaSzín1 As Range)
Azaz az első paraméter a vizsgálandó terület, a második a mintaszín cellája.
A hívásnál pedig ezt írod:CountCcolor(CellaSzín1;range_data)
azaz fordítva adod meg a paramétereket!
Másodszor:
Magába a függvénybe bekerült ez a sor:Set range_data = Application.Range("Munka1!O3183:S3284")
Ez tehát minden alkalommal felülír(ná) az általad megadott területet. A vizsgálandó terület ott van az első paraméterben, ez a sor káros. (Azért írtam feltételes módban, mert a hívásnál rosszul adod meg a paramétereket.)
Harmadszor:
Feltételes formázás esetén a cella interior.color színe marad az eredeti és nem a formázott. Ebben az esetben a Range.DisplayFormat tulajdonságát kell használni.If cel.DisplayFormat.Interior.Colorindex=xcolor
Negyedszer:
Mit értesz táblafüggvény alatt? A felhasználói függvény szintén VBA-ban íródik és ha jól látom akkor For Each -..... -Next ciklus van ebben is (ez is kell bele). Ez mitől is gyorsabb mint a VBA ciklus...
Üdv. -
KBaj
kezdő
válasz Fferi50 #45362 üzenetére
Kedves Fferi50!
Nagyon köszönöm, hogy ilyen hamar reagáltál a problémámra.
Válaszod felsorolása szerint fogok én is viszontválaszolni:
A függvény leírás és hívás paraméterek sorrendjét szinkronizáltam. (Tanultam: azt hittem mindegy a sorrend, hisz a VBA nevek szerint tudja azonosítani öket.) A függvénybe a Set sor azért került bele, mert később, sok-sok futás után VBA szinten módosítani (növelni) akarom a terület nagyságát. Ez gondolom felülírja az induláskor Excel táblán manuálisan beállított értékeket. Feltételes formázás: nem tudtam, hogy cella interior.color színe nem változik. Kicseréltem a feltétel sort. (Tanultam: feltételes formázás csak a mutatott képet (Display) módosítja?) Táblafüggvény: Eddigi értelmezésem szerint az a függvény ami az Excel megnyitásakor képernyőn jelentkező táblázat bármely cellájában beírható vagy található =f(x) formátumú, kódja „gyárilag” Microsoft programban vagy egyénileg VBA Modullapon van megírva. Tapasztaltam már, ha pl. átlagot akarok számolni VBA-ban For-Next ciklussal nagyon-nagyon lassabb mint a beépített ÁTLAG() függvény.
Még nem teszteltem a módosításokat, mert megjött az unokám, aki nagyon vártam.
Köszönöm a segítséget.
Üdvözlettel:
KBaj -
Fferi50
őstag
Szia!
"azt hittem mindegy a sorrend, hisz a VBA nevek szerint tudja azonosítani öket"
Ez igaz, de akkor másként kell meghívni a függvényt és csak VBA-ban működik, pl.CountCcolor CellaSzín1:=Range("A1"), range_data:=Range("X2:Z13")
Munkalapon nem lehet így meghívni. Ha nevet szeretnél használni, akkor a Képletek - Névkezelő menüpontban kell hozzárendelni neveket a kívánt tartományokhoz.
Ekkor viszont csak azokkal a tartományokkal fog működni - ha más tartományt szeretnél használni, akkor a nevet kell módosítani.
"ha pl. átlagot akarok számolni VBA-ban For-Next ciklussal nagyon-nagyon lassabb mint a beépített ÁTLAG() függvény"
Ez természetes, hiszen a beépített függvények gépi kódban futnak. Ezért is indokolt és célszerű az Excel beépített eszközeit használni, amikor csak lehetséges - VBA-ból is meghívva azokat.
"a Set sor azért került bele, mert később, sok-sok futás után VBA szinten módosítani (növelni) akarom a terület nagyságát. Ez gondolom felülírja az induláskor Excel táblán manuálisan beállított értékeket"
Igen, felülírja a meghíváskor megadott értéket - de mindig fixen arra, amit beírtál a makróba. A terület nagyság változtatását a makróhoz való hozzányúlás nélkül, a paraméter változtatásával tudod megoldani. (A terület paraméterhez pl.X2 : Y7 helyett X2 : AA72 kerül a meghíváskor.)
Azért vannak a paraméterek, hogy ne a (makró)függvényt kelljen módosítani, ha mást is szeretnél vele számoltatni.
Üdv.
Ps. Unokához gratula.[ Szerkesztve ]
-
KBaj
kezdő
válasz Fferi50 #45364 üzenetére
Kedves Fferi50!
Először is köszönöm a gratulációt. 4 éves, imádom.
Köszönöm szépen a segítségeket és magyarázatokat is. A Set sort kiszedtem. Az If sorban betettem a DisplayFormat. szót, azonban így sem működik rendesen. Leírom mit tapasztaltam:
Function CountCcolor1(CellaSzín1 As Range, range_data As Range) As Long
Dim cel As Range
Dim xcolor As Long
xcolor = CellaSzín1.Interior.ColorIndex
For Each cel In range_data.Cells
If cel.DisplayFormat.Interior.ColorIndex = xcolor Then
CountCcolor1 = CountCcolor1 + 1
End If
Next cel
End Function
- Az utolsó sorba tettem margón kívülre egy megállító pöttyöt, hogy ha az Excel rámegy akkor megálljon.
- A DisplayFormat. beírás nélkül lefut. Azt, hogy lefut látom, mert megáll a pöttynél és besárgul. A kis háromszögre kattintva tovább megy (ahogy kell) és az eredménycellában nulla szám jelenik meg.
- DisplayFormat. beírással nem tudom mi történik, de nem jár a pöttynél, mert nem áll meg. Azonban az eredménycella #ÉRTÉK hibaüzenetre vált.
- Az eredménycella újraszámolását (függvényem meghívását) F2 billentyű előhívással és javítás nélkül enterrel újrabeírással kényszerítettem ki.
A CountCcolor1 és CellaSzín1 végén az 1-es (majd 2, 3, ...) jelzi majd, hogy melyik színt keresi.
Próbáltam beírni a xcolor = CellaSzín2.DisplayFormat.Interior.ColorIndex sorba is, de ugyan úgy nem állt meg a pöttynél és #ÉRTÉK hibaüzenet adott.
Nem tudom mit csináljak, pedig szerintem a feladat nem olyan nehéz: meg kéne számolni, hogy egy területen hány piros, kék, …. kitöltőszínű cella van.
Üdvözlettel:
KBaj -
Fferi50
őstag
Szia!
Nemrég volt egy hasonló "házi" problémám, most "emlékeztettél" rá.
Sajnos úgy néz ki, hogy függvénnyel nem lehet megoldani a problémát, mert a DisplayFormat tulajdonságot ebben a formában nem tudja "megemészteni" a VBA.
Normál eljárással (SUB) megy, de akkor meg kell oldani a paraméter átadást.
Már későre jár, ezért inkább holnap folytatnám.
Üdv. -
Delila_1
Topikgazda
Szerintem a feltételt kellene megadnod a ciklusban, ami színezi a cellákat.
Function FeltetelesDarabszam(Tartomany As Range)
Dim CV As Range, db As Integer
Application.Volatile
db = 0
For Each CV In Tartomany
If CV > 40 Then db = db + 1
Next CV
FeltetelesDarabszam = db
End FunctionProgramozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Fferi50
őstag
válasz Delila_1 #45367 üzenetére
Szia!
Azért az tiszta őrület, hogy amikor végre megalkották a DisplayFormat -ot, hogy ne kelljen a feltételes formázással küzdeni pl. a színek vizsgálatánál, akkor felhasználói függvénnyel nem működik. Normál eljárással - paraméterezve is - működik - , de abban az esetben, ha ezt függvényből hívnánk meg a munkalapon, azonnal hibát okoz.
Mivel a Cella.Interior.Color(index) működik felhasználói függvény formában is, a Cella.DisplayFormat.Interior.Color(index) viszont nem, feltételezhetően valami apró bug lehet a megalkotásában. Elhatároztam, hogy jelezni fogom a MS oldalon. Kíváncsi vagyok, mit válaszolnak majd.
(Nálam 2016-os Excel fut, de a magasabb verzióban is fennáll a jelenség....)
Üdv. -
Hege1234
addikt
válasz m.zmrzlina #45360 üzenetére
igen, az volt a jó ahogy írtad
köszi a segítséget és a példát[ Szerkesztve ]
-
KBaj
kezdő
válasz Delila_1 #45369 üzenetére
Kedves Fferi50 és Delila_1 !
Köszönöm Delila_1, hogy Te is bekapcsolódtál a beszélgetésbe. Érdekes a javaslatod, de kezdő vagyok és nem nagyon értem minden sorát. Különösen az Application.Volatile sort, miért kell bele? A CV > 40 sornál mi a 40-es szám?
Időközben kísérletezgetek: VBA futtatását Hibakeresés módszerrel: a kód sorokban megállító pöttyöket helyezek el és így vizsgálom, hogy hogyan változnak a változók.
Egy másik szintén félig kész függvényen érdekes dolgot tapasztaltam. A függvény eleje a későbbi programban felhasználandó változók kezdő értékét tartalmazza, konstans, munkalap cella konstans, munkalap cella, mely beépített függvény szerinti kiszámított értéket adja a cellának. Azonban az első két módszer szerint rendben megy, de a beépített függvény szerinti értékadást egyszerűen kihagyja (a példa szerinti a = Cells(12, Kezd) sor). A megállás helyét sárga színnel jelzett állapotban a kurzort a változó fölé víve Empty hibát mutat, pedig utána is elvégzi a munkát.
Továbbá egy ponttól nem megy tovább, kilép. Pedig nem szokatlan programsort kellene végrehajtania. Úgy tudom (és remélem jól tudom), hogy a VBA a programot ahogy látható a szerkesztő ablakban föntről lefelé, sorban egymás után kell végrehajtani. Ime a kódrészlet:
Function Poisson2(Feltétel2 As Range) As Long
Call kep_ki
k = 0
Kezd = Cells(8, 7)
Kezd5 = Kezd + 5
a = Cells(12, Kezd)
Előford = Kezd + a
Valószín = Előford + 90
Várak = Valószín + 90
Us = Cells(4, 7) + Cells(2, 7)
Cikl = Cells(5, Előford + 1)
Cells(6, Előford + 1) = Cikl
Range(Cells(Cikl + 1, Kezd + 1), Cells(Us, Kezd + 15)).ClearContents
Az utolsó előtti sort még végrehajtja (ez a megállás helye szerinti sor), az utolsót viszont nem, visszatér a munkatáblához Erték hibával.
Kedves Fferi50 bejegyzésedben a Cella.DisplayFormat.Interior.Color(index) utasítsró írsz. A fenti programrészletben nincs ilyen, mégsem emészti meg a VBA.
(Nekem is 2016 Excel van)
Üdvözlettel:
KBaj -
szricsi_0917
tag
Sziasztok
Egy kis segítséget szeretnék kérni:Me.Controls("ida" & bb & "_osszerend_auto_box").Column(1)
Problémája van a combobox oszlopszámának megadásával. A Me.controls objektumba hogyan lehet megadni az oszlop számát?
Előre is köszi a segítséget! -
KBaj
kezdő
válasz Fferi50 #45373 üzenetére
Kedves Fferi50 !
Szomorú vagyok. Nem gondoltam volna, hogy a feltételes formázás ilyen galibát tud okozni. Úgy látszik más utat kell választanom.
Hát így jártam.
Na, nem baj tovább keresem az utat. De sokat tanultan.
Köszönöm szépen az eddigi segítséget, tájékoztatást és útmutatást.
Üdvözlettel:
KBaj -
Fferi50
őstag
válasz szricsi_0917 #45374 üzenetére
Szia!
.Columns(1)
Üdv. -
Fferi50
őstag
Szia!
Ha nem munkalap függvényként szeretnéd használni, akkor meg lehet oldani a megszámolást anélkül, hogy az eredeti feltételeket figyelni kellene.
Ahogy korábban írtam, ki kell jelölni a területet és a minta színt, ezután kell elindítani egy makrót.Sub CountCcolor1()
Dim cel As Range, cminta As Range, cter As Range,countcl As Long
Dim xcolor As Long
If Selection.Areas.Count <> 2 Then MsgBox "Nem megfelelő a terület kijelölése", vbCritical: Exit Sub
If Selection.Areas(1).Cells.Count = 1 Then
Set cminta = Selection.Areas(1): Set cter = Selection.Areas(2)
Else
Set cminta = Selection.Areas(2): Set cter = Selection.Areas(1)
End If
countcl = 0
xcolor = cminta.Interior.ColorIndex
For Each cel In cter.Cells
If cel.DisplayFormat.Interior.ColorIndex = xcolor Then
countcl = countcl + 1
End If
Next cel
MsgBox countcl
End Sub
Hogyan használható? Ki kell jelölnöd azt az összefüggő területet, ahol szeretnéd a színt összeszámolni. Ezután a CTRL nyomva tartásával ki kell hozzá jelölni a minta színt tartalmazó cellát - ami ne legyen a megszámolandó területen.
Ezután a Fejlesztőeszközök - Makrók menüpontban kiválasztod a CountColor1 -et és elindítod. Egy üzenetben kiírja a mintacella színének megfelelő cellák darabszámát.
Természetesen azt is meg lehet adni, hogy melyik cellába írja ki. Akkor az Msgbox sor helyett a Range("X3").Value=countcl sort kell beírnod - X3 helyett azt a címet, ahová szeretnéd az eredményt megkapni.
Megoldható továbbá az is, hogy egy vagy két cellába (ami mindig fix) beírjuk a vizsgálandó terület és a minta szín címét a makró futtatása előtt -- persze ahhoz módosítani kell a fenti makrót, de ez nem nagy probléma.
Amit Delila írt, az is megoldás, egy olyan makrót is lehet írni, ami megnézi, hogy a feltételes formázás feltételeinek melyik szín felel meg és azt a feltételt vizsgálja cellánként.
Erre még visszatérnék, csak azért írtam viszonylag gyorsan, hogy ne menjen el a kedved az egyébként hasznos feltételes formázás használatától.
Üdv. -
Fferi50
őstag
válasz szricsi_0917 #45378 üzenetére
Szia!
Az index 0-val kezdődik szerintem, az egy oszloposnál Columns(0), úgy gondolom.
Üdv. -
Fferi50
őstag
válasz szricsi_0917 #45380 üzenetére
Biztos, hogy jó a Control neve? Mert az is "indexnek" számít. Bár arra más hibaüzenet jönne.
-
Fferi50
őstag
válasz szricsi_0917 #45380 üzenetére
Szia!
Kicsit jobban ránéztem és az alábbiakat találtam:
1. Jó a Column, nem kell többesszám.
2. Az Index 2 dimenziós legyen és 0,0 val indul, ez az első oszlop első értéke
3. Első az oszlop index, második a sor index.
Tehát .Column(0,0) az első elem, .Column(0,1) az első oszlop második eleme.
Üdv. -
Fferi50
őstag
Szia!
Ez a makró azt tudja, hogy az M1,N1 cellákba beírt címek alapján megszámolja a színek számát és kiírja az O1 cellába.Sub CountCcolor1()
Dim cel As Range, cminta As Range, cter As Range, countcl As Long
Dim xcolor As Long
Set cter = Range(Range("M1").Value)
If cter.Cells.Count = 1 Then
Set cminta = cter: Set cter = Range(Range("N1").Value)
Else
Set cminta = Range(Range("N1").Value)
End If
countcl = 0
xcolor = cminta.DisplayFormat.Interior.ColorIndex
For Each cel In cter.Cells
If cel.DisplayFormat.Interior.ColorIndex = xcolor Then
countcl = countcl + 1
End If
Next cel
Range("O1").Value = countcl
End Sub
Az M1-be kell a vizsgálandó terület címe (Pl. A1 : D5), az N1-be kell a mintacella címe (pl.K4), vagy fordítva, fontos, hogy a mintacella egy cella legyen.7
Természetesen mindhárom cella címét (M1, N1, O1) átírhatod a neked megfelelőre. Fontos még, hogy ezek a cellák azon a munkalapon legyenek, ahol számoltatni szeretnél és onnan indítsd a makrót - amit természetesen akár egy gombhoz is hozzárendelhetsz.
Üdv.
Üdv.[ Szerkesztve ]
-
Delila_1
Topikgazda
A CV>40 csak egy példa a feltételre, amivel színezed a tartomány elemeit. Nyilván a saját feltételedet kell beírni helyette.
Az Application.Volatile sor eredménye, hogy ha a területen belül megváltoztatod egy cella értékét úgy, hogy feleljen (vagy ne feleljen) meg a feltételnek, akkor az eredmény is automatikusan módosuljon az új értékre.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
felsatan
tag
Sziasztok!
Adott 12 db külön álló excel fájl, amiben diákok vezetik a ledolgozott óráikat. Minden diáknak egy fül van a saját táblázatában. Hogyan tudnám a 12 fájl adatiat egy darab fájl 12 fülébe rendezni.
Magyarul azt szeretném, hogy amit változtat Pisti a saját fájljában, az frissüljön az én fájlomban is Pisti lapján.
Cellánként le tudom hivatkozni, de az irtó sokáig tart, úgyhogy bízom benne, van valami egyszerűbb megoldás is, ami nem igényel vba-t, mert ahhoz nem értek.
Hála és köszönet előre is! -
Delila_1
Topikgazda
válasz felsatan #45388 üzenetére
A te füzetedben Pisti lapjának A1 cellájába beírod
='útvonal\[Pisti füzete.xlsx]Pisti_lapja'!A1
Ezt másolod húzással jobbra, és le. Ügyelj, hogy az A1 $ jelek nélkül, önmagában szerepeljen.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
KBaj
kezdő
válasz Fferi50 #45384 üzenetére
Kedves Fferi50 !
Mint ahogy írtam is a legutóbbi bejegyzésemben, dolgozom az ügyön és most félállásban vagyok, de igen jók a kilátások, hála Neked. A saját számíze szerint átírtam a kódot, úgy néz ki szépen működik és gyors!!! Íme a példa:
'***** Prohardver nyomám Színes cellák számolása
Sub CountCcolor() 'Cellaszín szerinti darabszám
Dim cel As Range, cminta As Range, cter As Range, countcl As Long
Dim xcolor As Long
Dim j As Integer
Range("O14:S14").ClearContents 'Színtalálatok törlése
'If Selection.Areas.Count <> 2 Then MsgBox "Nem megfelelő a terület kijelölése", vbCritical: Exit Sub
' If Selection.Areas(1).Cells.Count = 1 Then ' Kijelölt területek azonostása: Count=1 Mintaszín
' Set cminta = Selection.Areas(1): Set cter = Selection.Areas(2)
' Else
' Set cminta = Selection.Areas(2): Set cter = Selection.Areas(1)
' End If
Set cter = Range(Cells(3183, 15), Cells(3283, 19)) 'Vizsgáladó terület
'A Mintaszínek sorra vétele
For j = 1 To 3
Set cminta = Range(Cells(20, 14 + j), Cells(20, 14 + j)) 'Mintaszín
countcl = 0 'Színes cella számláló
xcolor = cminta.Interior.ColorIndex 'A mintaszín Index száma
For Each cel In cter.Cells 'Végig vizsgálandó területen
If cel.DisplayFormat.Interior.ColorIndex = xcolor Then 'Ha egyforma a vizsgált cella és minta színindexe
countcl = countcl + 1 'Számláló növelése
End If
Next cel
Cells(14, 14 + j) = countcl 'A színből talált darabszám
'MsgBox countcl
Next j
End Sub
Köszönöm szépen az alapötletet.
Üdvözlettel:
KBaj -
veterán
Sziasztok!
Az alábbi lenne a problémám:
C oszlop cikkszámok
D oszlop partnerek
E oszlop árak az egyes partnerekhez
Ergo pl a 10259-ös cikkszámú terméket 10 partner is megveszi (10x szerepel a táblázatban 10 különböző áron) és nekem ennek a 10-nek kellene az átlaga. Hogyan kellene csinálni?Aztán ha ez megvan akkor az átlagárat hozzá kell kötni a cikkszámhoz is de azt hiszem ez már egy Vclookup-al menni fog.
Köszönöm
Addig gyorsítottuk a világot míg mi magunk maradtunk le...
-
KBaj
kezdő
válasz Fferi50 #45384 üzenetére
Kedves Fferi50 !
Nagy lelkesedésemben eljutottam egy korábban kiderített hibához, amit azóta sem tudtam megoldani, sem megmagyarázni. Konkrétan a 45372 számú bejegyzésemben tett tapasztalásomhoz. Miszerint egy darabig a VB végrehajtja az utasításokat és adott sortól egyszerűen otthagyja a programot, visszatér az munkalaphoz, mintha egy END SUB-ot kapott volna.
Nem tudom mit tegyek. Tudnál segíteni?
Üdvözlettel:
KBaj -
KBaj
kezdő
válasz Fferi50 #45396 üzenetére
Kedves Fferi50 !
Ime a program, elég hosszú. Persze ez is függvény azért, mert ha fog működni SOLVER célcellájaként akarom alkalmazni.
Function Poisson2(Feltétel2 As Range) As Long
Call kep_ki
Application.Volatile ’Prohardver Delila_1 nyomán
k = 0
Kezd = Cells(8, 7) 'Feltétel kezdete oszlop
Kezd5 = Kezd + 5 'Javasolt számok terület előtti oszlop száma
Kezd22 = Kezd + 22 'Feltételek a javaslat válogatásához
a = Cells(12, Kezd) 'A munkatábla kezdő előtti oszlop száma
Előford = Kezd + a 'K(i) táblázat kezdő előtti oszlop száma
Valószín = Előford + 90 'P(x=1) táblázat kezdő előtti oszlop száma
Várak = Valószín + 90 'n(i) táblázat kezdő előtti oszlop száma
Us = Cells(4, 7) + Cells(2, 7) 'Táblázat utolsó sora
Cikl = Cells(5, Előford + 1) 'A számolás kezdete sor
Cells(6, Előford + 1) = Cikl 'Ez lesz a Ciklusváltozó kezdete
Range(Cells(Cikl + 1, Kezd + 1), Cells(Us, Kezd + 15)).ClearContents 'számítása sorok törlése
Range(Cells(Cikl, Előford + 1), Cells(Us, Valószín)).ClearContents 'K(i) táblázat törlése
Range(Cells(8, Előford + 1), Cells(8, Valószín)).Value = _
Range(Cells(Cikl - 1, Várak + 1), Cells(Cikl - 1, Várak + 90)).Value 'Az n(i-1) sor feltöltése
Cells(14, Előford + 1).Formula = Cells(14, Kezd + 49).Formula
Cells(14, Előford + 1).Select 'Kijelölés kitöltéshez
Selection.AutoFill Destination:=Range(Cells(14, Előford + 1), Cells(14, Valószín)), Type:=xlFillDefault
'Feltételek
Range("AF11:AJ11").Value = Range("AF4:AJ4").Value 'Manuális számítás
'Calculate 'A munkalapfüggvények számolása
For Cikl = Cells(6, Előford + 1) To Us 'Az utolsó + 1-ig
'1. : 'Az n(i-1) és az előző ciklusban kitörölt képletek újrafelépítése a Tartalék raktárcellából BF14
Range(Cells(8, Előford + 1), Cells(8, Valószín)).Value = _
Range(Cells(Cikl - 1, Várak + 1), Cells(Cikl - 1, Várak + 90)).Value 'Az n(i-1) sor feltöltése
Cells(14, Előford + 1).Formula = Cells(14, Kezd + 49).Formula 'Képlet
Cells(14, Előford + 1).Select 'Kijelölés kitöltéshez
Selection.AutoFill Destination:=Range(Cells(14, Előford + 1), Cells(14, Valószín)), Type:=xlFillDefault
'[P(x=1) 13-dik sor]
For i = 1 To 5
For j = 1 To 90
Calculate 'A munkalapfüggvények kiszámolják a 14-dik
If Cells(13, Előford + j) <= Cells(11, Kezd22 + i) _
And Cells(14, Előford + j) Then
For k = 1 To 5
If Cells(14, Előford + j) = Cells(Cikl, Kezd5 + k) Then GoTo Köv
Next k
Cells(Cikl, Kezd5 + Cells(17, Kezd5 + i)) = Cells(14, Előford + j)
Cells(Cikl, Kezd + 10 + Cells(17, Kezd5 + i)) = Cells(13, Előford + j)
Cells(14, Előford + j) = ""
j = 90
End If
Köv: Next j
Next i
'2.
Cells(6, Előford + 1) = Cikl
'Calculate 'A munkalapfüggvények számolása
If Cells(Cikl, 4) Then
For j = 1 To 5
Cells(Cikl, Kezd + j) = Cells(12, Előford + Cells(Cikl, 3 + j))
Next j
Else
End If
'Calculate 'A munkalapfüggvények számolása
Range(Cells(Cikl, Előford + 1), Cells(Cikl, Valószín)).Value _
= Range(Cells(Cikl - 1, Előford + 1), Cells(Cikl - 1, Valószín)).Value
For j = 1 To 90
Cells(8, Előford + j) = Cells(8, Előford + j) + 1 'n(i) cellasor munkatáblában(i) cellasor
Next j
If Cells(Cikl, 4) Then
For j = 1 To 5
Cells(Cikl, Előford + Cells(Cikl, 3 + j)) _
= Cells(Cikl, Előford + Cells(Cikl, 3 + j)) + 1
Cells(8, Előford + Cells(Cikl, 3 + j)) = 0 'n(i) cellasor
Next j
End If
'Calculate
Range(Cells(Cikl, Valószín + 1), Cells(Cikl, Várak)).Value _
= Range(Cells(12, Előford + 1), Cells(12, Valószín)).Value
Range(Cells(Cikl, Várak + 1), Cells(Cikl, Várak + 90)).Value _
= Range(Cells(8, Előford + 1), Cells(8, Valószín)).Value
Next Cikl
Call CountCcolor 'Prohardver nyomám Színes cellák számolása**** Modul3 lapon
Poisson2 = WorksheetFunction.Sum(Range("O14:S14")) 'Solver Célcella
Call kep_be
End Function
Elég hosszú a program, van még mit csiszolni, egyszerűsíteni rajta. Mint már említettem kezdő programozó vagyok, nem értem a (</>) gombot mit jelent.
Segítségedet előre is köszönöm.
Üdvözlettel:
KBaj -
Fferi50
őstag
Szia!
Mutatom a </> gombot:
És az eredménye:Function Poisson2(Feltétel2 As Range) As Long
Call kep_ki
Application.Volatile ’Prohardver Delila_1 nyomán
k = 0
Kezd = Cells(8, 7) 'Feltétel kezdete oszlop
Kezd5 = Kezd + 5 'Javasolt számok terület előtti oszlop száma
Kezd22 = Kezd + 22 'Feltételek a javaslat válogatásához
a = Cells(12, Kezd) 'A munkatábla kezdő előtti oszlop száma
Előford = Kezd + a 'K(i) táblázat kezdő előtti oszlop száma
Valószín = Előford + 90 'P(x=1) táblázat kezdő előtti oszlop száma
Várak = Valószín + 90 'n(i) táblázat kezdő előtti oszlop száma
Us = Cells(4, 7) + Cells(2, 7) 'Táblázat utolsó sora
Cikl = Cells(5, Előford + 1) 'A számolás kezdete sor
Cells(6, Előford + 1) = Cikl 'Ez lesz a Ciklusváltozó kezdete
Range(Cells(Cikl + 1, Kezd + 1), Cells(Us, Kezd + 15)).ClearContents 'számítása sorok törlése
Range(Cells(Cikl, Előford + 1), Cells(Us, Valószín)).ClearContents 'K(i) táblázat törlése
Range(Cells(8, Előford + 1), Cells(8, Valószín)).Value = _
Range(Cells(Cikl - 1, Várak + 1), Cells(Cikl - 1, Várak + 90)).Value 'Az n(i-1) sor feltöltése
Cells(14, Előford + 1).Formula = Cells(14, Kezd + 49).Formula
Cells(14, Előford + 1).Select 'Kijelölés kitöltéshez
Selection.AutoFill Destination:=Range(Cells(14, Előford + 1), Cells(14, Valószín)), Type:=xlFillDefault
'Feltételek
Range("AF11:AJ11").Value = Range("AF4:AJ4").Value 'Manuális számítás
'Calculate 'A munkalapfüggvények számolása
For Cikl = Cells(6, Előford + 1) To Us 'Az utolsó + 1-ig
'1. : 'Az n(i-1) és az előző ciklusban kitörölt képletek újrafelépítése a Tartalék raktárcellából BF14
Range(Cells(8, Előford + 1), Cells(8, Valószín)).Value = _
Range(Cells(Cikl - 1, Várak + 1), Cells(Cikl - 1, Várak + 90)).Value 'Az n(i-1) sor feltöltése
Cells(14, Előford + 1).Formula = Cells(14, Kezd + 49).Formula 'Képlet
Cells(14, Előford + 1).Select 'Kijelölés kitöltéshez
Selection.AutoFill Destination:=Range(Cells(14, Előford + 1), Cells(14, Valószín)), Type:=xlFillDefault
'[P(x=1) 13-dik sor]
For i = 1 To 5
For j = 1 To 90
Calculate 'A munkalapfüggvények kiszámolják a 14-dik
If Cells(13, Előford + j) <= Cells(11, Kezd22 + i) _
And Cells(14, Előford + j) Then
For k = 1 To 5
If Cells(14, Előford + j) = Cells(Cikl, Kezd5 + k) Then GoTo Köv
Next k
Cells(Cikl, Kezd5 + Cells(17, Kezd5 + i)) = Cells(14, Előford + j)
Cells(Cikl, Kezd + 10 + Cells(17, Kezd5 + i)) = Cells(13, Előford + j)
Cells(14, Előford + j) = ""
j = 90
End If
Köv: Next j
Next i
'2.
Cells(6, Előford + 1) = Cikl
'Calculate 'A munkalapfüggvények számolása
If Cells(Cikl, 4) Then
For j = 1 To 5
Cells(Cikl, Kezd + j) = Cells(12, Előford + Cells(Cikl, 3 + j))
Next j
Else
End If
'Calculate 'A munkalapfüggvények számolása
Range(Cells(Cikl, Előford + 1), Cells(Cikl, Valószín)).Value _
= Range(Cells(Cikl - 1, Előford + 1), Cells(Cikl - 1, Valószín)).Value
For j = 1 To 90
Cells(8, Előford + j) = Cells(8, Előford + j) + 1 'n(i) cellasor munkatáblában(i) cellasor
Next j
If Cells(Cikl, 4) Then
For j = 1 To 5
Cells(Cikl, Előford + Cells(Cikl, 3 + j)) _
= Cells(Cikl, Előford + Cells(Cikl, 3 + j)) + 1
Cells(8, Előford + Cells(Cikl, 3 + j)) = 0 'n(i) cellasor
Next j
End If
'Calculate
Range(Cells(Cikl, Valószín + 1), Cells(Cikl, Várak)).Value _
= Range(Cells(12, Előford + 1), Cells(12, Valószín)).Value
Range(Cells(Cikl, Várak + 1), Cells(Cikl, Várak + 90)).Value _
= Range(Cells(8, Előford + 1), Cells(8, Valószín)).Value
Next Cikl
Call CountCcolor 'Prohardver nyomám Színes cellák számolása**** Modul3 lapon
Poisson2 = WorksheetFunction.Sum(Range("O14:S14")) 'Solver Célcella
Call kep_be
End Function
Amint látod, sokkal olvashatóbb.
Érdekes lenne még az a munkalap, amin futtatod ezt a makrót. Legalább egy kép a használt területről.
Üdv.[ Szerkesztve ]
-
Delila_1
Topikgazda
válasz Fferi50 #45398 üzenetére
Hát még, ha tagolva lenne a makró! Akkor látszana, ki kivel van.
Function Poisson2(Feltétel2 As Range) As Long
Call kep_ki
Application.Volatile 'Prohardver Delila_1 nyomán
k = 0
Kezd = Cells(8, 7) 'Feltétel kezdete oszlop
Kezd5 = Kezd + 5 'Javasolt számok terület előtti oszlop száma
Kezd22 = Kezd + 22 'Feltételek a javaslat válogatásához
a = Cells(12, Kezd) 'A munkatábla kezdő előtti oszlop száma
Előford = Kezd + a 'K(i) táblázat kezdő előtti oszlop száma
Valószín = Előford + 90 'P(x=1) táblázat kezdő előtti oszlop száma
Várak = Valószín + 90 'n(i) táblázat kezdő előtti oszlop száma
Us = Cells(4, 7) + Cells(2, 7) 'Táblázat utolsó sora
Cikl = Cells(5, Előford + 1) 'A számolás kezdete sor
Cells(6, Előford + 1) = Cikl 'Ez lesz a Ciklusváltozó kezdete
Range(Cells(Cikl + 1, Kezd + 1), Cells(Us, Kezd + 15)).ClearContents 'számítása sorok törlése
Range(Cells(Cikl, Előford + 1), Cells(Us, Valószín)).ClearContents 'K(i) táblázat törlése
Range(Cells(8, Előford + 1), Cells(8, Valószín)).Value = _
Range(Cells(Cikl - 1, Várak + 1), Cells(Cikl - 1, Várak + 90)).Value 'Az n(i-1) sor feltöltése
Cells(14, Előford + 1).Formula = Cells(14, Kezd + 49).Formula
Cells(14, Előford + 1).Select 'Kijelölés kitöltéshez
Selection.AutoFill Destination:=Range(Cells(14, Előford + 1), Cells(14, Valószín)), Type:=xlFillDefault
'Feltételek
Range("AF11:AJ11").Value = Range("AF4:AJ4").Value 'Manuális számítás
'Calculate 'A munkalapfüggvények számolása
For Cikl = Cells(6, Előford + 1) To Us 'Az utolsó + 1-ig
'1. : 'Az n(i-1) és az előző ciklusban kitörölt képletek újrafelépítése a Tartalék raktárcellából BF14
Range(Cells(8, Előford + 1), Cells(8, Valószín)).Value = _
Range(Cells(Cikl - 1, Várak + 1), Cells(Cikl - 1, Várak + 90)).Value 'Az n(i-1) sor feltöltése
Cells(14, Előford + 1).Formula = Cells(14, Kezd + 49).Formula 'Képlet
Cells(14, Előford + 1).Select 'Kijelölés kitöltéshez
Selection.AutoFill Destination:=Range(Cells(14, Előford + 1), Cells(14, Valószín)), Type:=xlFillDefault
'[P(x=1) 13-dik sor]
For i = 1 To 5
For j = 1 To 90
Calculate 'A munkalapfüggvények kiszámolják a 14-dik
If Cells(13, Előford + j) <= Cells(11, Kezd22 + i) And Cells(14, Előford + j) Then
For k = 1 To 5
If Cells(14, Előford + j) = Cells(Cikl, Kezd5 + k) Then GoTo Köv
Next k
Cells(Cikl, Kezd5 + Cells(17, Kezd5 + i)) = Cells(14, Előford + j)
Cells(Cikl, Kezd + 10 + Cells(17, Kezd5 + i)) = Cells(13, Előford + j)
Cells(14, Előford + j) = ""
j = 90
End If
Köv:
Next j
Next i
'2.
Cells(6, Előford + 1) = Cikl
'Calculate 'A munkalapfüggvények számolása
If Cells(Cikl, 4) Then
For j = 1 To 5
Cells(Cikl, Kezd + j) = Cells(12, Előford + Cells(Cikl, 3 + j))
Next j
End If
'Calculate 'A munkalapfüggvények számolása
Range(Cells(Cikl, Előford + 1), Cells(Cikl, Valószín)).Value _
= Range(Cells(Cikl - 1, Előford + 1), Cells(Cikl - 1, Valószín)).Value
For j = 1 To 90
Cells(8, Előford + j) = Cells(8, Előford + j) + 1 'n(i) cellasor munkatáblában(i) cellasor
Next j
If Cells(Cikl, 4) Then
For j = 1 To 5
Cells(Cikl, Előford + Cells(Cikl, 3 + j)) _
= Cells(Cikl, Előford + Cells(Cikl, 3 + j)) + 1
Cells(8, Előford + Cells(Cikl, 3 + j)) = 0 'n(i) cellasor
Next j
End If
'Calculate
Range(Cells(Cikl, Valószín + 1), Cells(Cikl, Várak)).Value _
= Range(Cells(12, Előford + 1), Cells(12, Valószín)).Value
Range(Cells(Cikl, Várak + 1), Cells(Cikl, Várak + 90)).Value _
= Range(Cells(8, Előford + 1), Cells(8, Valószín)).Value
Next Cikl
Call CountCcolor 'Prohardver nyomám Színes cellák számolása**** Modul3 lapon
Poisson2 = WorksheetFunction.Sum(Range("O14:S14")) 'Solver Célcella
Call kep_be
End Function[ 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.
Új hozzászólás Aktív témák
- Kerékpárosok, bringások ide!
- Windows 11
- Spórolós topik
- Hobby rádiós topik
- Milyen billentyűzetet vegyek?
- Sokat fogyaszt az AI, egyre több az adatközpont, kell az atomenergia
- Futás, futópályák
- A fociról könnyedén, egy baráti társaságban
- HiFi műszaki szemmel - sztereó hangrendszerek
- Gitáros topic
- További aktív témák...
- Bitdefender Total Security 3év/3eszköz! - "Tökéletes védelem most kedvező áron..."
- Vírusirtó, Antivirus VPN kulcsok
- Adobe Creative Cloud - 2024. 04. 05 - 2025. 04. 05-ig
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- PC JÁTÉKOK (OLCSÓ STEAM, EA , UPLAY KULCSOK ÉS SOKMINDEN MÁS IS 100% GARANCIA )
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen