-
Fototrend
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
-
KBaj
kezdő
válasz
Bobrooney
#44751
üzenetére
Szia!
Köszi, hogy érdeklődsz a témám után. Szerintem ránézésre minden megfelelő. Azóta kipróbáltam: ugyanarról a munkalapról dolgozva újból felvettem a makrót Excel fejlécről indítva, ugyanazokat cellákat használva. Persze rendben lefutott, csak a végző ablak (Megoldást talált ...) jelent meg, de ez természetes. Többször végig futott hiba nélkül. Egy furcsaságot tapasztaltam: kétszer jegyezte be az "SolverOk SetCell..." parancsot. Gondoltam sebaj, olvastam már interneten tőlem okosabb emberektől, hogy a makró rögzítő sok esetben igen bőven lejegyzi a parancsokat. A konkrét feladat megoldáshoz lehet, hogy nem minden sor kell. ... Nem baj én kétszer bemásoltam a kódsorokat az én programomba, úgy se ment, ill. kiírta a figyelmeztető ablakot.
Még egy módosítás: a fentebb említett parancs után van egy "SolverSolve" utasítás, ahogy a rögzítésben is van. Ilyenkor a futás végén megjelenik a "Megoldást talált" ablak, de ha szóközzel utána írjuk az "UserFinish:=True" szöveget nem kérdez, jóváhagyottnak tekinti a kiszámolt adatokat és továbbadja a vezérlést. Én így akarom használni.
Szívesen válaszolok további kérdésekre.
ÜDv. -
KBaj
kezdő
válasz
Bobrooney
#44493
üzenetére
Szia Bodrooney!
Köszönöm szépen a választ. Ismerem a linket, igaz mivel angol nyelven nem tudok, így ezeket az oldalakat csak a google fordításán keresztül, az oldal lefordítása opcióval olvasom (tanulom). Nagyon jó oldalakat találok: innen tanulok. Igaz, borzalmas a fordítás, de igen nehezen: korábban tanultakból, gyakorlással és sok-sok türelemmel valahogy meg lehet érteni. (Marha nehéz!). A problémámra viszont még nem sikerül találni semmit. Lehet hogy Excel táblázati szinten kéne valahogy beleavatkozni abba, hogy a táblázat automatikus átszámolásával együtt minden saját gyártású függvényt is kiszámoljon, így talán a Solvernek is elég volna az eredményt vizsgálnia. -
m.zmrzlina
senior tag
válasz
Bobrooney
#41892
üzenetére
Igen közben találtam róla valamit én is. Mondjuk elég dodonai:
When you run a macro, all variables are initialized to a default value. The initial default value: for a numeric variable is zero; for a variable length string it is a zero-length or empty string (""); a fixed length string is initialized with the ASCII code 0, or Chr(0); an object variable defaults to Nothing; a Variant variable is initialized to Empty. In numeric context, an Empty variable denotes a zero while in a string context an Empty variable is a zero-length string ("") . A zero-length string ("") is also referred to as a null string. However, it is advised to explicitly specify an initial value for a variable instead of relying on its default initial value.
Szóval csináld ahogy jónak látod!
-
-
Delila_1
veterán
válasz
Bobrooney
#33419
üzenetére
"...azt kellene megszámolni..."
Érvényesítéssel hogy lehet számolni?!
Érvényesítés az, mikor egy cellába, vagy egy tartományba csak bizonyos feltételeknek megfelelő adatot engedünk bevinni. Ha az a feladat, hogy egy 20×20-as területre a megadott feltételeidnek megfelelő számot lehessen bevinni, az érvényesítés képlete legyen
=ÉS(A1*10=INT(A1*10);MARADÉK(A1*10;2)=0)és ezt másold a tartomány többi tagjához is.
-
válasz
Bobrooney
#29868
üzenetére
Korábban írtad feltételnek ezt, hogy: "Érvénytelen adatok: mindegyiknek vesszük a dupláját és maradék nélkül osztjuk 7-el"
Csak azért idézem, mert ez egy értelmetlen feltétel, hisz ha valaminek a dupláját el tudod osztani maradék nélkül 7-el, akkor magát a számot is el lehet osztani maradék nélkül 7-el...
(ettől függetlenül meghagytam a képletben, csak szóltam)E1 cella képlete (természetesen tömbképletként kell bevinni)
=DARAB(HA(MARADÉK(A1:C5*2;7)=0;A1:C5))-DARABÜRES(A1:C5)-DARABTELI(A1:C5;"=0")Az üres és a nullákat tartalmazó cellákat kivontam a képletben, ellenkező esetben a tömbképlet azokat is megfelelőnek tartaná a kritériumnak(azaz a kétszeresük maradék nélkül osztható 7-el).

-
Delila_1
veterán
válasz
Bobrooney
#29852
üzenetére
Valószínűleg meg lehet oldani tömbképlettel is, én egy függvényt írtam rá.
Function HibaDarab(tartomány As Range)
Dim db As Long, CV As Range
For Each CV In tartomány
If CV > 0 And IsNumeric(CV) And CV * 2 Mod 7 > 0 Then
db = db + 1
End If
Next
HibaDarab = db
End FunctionAz összegző cellába ez jön: =HibaDarab(tartomány), ahol a tartományt beírod, vagy kijelölöd egérrel.
-
Fferi50
Topikgazda
válasz
Bobrooney
#22949
üzenetére
Szia!
Ha a modulok azon értékeit, amelyeket más modulok is használnak, Public változóként definiálod, akkor azokat modulnév.változónév formában el tudod érni máshonnan is.
Ha a modulok nem osztálymodulok (nem class), akkor Global változóként is definiálhatod a közös változókat és akkor minden macera nélkül eléred mindenhonnan.Üdv.
-
Fferi50
Topikgazda
válasz
Bobrooney
#22916
üzenetére
Szia!
Nem kötelező a második paraméter használata, de vedd figyelembe az alábbiakat:
A második paraméter azt határozza meg, hogy melyik nap a hét kezdőnapja. Ha elhagyod, akkor a vasárnapot tekinti a hét kezdőnapjának. Ha a hétfőt tekinted kezdőnapnak (mint Mo-n általában), akkor a második paraméter értéke 2.Üdv.
-
Delila_1
veterán
válasz
Bobrooney
#22673
üzenetére
Az Fkeres függvény kell ide.
Az A oszlopban vannak a pontszámok, az I-ben a "tól" értékek (0; 11; 21; stb.), mellettük a J-ben az osztályzat (1; 2; 3; stb.)A képlet =FKERES(A1;I:J;2;1)
Az utolsó paraméter, az 1-es – ami el is hagyható – mondja meg a függvénynek, hogy nem pontos-, hanem közelítő értéket keresel. -
slashing
senior tag
válasz
Bobrooney
#22673
üzenetére
huh most hirtelen nem jut eszembe a pontos menete de ha utánna nézel a gyakoriság vagy norm.eloszl függvénynek. Vagy az egyiknek vagy a másiknak tuti jónak kell lennie de lehet kombinálni kell a kettőt.
Inkább csak a gyakoriság lesz az a norm.eloszlást csak azért jutott eszembe mert akkor kellett használnom mikor a gyakoriságot is.
-
-
Bobrooney
senior tag
-
Fferi50
Topikgazda
válasz
Bobrooney
#22548
üzenetére
Szia!
Makróba foglalva így nézne ki:
sub egyedi()
Dim usor as Long, tomb()
usor = Range("F" & Rows.Count).End(xlUp).Row
Range("F1:F" & usor).copy range("Z1")
Application.DisplayAlerts=False
Range("Z1:Z" & usor).RemoveDuplicates Columns:=1, Header:=xlYes
Application.DisplayAlerts=True
tomb = Application.Transpose(Range("Z2:Z" & usor))Üdv.
-
Fferi50
Topikgazda
válasz
Bobrooney
#22542
üzenetére
Szia!
Excel 2007-től működik az adatok ismétlődések eltávolítása.
Ennek felhasználásával:
Átmásolod az eredeti listádat egy új helyre - ahonnan majd használni szeretnéd.
Utána az új helyen adatok - ismétlődések eltávolítása menüpont használata.
Makróban pl.
ActiveSheet.Range.("Y1
1200").RemoveDuplicates columns:=1 header:=xlYes vagy xlNo attól függően, hogy van-e fejléc.
Előtte pedig Application.DisplayAlerts=False
Utána: Application.DisplayAlerts=True
Ez a két sor arra kell, hogy ne "üzengessen", hány adatot távolított el.Üdv.
-
Delila_1
veterán
válasz
Bobrooney
#22545
üzenetére
Szívesen. Az
usor = Range("Z" & Rows.Count).End(xlUp).Row
tomb = Application.Transpose(Range("Z2:Z" & usor))
MsgBox tomb(3)rész helyett betehetsz egy rendezést, és egy névadást. A névadásból hagyd ki a Z1 cellát, az hivatalból az oszlop címe. Az érvényesítésnél a nevet adhatod meg forrásként.
Ha eleve ofszettel adod meg a nevet a Z adatainak, a makróban csak rendezni kell az adatokat a szűrés után.
-
Delila_1
veterán
válasz
Bobrooney
#22542
üzenetére
Ha jól látom, az F oszlopból akarod kinyerni az egyedi értékeket. Erre jó a speciális szűrő, amit makróval is előállíthatsz.
A lenti pár sor a Z oszlopba ír, címsorral együtt, majd a kinyert adatokat a tomb nevű tömbbe rakja. A végén kiírja a tomb() harmadik értékét, próbaként.Sub TombbeEgyedi()
Dim usor As Long, tomb()
usor = Range("F" & Rows.Count).End(xlUp).Row
Range("F1:F" & usor).AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("Z1"), Unique:=True
usor = Range("Z" & Rows.Count).End(xlUp).Row
tomb = Application.Transpose(Range("Z2:Z" & usor))
MsgBox tomb(3)
End SubMikor betöltötted a tomb()-be az adatokat, megadhatod a makróban a további felhasználásra az utasításokat. Ehhez már nincs szükség a Z oszlopra, törölheted.
Szerk.:
Közben kibővítetted a kérdést. Valószínű, hogy érvényesítéshez kellenek az egyedi értékek. A Z oszlopból megadhatod a tartományt. -
Delila_1
veterán
válasz
Bobrooney
#15665
üzenetére
Mikor a változó deklarálásánál az As után kezded beírni a típust, kapsz egy ablakot a választhatók felsorolásánál. Ezek között nincs Document. Ha egy füzetre akarsz hivatkozni, célszerű a Workbook típust választani. A makróban
Public Doc As Workbook
Sub mm()
Set Doc = ActiveWorkbook
Doc.Sheets("Munka1").Range("A1") = "asdf"
End Sub -
Delila_1
veterán
válasz
Bobrooney
#15659
üzenetére
A VB szerkesztőben duplán klikkelsz a listboxra, megjelenik a kódja úgy, hogy a kezdő- és záró sor közé bármit írhatsz.
Private Sub ListBox1_Click()
'itt megadva egy általad írt makró címét, végrehajtja annak a tartalmát
End SubMegváltoztathatod az eseményt Click-ről pl. AfterUpdate-re, vagy bármire, amit fent a jobb oldalon lévő legördülőben találsz.
A ListBoxt RowSource tulajdonságában megadhatod a listát, amit meg akarsz jeleníteni benne.
Pl.: Munkalap1!A1:A20 -
válasz
Bobrooney
#15628
üzenetére
ÁÁ dehogy - ha függvénmnyel szedem szét (vagy vlookup-ozok), akkor felmegy commited memory 200.000 MB környékére, de így lent marad ~30 MB-on, viszont így is folyamatosan tekeri a procit. Ami érdekes, hogy ha fut másik Office alkalmazás, akkor ugyan 100%-on pörög továbbra az Excel process, de úgy tűnik, mintha a CPU idő 1%-át kapná csak meg gyakorlatilag, a többi valami más folymatban várakozik.
Mintha a VBA hívásoknak lenne valami in-app szinkronizációja az Office Suite-on belül, és minden hívásnál megvárná, míg a többi Office alkalmazás visszaigazolja, hogy továbbmehet. -
Delila_1
veterán
válasz
Bobrooney
#15571
üzenetére
A For Each - Next ciklussal végig lépkedhetsz a terület tagjain. A lenti példában a ciklusváltozó CV.
Sub TeruletBejaras()
Dim ter As Range, CV As Object
Set ter = Range("A1:C15")
For Each CV In ter
MsgBox CV.Address
MsgBox CV.Value
If CV < 300 Then Cells(CV.Row, CV.Column).Font.ColorIndex = 3
Next
End SubA két kiíratást csak azért tettem bele, hogy megmutassam, miket tud még ez a különleges ciklus.
A For Each CV In ter helyett For Each CV In Range("A1:C15") is szerepelhet.
Új hozzászólás Aktív témák
- Gamer egerek és billentyűzetek kitűnő árakon!
- GYÖNYÖRŰ iPhone 12 Mini 64GB Black -1 ÉV GARANCIA - Kártyafüggetlen, MS3647
- Clevo 1060 6GB Mxm 3.1 laptop videó kártya ingyen házhoz szálitással
- Bomba ár! HP EliteBook 820 G2 - i5-5GEN I 8GB I 256GB SSD I 12,5" FHD I Cam I W10 I Garancia!
- 122 - Lenovo Legion Pro 5 (16ARX8) - AMD Ryzen 7 7745HX, RTX 4070 (ELKELT)
Állásajánlatok
Cég: NetGo.hu Kft.
Város: Gödöllő
Cég: Promenade Publishing House Kft.
Város: Budapest







1200").RemoveDuplicates columns:=1 header:=xlYes vagy xlNo attól függően, hogy van-e fejléc.
Fferi50
