Hirdetés
Talpon vagyunk, köszönjük a sok biztatást! Ha segíteni szeretnél, boldogan ajánljuk Előfizetéseinket!
-
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
-
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.("Y11200").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
- Bitdefender Total Security 3év/3eszköz! - Tökéletes védelem, Most kedvező áron!
- 27%-OS ÁFÁS SZÁMLA I Jogtiszta Microsoft digitális és fizikai termékek I DIGITALKEYZ.COM
- Eredeti Microsoft termékek - MEGA Akciók! Windows, Office Pro Plus, Project Pro, Visio Pro stb.
- Kaspersky, BitDefender, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- Telefon felváráslás!! iPhone 15/iPhone 15 Plus/iPhone 15 Pro/iPhone 15 Pro Max
- Bomba ár! Fujitsu LifeBook U939x- i5-8GEN I 8GB I 256SSD I 13,3" FHD Touch I HDMI I Cam I W11 I Gari
- Telefon felvásárlás!! Xiaomi Redmi 9, Xiaomi Redmi 9AT, Xiaomi Redmi 10, Xiaomi Redmi 10 2022
- ÚJ Lenovo Yoga 7 2-in-1 - 14"WUXGA - Ryzen 7 8840HS - 16GB - 512GB - Win11 - 3 év garancia - MAGYAR
- BESZÁMÍTÁS! Apple Macbook Pro 13" 2020 M1 16GB 1TB SSD macbook garanciával hibátlan működéssel
Állásajánlatok
Cég: FOTC
Város: Budapest