-
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
-
m.zmrzlina
senior tag
A H oszlopban szeretném megkeresni az I oszlop elemeit.
Képünk csak illusztráció lényeg, hogy az adatbázis elemei és a keresett szavak közt néhány karakter eltérés lehet de attól még egyeznek.
-
m.zmrzlina
senior tag
válasz Delila_1 #13875 üzenetére
Ha jól értem a képletet akkor:
Melyik a sora annak a cellának,
-amiben lévő szöveg kezdődik valamivel
-azután jön a keresett szó első két betűje
-végül befejeződik valami mással.Sajnos ilyen szempontból rossz a példám (bocs ) mert a nem odaillő karakterek bárhol lehetnek a keresendő szóban akár a legelején is.
-
m.zmrzlina
senior tag
válasz Sziszmisz #13878 üzenetére
A sor és oszlopazonosítók ugyan nem látszanak a képen de tegyük fel, hogy a Terméktípus a C oszlopban van és a következő üres oszlop a G valamint az első zöld cella B3
Ez esetben a G4 képlete:
=C4 & " " & $B$3
Ezt le tudod másolni ameddig szükséges (a következő zöld sorig) majd kijelölöd G4-G12-ig és csak az értéket beilleszted a C oszlopba.
-
m.zmrzlina
senior tag
válasz Sziszmisz #13878 üzenetére
Kicsit gyorsabb megoldás, ha bemásolod új modulba a következő makrót:
Sub hozzafuz()
For Each cella In Selection.Cells
cella.Value = cella.Value & " " & ActiveCell.Offset(-1, -1).Value
Next
End SubKijelölöd azt a tartományt amelynek minden eleméhez hozzá szeretnéd fűzni a leírást majd elindítod a makrót. Az ActiveCell.Offset(-1, -1) határozza meg, hogy a kijelölés legfelső cellájához képest (jó esetben ez az aktív cella) hol helyezkedik el az a cella aminek a tartalmát minden kijelölt cella tartalmához hozzá kell fűzni. A példabeli esetben 1 sorral felette és tőle egy oszloppal balra.
Kérdés: Minden termékcsoport (zöld cellák közti tartomány) pontosan 9 elemből áll mint a példában van?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Van egy listás adatérvényesítésem amelynek a forrástartománya kb 3000 elemet tartalmaz ami ABC szerint rendezve van.
Van-e valamilyen lehetőség arra, hogy ha elkezdem begépelni az érvényesítést tartalmazó cellába a szöveget (az első karaktert ami mondjuk K) akkor a cellában megjelenik az forrástartomány első K-val kezdődő eleme amit enterrel tabbal bármivel be lehetne írni a cellába?
-
m.zmrzlina
senior tag
A fenti képen az A:J oszlopok külső adatforrásból származnak és a látott formában kerülnek az Excelbe. Az L oszlopot a következő módon képzem:
For i = 2 To 8
Cells(i, 13).Value = Mid(Cells(i, 7), 7, 4) & "." & Mid(Cells(i, 7), 1, 2) & "." & Mid(Cells(i, 7), 4, 2)
Nextami a '=ÖSSZEFŰZ(KÖZÉP(G3;7;4);".";KÖZÉP(G3;1;2);".";KÖZÉP(G3;4;2)) képlet VBA megfelelője.
M2 cella képlete M1-ben
Kérdésem, hogy hogyan tudnám egy lépésben megoldani ezt a transzformációt
A végső célom az, hogy az F és E oszlopok által meghatározott időponthoz, hozzáadjam a J oszlopban lévő értéket tehát pl a 2 sorban a 2012/14/10 16:50:15-höz adjuk hozzá a 3 nap 22:01:20 értéket (J2 cella)
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz m.zmrzlina #15476 üzenetére
ami a '=ÖSSZEFŰZ(KÖZÉP(G3;7;4);".";KÖZÉP(G3;1;2);".";KÖZÉP(G3;4;2)) képlet VBA megfelelője.
Pontosabban a '=ÖSSZEFŰZ(KÖZÉP(F2;7;4);".";KÖZÉP(F2;1;2);".";KÖZÉP(F2;4;2)) képlet VBA megfelelője.
Menet közben a képkivágáshoz odébbtettem a tartományt.[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Delila_1 #15479 üzenetére
Köszönöm a segítséget. A dátumérték()-kel sikerült megoldani makróval...
...miután kiderült, hogy nem excel függvényként (Application.Worksheetfunction. stb stb) kell használni, hanem van egy ilyen VBA függvény. Talán másnak is mond újat ez az oldal
Köszi még egyszer.
-
m.zmrzlina
senior tag
Van egy ilyen sorom:
ActiveCell.Offset(0, 1).Value = Cells(ActiveCell.Row, 6).Value + Cells(ActiveCell.Row, 5).Value - shift + (1 / 24)
Az = jel jobb oldalán lévő két cella dátumot és időt tartalmaz. A shift szintén idő amit ki kell vonni az előző két cella által meghatározott dátumból.
Az legvégén lévő hozzáadást (az 1/24 értéket) csak akkor szeretném elvégezni ha a shift-tel módosított időpont a nyári időszámítás idejére esik.
Úgy meg tudom oldani, hogy egy cellában a munkalapon megadok egy értéket és azt levizsgálva vagy megtörténik vagy nem a hozzáadás. De ekkor a felhasználónak egy előzetes becslést kellene elvégeznie, hogy hová fog esni várhatóan az időpont, és ez - főleg az óraállítások környéki időpontoknál - kicsit macerás.
-
m.zmrzlina
senior tag
Range(chr(intOszlopszam+64) & : & chr(intOszlopszam+64).Select
Az intOszlopszam változó egy integer és betűvé szeretném alakítani, hogy tudjam használni az első sorban lévő kifejezésben. A betűvé alakítás még csak-csak megy de még 2 idézőjelet is hozzá kellene fűzni a sorhoz.
Mi ennek a módja?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Sub offszet()
Dim oszlop1
Dim oszlop2
oszlop1 = Range("A1").Value
oszlop2 = Range("A2").Value
offszet = Range(oszlop2 & ":" & oszlop2).Column - Range(oszlop1 & ":" & oszlop1).Column
Debug.Print offszet
End SubKérdésem: van-e ettől elegánsabb (főleg rövidebb) megoldás két oszlop közötti távolság integerben történő meghatározására?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Egy fix szélességű de változó hosszúságú tömböt szeretnék létrehozni és azt feltölteni adattal. (kb tíz sor és néhányszor tíz oszlop).
Sub test()
Dim intVmax As Integer
Dim intS As Integer
Dim intO As Integer
Dim tomb1() As Variant
intVmax = 1
ReDim Preserve tomb1(1 To intVmax, 1 To 50)
For intS = 1 To 5
For intO = 1 To 50
tomb1(intS, intO) = intS * intO
Next
intVmax = intVmax + 1
ReDim Preserve tomb1(1 To intVmax, 1 To 50)
Next
End SubA problémám a tömb ReDim parancsánál van. Itt <Subscript out of range> hiba adódik. Nyilván keverem a sort és az oszlopot de nem tudom hogy hol.
Minden segítséget előre is köszi. -
m.zmrzlina
senior tag
válasz m.zmrzlina #16499 üzenetére
Még annyi hozzá, hogy jelenleg fordítva működik a makró. Van pártíz sor és 10 oszlop a tömbben. Az oszlopok számát tudom növelni szükség szerint, majd amikor feltöltöttem akkor
ranCelterulet.Value = Application.Transpose(varSpss_adatsor())
paranccsal iratom ki a szükséges formátumban.
Ez itt azt jelenti, hogy ne is próbálkozzak sorok hozzáadásával mert csak az oszlopok bővíthetőek?
Minél többet olvasok utána annál kevésbé értem. -
m.zmrzlina
senior tag
Van egy userformom amin van két frame kb így:
Azt szeretném, hogy ha az első kérdésnél igennel válaszolt a felh. akkor ne tudjon továbblépni a második kérdésre csak ha a textboxba beírta a darabszámot is. Ezt úgy próbáltam meg, hogy a Frame1 Exit eseményébe betettem egy vizsgálatot miszerint
ha optionbutton1.value=true és textbox1.value="" akkor
msgbox "Javítsd ki a hibát!"
textbox1.setfocusA probléma az, hogy ha átkattint a Frame2-be akkor meg is jelenik a hibaüzenet de miután leokézta az üzenetet nem kerül vissza a fókusz a Frame1 Textbox1-re hanem tudja folytatni a második kérdéssel.
Próbáltam úgy is megadni a textbox1.setfocus parancsot hogy UserForm2.Frame1.Textbox1.SetFocus de arra meg az a hibaüzenet jön, hogy "Object doesnt support this property or method"
Mit rontok el?
-
m.zmrzlina
senior tag
válasz Delila_1 #16756 üzenetére
Köszi a gyors választ!
Az afterupdate-es megoldást azért vetettem el először mert ott mindjárt a kattintás után felugrik a figyelmeztető ablak (hacsak nem textboxt töltöm ki először) amitől számomra feleslegesen "izgága" lesz a program mivel már akkor is jelez ha a felhasználó még nem felejtette el begépelni a darabszámot csak nem ért még oda a kitöltésben.
Így próbáltam afterupdate-tel: (természetesen az előző hsz-ban a kép csak illusztráció ezért mások a vezérlők nevei)
Private Sub OptionButton53_AfterUpdate()
If OptionButton53.Value = True And TextBox7.Value = "" Then
If MsgBox("Add meg a kutyáid számát!", vbInformation, "Adatbeviteli hiba!") = vbOK Then
TextBox7.SetFocus
End If
End If
End SubAz volt az elképzelésem hogy ha a felh. belekattint a következő kérdés frame-jébe azt már lehet úgy értékelni, hogy befejezettnek gondolja az első kérdést és ekkor már kezdhetem kiértékelni az esetleges hibákat.
-
-
m.zmrzlina
senior tag
válasz Delila_1 #16759 üzenetére
Ez OK értem a logikáját a megoldásodnak csak az a baj, hogy mivel a valódi formon van 9 db kérdés számtalan optionbuttonnal, ráadásul a későbbi kérdéseknél olyan szövevényes összefüggéseket kellene kezelni hogy nem merem bevállalni ezzel a módszerrel.
Közben találtam valamit itt a How to prevent a UserForm from being closed by using the Close button rész után aminek a logikája mentén megcsináltam ezt:
Private Sub Frame14_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If OptionButton53.Value = True And TextBox7.Value = "" Then
If MsgBox("Add meg a kutyáid számát!", vbInformation, "Adatbeviteli hiba!") = vbOK Then
Cancel = True
End If
TextBox7.SetFocus
End If
End SubEz a megoldás nem engedi elhagyni a Frame-t amíg nincs kitöltve rendesen.
-
m.zmrzlina
senior tag
Van egy ilyen munkalapom: (A:C oszlopok kb 15000 sort tartalmaznak)
A J oszlop képlete megszámolja, hogy G:I oszlopok -1-re végződő számhármasai hányszor szerepelnek A:C oszlopokban. Ugyanezt szeretném megcsinálni makróval, valahogy így:
Range("I3").Select
Do While ActiveCell.Value = -1
ActiveCell.Offset(0, 1).Value = Application.WorksheetFunction.SumIfs _
(Range("A:A"), ActiveCell.Offset(0, -2), Range("B:B"), ActiveCell.Offset(0, -1), ActiveCell.Value, -1)
ActiveCell.Offset(1, 0).Select
LoopType mismatch hibát kapok. Mit rontok el?
(Tudom innen ki lehetne hagyni a SUMIFS() utolsó két argumentumát de ez most részletkérdés)
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz m.zmrzlina #16867 üzenetére
Időközben próbáltam ezt a változatot is:
Range("I3").Select
Do While ActiveCell.Value = -1
strKeplet = "=DARABHATÖBB(A:A;G" & ActiveCell.Row & ";B:B;H" & ActiveCell.Row & ")"
ActiveCell.Offset(0, 1).Value = strKeplet
ActiveCell.Offset(1, 0).Select
LoopEbben az esetben a:
ActiveCell.Offset(0, 1).Value = strKeplet
sor ad Application-defined or object-defined error-t. -
m.zmrzlina
senior tag
válasz Delila_1 #16869 üzenetére
Szia, köszi a választ!
Azért ragaszkodom a makrós megoldáshoz mert nem én fogom használni a munkalapot ezért szeretnék mindet amit lehet a "gombnyomásig" leegyszerűsíteni. Ha nekem kellene akkor a DARABHATÖBB()-es megoldás is jó lenne.
Az a koncepció, hogy a felh. egy üres munkafüzetbe beimportálja a szükséges adatokat,elmenti, bezárja. Aztán megnyitja a makrós munkafüzetet elindítja a makrót (betallózza az előbb mentett adatbázisát) és a makró kikeresi neki a szükséges adatokat.
A szerkezet amit a képen látsz az már a makró elejének a munkája, egyszerűbb volna nem a felhasználóra bízni a képletírást.
-
m.zmrzlina
senior tag
válasz Delila_1 #16871 üzenetére
Range("J3:J15000") = "=COUNTIFS(A:A,G3,B:B,H3,C:C,I3)"
Ennél a sornál hal most meg nekem a makró (ld #16868. hszt)
Egyszerűen nem írja ki munkalapra a makró a megadott cellába a képletet. Ha kitörlöm az "="- t a fv neve elől akkor kiírja munkalapra (szövegként természetesen, és persze nem számol)
Maga a fv jó mert ha kézzel odabiggyesztek elé egy "="-t akkor jó eredményt ad.
A baj az hogy makróval nem tudom kiírni a fv-t a munkalapra.Illeteve nekem úgy is jó lenne ha a makró számolná ki az eredményt és már csak azt írná ki munkalapra. (ez volt az eredeti koncepció #16867 hsz)
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Ismerem egy excel fáljnak az elérési útját és a nevét.
Hogyan tudom makróból legkönnyebben lekérdezni, hogy az adott fájl nyitva van-e?
-
m.zmrzlina
senior tag
Van egy ilyen makrórészlet:
For intI = Worksheets.Count To 1 Step -1
If Worksheets(intI).Name <> "összesítő" Then
If Worksheets(intI).Range("B1").Value = "valami" Then
Worksheets(intI).Name = Int(Worksheets(intI).Range("B10").Value)
Else
Application.DisplayAlerts = False
Worksheets(intI).Delete
Application.DisplayAlerts = True
End If
End If
NextAz a bajom vele, hogy ha két munkalapon a B10-es cella (egészrésze) megegyezik akkor (várakozásom szerint) annak kellene történnie, hogy a makró az első munkalapot átnevezi a másiknál pedig hibára fut mivel már van egy olyan nevű munkalap amire az aktuálisat nevezni kellene. (ezt a második munkalapot egyébként törölni szeretném a későbbiekben)
Ezzel szemben az történik, hogy hibaüzenet nélkül végigfut a makró és a második munkalapnak meghagyja az eredeti nevét.
Miért van az hogy nem fut hibára a makró az átnevezésnél és hogyan lehet legegyszerűbben detektálni a névütközést?
(ellenőriztem: nincsen "úgymaradt" Application.DisplayAlerts = False parancs sehol a kódban korábban.)
-
m.zmrzlina
senior tag
Még egy kérdés, az előbbitől teljesen független.
Van egy tartomány (mondjuk legyen az "A" oszlop). A felhasználónak ezt kell kitöltenie olyan tartalommal (csak szöveg) amit kb 250 különböző tételből választhat ki, ezen kívül itt nem fordulhat elő más tartalom.
Szeretném a tartomány kitöltését megkönnyíteni de nem validált listával mert 250 elem esetén már macerás.
Az lenne a legegyszerűbb ha az egyébként az excelben már működő automatikus kiegészítést tudnám úgy használni, hogy ha elkezdi begépelni a szöveget akkor felkínálja a begépelt tartalom alapján lehetséges választásokat.
Van eree valamilyen lehetőség?
-
m.zmrzlina
senior tag
válasz Delila_1 #17064 üzenetére
Érdekes dolgot vettem észre.
A Worksheets(intI).Name = Int(Worksheets(intI).Range("B10").Value) sor után betettem ezt:
If Err.Number <> 0 Then Debug.Print Err.Number
A látszólag jól lefutó átnevezések után is hibakódot ír (9-t) de ott sem áll meg a futás.
Az On Error Resume Next csak az azt követő sorra van hatással, vagy a kód további részében minden hibánál továbblép?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Delila_1 #17069 üzenetére
Az On Error Resume Next megadásakor nem áll le a program, hanem a következő sorra ugrik.
És ezt mindaddig csinálja amíg az Az On Error Goto 0 ki nem kapcsolja.
Ez volt a probléma. Korábban volt egy Resume Next és nem volt utána Goto 0
Köszi
Az automatikus kiegészítére valakinek valami ötlet?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Köszi a választ.
Az egybefüggő tartományos módszert ismerem. A te javaslatodról mondanál pár szót?
Mennyiben különbözik ez a megoldás a validált listástól? Ott ugyanis ALT+lefelenyíl > PgDown(PgUp) vagy a kurzornyilak segítségével lehet a kívánt elemhez navigálni. Merthogy ettő keresek egy rugalmasabb megoldást. (kb 200-250 elemről van szó)
-
m.zmrzlina
senior tag
Ki lehet nyerni valahogy makró segítségével egy fájlból a fájl létrehozásának dátumát?
Text fájlról van szó (nem txt kiterjesztéssel) de a fájl maga nem tartalmazza az adatot.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Ez kiváló pont ilyesmire van szükségem.
Hogyan lehet ezt a linkedcell értéket futásidőben változtatni?
Az lenne a cél, hogy (megkönnyítendő az adatbevitelt) egér használata nélkül:
1. pl A1-be írok egy számot
2.Linkedcell értéke AktiveCell.Offset(0,1)
3.Enter-re megkapja a Combobox a fókuszt
4.kiválasztom a ListfillRange elemeiből a kívántat
5.Enterre beíródik a Combobox tartalma LinkedCell-be, ez esetben ("B1")
6.(A oszlop első nem üres cellája).Select (eggyel lejjebb ugrik az aktív cella)
7. GoTo 2 -
m.zmrzlina
senior tag
válasz Herczi #17160 üzenetére
Az nem működik, hogy egy következő lépésben a képlet eredményével (B1) felülírod az A1 cellát?
Másolás > Irányított beillesztés > Értéket
Egyébként az előző képlet a 2,5-tel maradék nélkül osztható értékeket is felkerekíti. pl 90 ből 92,5 lesz. Ha ezt el akarod kerülni akkor használd a következő képletet:
=HA(MARADÉK(A3;2,5)<>0;A3+(2,5-MARADÉK(A3;2,5));A3)
-
m.zmrzlina
senior tag
Köszönöm, működik.
-
m.zmrzlina
senior tag
Van egy ilyen kódrészletem:
Range("C" & intMeterfejlec & ":D" & intMeterfejlec_vege).Select
On Error GoTo hianyzoport:
intPorthol = Selection.Find(What:=strPort, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Row
If Mid(Cells(intPorthol + 4, 5).Value, 9, 4) <> "UNDF" Then
strPortmap(1, intKovport) = Mid(Cells(intPorthol + 4, 5).Value, 9, 4)
intKovport = intKovport + 1
Else
strPortmap(1, intKovport) = Empty
intKovport = intKovport + 1
End If
hianyzoport:
If Err.Number <> 0 Then
strPortmap(1, intKovport) = "NONE"
intKovport = intKovport + 1
End IfEz egy számlálós ciklus belsejében van és azt csinálja, egy kijelölt tartományon belül megkeres egy értéket (strPort változó) és ettől a cellától meghatározott (sor, oszlop) távolságra lévő cella tartalmának bizonyos részét beleírja egy tömb megfelelő helyére (ha az megfelel bizonyos feltételeknek) Ha nem találja a strPort változót akkor hibára fut és a kérdéses tömbelem "NONE" lesz.
A probléma az, hogy az első hibánál szépen lefut a hibakezelés (elugrik a kód a hianyzoport: cimkére) a második esetben azonban Object variable or With block variable not set (Error 91) hibával kiakad.
Kérdés: miért fut le először jól és miért akad ki ugyanannál a hibánál másodszor?
Új hozzászólás Aktív témák
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! LEGOLCSÓBB! Automatikus 0-24
- Eladó Steam kulcsok kedvező áron!
- Új, bontatlan World of Warcraft gyűjtői kiadások
- Megmaradt - Eredeti Humble, Choice - Steam kulcsok
- Eredeti Microsoft termékek - MEGA Akciók! Windows, Office Pro Plus, Project Pro, Visio Pro stb.
- GameStar / Gamer Magazin / PC Guru stb papírtokos játékmellékletek 350Ft/db
- Norton 360 Mobile HU 1 Felhasználó 1 eszköz 12MO Antivírus
- Windows Server 2016, 2019, 2022 Standard, Datacenter, Essentials termékkulcsok - MEGA akció!
- Miasma Chronicles - Bundle maradék - Keresem
- Office Professional Plus 2013, 2016, 2019, 2021 RETAIL licenckulcsok - MEGA Akció!
Állásajánlatok
Cég: Alpha Laptopszerviz Kft.
Város: Pécs
Cég: Ozeki Kft.
Város: Debrecen