-
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
-
Fferi50
Topikgazda
Szia!
Az ASH változót definiáld publikusnak a Thisworkbook kódlap elején. (
Public ASH As WorkSheet)
Ezután hivatkozhatsz rá úgy, hogySet Thisworkbook.ASH = Activesheet
Szerintem érdemes lenne még a Workbook_Sheet_Deactivate eseménybe beletenni a következőt:Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)If Sh.Name<>"Output" Then Set ThisWorkbook.ASH=ActiveSheetEnd Sub
(ez szintén a ThisWorkbook kódlapján van).
Így minden munkalap elhagyáskor az ASH változód "emlékezni" fog rá, honnan kerültél az aktív munkalapra.
A helytelen jelszó megadása esetén pedigThisWorkbook.ASH.Activatekell az Msgbox után.Üdv.
-
Fferi50
Topikgazda
Szia!
Úgy érzem, ez már makró, mert a feltételes formázásban nem lehet az adott cella színére hivatkozni. Valamilyen tartalom szabályra igen. Tehát azt mondhatjuk feltételes formázásnál, ha az A1 cella valamit tartalmaz, akkor a formázás legyen érvényes a 2,5,8,9 és a12,15,18,19....stb. sorra is. Azt viszont nem, ha az A1 cella színe piros, akkor legyen piros, zöld stb. a többi sor színe.
Tehát konkrét, értékekhez kapcsolódó formázási szabály kell.
Üdv. -
Fferi50
Topikgazda
Szia!
Feltételes formázás: a formázandó cellák kijelölése képlettel.
A képlet =A1<>""
Érvényessége: megadod a tartományt ahol érvényesíteni szeretnéd.

Fontos: A képletben relatív legyen a címzés, annak a tartománynak az első cellája, ahol a formázást érvényesíteni szeretnéd. A tartomány címe viszont legyen abszolút (dolláros).Üdv.
-
Fferi50
Topikgazda
Szia!
Rendezd le az EGÉSZ TÁBLÁDAT úgy, hogy az üres cellák legyenek elől (vagy a végén).
Ezután beírod a függvényedet - így másolni is könnyebb -, majd értékké alakítod.
Ha az eredeti sorrendet meg szeretnéd tartani, akkor vegyél fel a tábládhoz egy segédoszlopot, amiben 1-től felfelé vannak a számok növekvő sorrendben (persze ez is legyen benne az előző rendezésben). Ez alapján a műveletek végén vissza tudod állítani az eredeti sorrendet.
Üdv. -
Fferi50
Topikgazda
válasz
huliganboy
#41418
üzenetére
Szia!
Talán Trim(m), nem emlékszem pontosan.
Üdv. -
Fferi50
Topikgazda
válasz
Fferi50
#41395
üzenetére
Szia!
A problémát mégis az okozta, hogy az adott cella (B2) egyesített cella volt, így a Target objektum mindhárom cellát tartalmazta, ezért nem tudott értéket vizsgálni rajta.
Mivel az első feltétellel megállapítottuk, hogy a B2 cella "benne van" a tartományban, utána már hivatkozhatunk rá közvetlenül:
If Range("B2").Value="" ThenÜdv.
-
Fferi50
Topikgazda
Tegyél légy szíves egy töréspontot az első feltételvizsgálathoz. (Egérrel rámutatsz a sor előtt levő mezőre és bal klikk - a sor elé kerül egy pont és kiszínesedik a sor.)
Utána soronként próbáld meg végrehajtani.
Az első sor végrehajtása után az Immediate ablakban meg tudod nézni a Target címét így:
?Target.Address erre üss egy entert.
Ezt a képet mutasd meg légy szíves, mi lett az eredmény.Üdv.
-
Fferi50
Topikgazda
Szia!
Egyesített cella NEM JÁTSZIK ebben az esetben! Ezért ad hibaüzenetet. Mert ugyan te úgy látod, hogy a B2 cella van kijelölve, de "mögötte" a tartományban ott van a másik három.
Szerintem itt más módon kell a B2 cella értékét megvizsgálni.
Mindjárt lecsekkolom.
Egyenlőre nem sikerült a hibát előállítanom. Nem hiszem, hogy az előzőekben írtak okozzák.
Melyik cellát/cellákat választottad ki, amikor a hiba előjött?Üdv.
-
Fferi50
Topikgazda
Szia!
Milyen műveletet szerettél volna végezni, amikor ezt a hibát kaptad?
Több cellát másoltál be? Mert akkor keletkezik ilyen hiba, mivel ebben az esetben a Target.Value tulajdonságot nem tudja értelmezni.
Pár hozzászólással korábban mutattam erre megoldást.
Külön kell venned a két feltételt. Először nézd meg, a B2 cella módosult,
utána a következő sorban, hogy van-e benne érték:
If Not Intersect(Target, Range("B2") Is Nothing Then
If Target.Value="" Then
…
End If
End IfÜdv.
-
Fferi50
Topikgazda
Szia!
Ez azért van, mert itt csak egy cellányi változásra készítettük fel.
Próbáld így:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Application.EnableEvents = False
Dim cl As Range
For Each cl In Target.Cells
cl.Offset(0, 1).Interior.Color = RGB(Application.Hex2Dec(Left(cl.Value, 2)), Application.Hex2Dec(Mid(cl.Value, 3, 2)), Application.Hex2Dec(Right(cl.Value, 2)))
Next
Application.EnableEvents = True
End If
End SubÜdv.
-
Fferi50
Topikgazda
Szia!
Nem mondanám, hogy pofonegyszerű...
Eseménykezelő makró kell a munkalap kódlapjára:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Application.EnableEvents = False
Target.Offset(0, 1).Interior.Color = RGB(Application.Hex2Dec(Left(Target.Value, 2)), Application.Hex2Dec(Mid(Target.Value, 3, 2)), Application.Hex2Dec(Right(Target.Value, 2)))
Application.EnableEvents = True
End If
End Sub
Ha az első oszlopban egy cellába beírsz egy hatjegyű Hexa számot, a mellette levő cellát beszínezi a megfelelő színre.
Vigyázz, hibakezelés nincs benne, ha nem hatjegyű a szám, akkor mindenféle előfordulhat.
(de gondolom a hosszát meg tudod vizsgálni...)Üdv.
-
Fferi50
Topikgazda
válasz
bteebi
#41351
üzenetére
Szia!
Szerintem ott a gond, hogy nem kapcsolod ki közben az eseménykezelést.
Az elejére Application.EnableEvents=False a kikapcsolás.
A végére Application.EnableEvents=True a visszakapcsolás.
Eseménykezelésnél erre mindig figyelni kell, hogy ne következzen be nem kívánt eredmény (az esemény ugyanis bekövetkezik, ha egy cellának változtatod az értékét akár makróból is).
(Mondjuk a hiba rendezése után a keretet sem ártana eltörölni... )Üdv.
-
Fferi50
Topikgazda
Szia!
Az A1 cella a Munka1 munkalapon van, a Lista pedig a Munka2 munkalapon.
"akárhogy próbálom akár amit Te javasoltát, akár amit Delila, nem működik"
Ez sajnos nem releváns információ. Mit jelent az, hogy nem működik? Be tudtad a képletet írni? Ha igen, azt szeretnénk látni. Ha nem, akkor milyen hibaüzenetet kaptál, azt mutasd meg légy szíves.
Üdv. -
-
Fferi50
Topikgazda
Szia!
Nem értem a kérdést, a javaslatom megoldás lehet, hiszen másik munkalapon van a lista. Mi a gondod?
Olyat nem lehet a feltételes formázásban, hogy tartományhoz hasonlítasz egyedi értéket, csak függvénnyel nézheted meg (de ilyen szerintem normál műveletként sem megy).
Cellaszínt másik cella színe alapján csak makróval tudsz módosítani.Üdv.
-
Fferi50
Topikgazda
Szia!
Ez így nem járható út.
Ha visszanézed a hozzászólásom, láthatod, hogy a cellák kijelölése képlettel pontot alkalmaztam. Hogy ne kelljen tételesen kiírni a szöveget, használható a Darabteli függvény.

Az érvényességet pedig a teljes oszlopra ki lehet terjeszteni:
Üdv.
Ps. Gondolom a munkalapnév és az érvényességi tartományok meghatározása nem okoz gondot.
-
Fferi50
Topikgazda
Szia!
Az x-eket ki helyezi el a táblázatban? Ahol kész van, oda már nem kellene írni a G oszlopba?
Ahol még nem történt művelet, azaz 0 a jó+selejt, oda nem kell semmit írni? Hiszen ott még minden művelet hátravan. Vagy extrém esetben, ha minden db selejtté válik "útközben", akkor arra a műveletre már nem kerül sor.... ?Üdv.
-
Fferi50
Topikgazda
válasz
RAiN91
#41285
üzenetére
Szia!
Írtam, hogy ez egy eseménykezelés, akkor indul el, ha a cella értéke megváltozik.
A kérdés az, hogy milyen módon van rákötve az adatforrásra, mert ha az gátolja az eseménykezelést, akkor természetes, hogy eseménykezelés formájában nem tud futni.
Tehát jó lenne látni azt a makrót, amelyik az adatforrásból veszi az adatokat a cellába.
Az időzítést nem egészen értem, miért lenne jó.
"ha ugyan azt az értéket írom be neki, akkor is ő beírja a következő cellába"
Az eseménykezelés sajnos nem érzékeli, hogy ugyanaz maradt-e az érték a cellában, azt külön meg kellene vizsgálni.
De gondolom, a legfontosabb most az adatforrás beapplikálása lenne.Üdv.
-
Fferi50
Topikgazda
válasz
RAiN91
#41282
üzenetére
Szia!
Bocs, de miért is nem másolod le pontosan a makrót, amit küldtem?
Ne csodálkozz, hogy az Offsetet nem lépteti, mivel a k változódat nem definiáltad publikusnak, ezért valahányszor lefut az eseménykezelés, mindig 0 értéket fog tartalmazni.
Másrészt nem kapcsoltad ki az eseménykezelést, így aztán valahányszor beírja az eredményt újra és újra lefut feleslegesen (igaz, ezt nem látod, mert a cellavizsgálat alapján nem csinál semmit az eseménykezelés, csak kilép).
Továbbá, ha automatikusan íródik felül az A1 cella, akkor végtelen folyamat keletkezik, amit nem fogsz tudni leállítani. Ezért kell bele a DoEvents utasítás, mint írtam.Üdv.
-
Fferi50
Topikgazda
válasz
RAiN91
#41276
üzenetére
Szia!
Az alábbi makrót másold a munkalap kódlapjára. (Jobb egérgomb a fülön, majd kód megjelenítése.)
Option Explicit
Public hol As Byte
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$1" Then
Application.EnableEvents = False
Range("A1").Offset(0, hol).Value = Target.Value
If hol < 2 Then hol = hol + 1 Else hol = 0
Application.EnableEvents = True
End If
DoEvents
End Sub
A makró az F1 cellában bekövetkező változásokat követi le, az általad leírt módon az A1-B1-C1 cellában. A $F$1 helyére írd azt a címet ilyen formában, ahol a változások végbemennek, az A1 helyére írd azt az első cellát, ahova a változásokat szeretnéd beírni. A hol változó 0 és 2 között változik, értékétől függően kerül az A1-B1-C1 cellába az érték az Offset tulajdonság alapján.
Más cellákban bekövetkezett változásokra nem reagál.
Azt nem tudom, hogy az általad jelzett gyakoriságú változások miatt a "villódzásokon" kívül fogsz-e látni bármit is.
A DoEvents utasítás azért került bele, hogy a Ctrl+Break billentyűkkel le tud állítani a makró futását.Üdv.
-
Fferi50
Topikgazda
Szia!
1. Egy segédoszlopba - vagy új munkalapra - kimásolod a neveket tartalmazó oszlopot. Ezután adatok - ismétlődések eltávolítása. Megmaradnak az egyedi értékek.
2. Adatok - speciális szűrés - nézd meg a hozzá tartozó segítséget. Helyben is lehet úgy szűrni vele, hogy csak az egyedi adatok láthatók.
3. KimutatásÜdv.
-
Fferi50
Topikgazda
válasz
RAiN91
#41270
üzenetére
Szia!
Amíg a makró fut, addig nemigen tud változni egy cella értéke szerintem, hacsak te nem változtatod.
Szerintem eseménykezeléshez kellene kötnöd a makrót, például a munkalap Change eseményéhez, amiben megnézed, hogy a Cella(9,7) értéke változott-e, ha igen akkor lefut a makród az első i-értékkel. Az i változódat publikusnak vagy static-nak kell deklarálnod, hogy megmaradjon az értéke a makró lefutása után is.
Persze lehet, hogy rossz felé gondolkodok, mert nem ismerem a problémád teljeskörűen.Üdv.
-
Fferi50
Topikgazda
válasz
RAiN91
#41268
üzenetére
Szia!
Ha egy sorba írod a feltételt és a kívánt műveletet, akkor nem kell az End IfFor i = 44 To 47
If Cells(9, 7) <> Cells(9, i) Then Cells(9, i + 1) = Cells(9, 7)
Next
Ha mindenképpen ki szeretnéd írni, akkor az End If kerüljön a cikluson belülre:
For i = 44 To 47
If Cells(9, 7) <> Cells(9, i) Then
Cells(9, i + 1) = Cells(9, 7)
End If
Next
"csak akkor szeretném, ha i ugorjon egyet, ha a feltétel teljesül,"
Egyébként mit csináljon, ha a feltétel nem teljesül? Ácsorogjon és várja meg, hogy teljesüljön? - ami persze soha nem fog bekövetkezni.Üdv.
-
Fferi50
Topikgazda
válasz
AtthysKA
#41257
üzenetére
Szia!
Egy segédoszlopban alkalmazd a következő képletet:
=Helyette(E2;F2;"")
Angolban =SUBSTITUTE(E2,F2,"")
végighúzva addig, amíg értékek vannak az oszlopokban.
Ezután a segédoszlopot értékké alakítod (másolás - irányított beillesztés értékként ugyanoda), majd átmásolod az 5 oszlopba.Üdv.
-
Fferi50
Topikgazda
válasz
Miertvansote
#41248
üzenetére
Szia!
Természetesen számít, hogy angol az Excel, akkor angol függvényneveket kell használni.
Bocs, nem vettem észre, hogy a 0 benne maradt a képletben amit beírtam. Próbáld így:
="MC_K|('Szamolas[" & Row()-1 & "]')"
Üdv. -
Fferi50
Topikgazda
válasz
Miertvansote
#41246
üzenetére
Szia!
1. Ezt így közvetlenül nem tudja az Excel. Ha ezt szeretnéd, akkor a Sor függvényt kell alkalmaznod.
A1 cella képlete:="MC_K|('Szamolas[" & sor()-1 & "0]')".
Ezt már lehúzhatod ameddig szeretnéd. Viszont utána "el kell tüntetni a képletet"!
Kijelölöd az adott területet, majd másolás - irányított beillesztés értéket ugyanoda.
2. Az Összefűzés függvényt kellene használnod, illetve az egyszerűsített változatot, az & karaktert, pl:
=KARAKTER(65) & KARAKTER(97) & KARAKTER(67)
Üdv. -
Fferi50
Topikgazda
válasz
rlazol
#41241
üzenetére
Szia!
"mert amit én ismerek (Fkeres, Vkeres, Keres), az mind növekvő sorrendet kér."
Ez tévedés!
Ha pontos egyezést szeretnél, akkor nem kell sorrendben lenni az adatoknak. Nézd meg pl. az Fkeres 4. paraméterére vonatkozó súgót. Csak akkor kell növekvő sorrend, ha tartományban keresel, azaz nem pontos egyezést, hanem hozzávetőlegeset keresel. Beismerem, elég bénán van fogalmazva a súgó.
-
Fferi50
Topikgazda
válasz
smallcurrant
#41161
üzenetére
Szia!
Be kell kapcsolni még a lapvédelmet is ahhoz, hogy érvényre jusson a szerkesztési korlátozás.
Üdv.
Ps. Egyébként olyan nincs, hogy egy munkalap írásvédett lenne. -
Fferi50
Topikgazda
válasz
BullZeye
#41135
üzenetére
Szia!
Ha egymás alatti sorokban vannak egyesített celláid, akkor egyszerre lehet a műveleteket végrehajtani.
De ha jól értem nem ez a helyzet.
Próbáld ki az alábbi makrót, ez a munkalapon valamennyi egyesített cellát felbontja és az első cellában levő értékkel megtölti:Sub felbont()
Dim cl As Range, cla As Range
For Each cl In ActiveSheet.UsedRange.Cells
If cl.MergeArea.Cells.Count > 1 Then
Set cla = cl.MergeArea
cl.UnMerge
cl.AutoFill Destination:=cla, Type:=xlFillCopy
End If
Next
End SubÜdv.
-
Fferi50
Topikgazda
válasz
BullZeye
#41133
üzenetére
Szia!
Az egyesített cellákat jelöld ki. Jobb egérgomb - cellaformázás - igazítás fülön cellák egyesítésével négyzetből pipa ki (lehet először be, majd utána ki kell).
Ezután kijelölöd az első cellát, megfogod a jobb alsó sarkán levő pontot és elhúzod az eddig egyesített cellákon.Ezek a műveletek működnek úgy is, hogy az összefüggően meglevő - tehát közvetlenül egymás alatt levő - egyesített cellákon alkalmazod. Akkor az első cellák kijelölését kell megtenned és a bal alsó sarki pontot húzni.
Üdv.
-
Fferi50
Topikgazda
válasz
kovacsroli
#41127
üzenetére
Szia!
A 6-10 választási lehetőség mind külön gombon lenne vagy hogyan választanának? Mert akkor a 8 gomb nem elég.
Egyébként a gombhoz rendelt makróban kell megkeresned az éppen üres sort és a szükséges cellát, amibe be kell írnod a szöveget.Üdv.
-
Fferi50
Topikgazda
Szia!
Ha az elrejtés-felfedés alatt azt érted, amit jelent - a sorok magasságának 0-ra és normálra állítását -, akkor az feltételes formázással nem lehetséges, ahhoz makró kell.
Az adott cella értékének vizsgálatához kötve átállíthatod a betűszínt, kitöltőszínt stb. ezzel "eltüntetheted" a cellában látható szöveget.Üdv.
-
Fferi50
Topikgazda
válasz
the radish
#41120
üzenetére
Szia!
Ha lehet makrót használnod, akkor a következő felhasználói függvény segít:
Function jaras(cl As Range) As String
jaras = Left(cl.Value, InStrRev(Left(cl.Value, InStr(cl.Value, "járás")), ",") - 1)
End Function
Ezt egy modullapra kell bevinned. Használata mint az Excel függvényeké, pl. =jaras(A1)
Ha mind megvan, akkor kijelölöd - másolás - irányított beillesztés - értéket. Így eltűnnek a képletek.
Utána akár ki is törölheted a modullapot.Üdv.
-
Fferi50
Topikgazda
válasz
Delila_1
#41069
üzenetére
Szia!
Ez természetesen szintén működik, de pont mai és néhány nappal korábbi tapasztalatom alapján elég veszélyesnek találom a törléseket.
Pl. volt egy Range változó, ami egy cellára mutatott. Aztán egy törlési művelet kapcsán az adott cella törlődött és így vele együtt a rá mutató változó is meghatározatlanná vált, jött a Run time error 424 - Object required hibaüzenet és a leállás.Üdv.
-
Fferi50
Topikgazda
válasz
logitechh
#41070
üzenetére
Szia!
Nem vagyok nagy híve a formázott adatok közötti sor/oszlop törlésnek, ha máshogyan is meg lehet csinálni.
Pl. úgy, hogy rámásolod a mögötte levő sorok tartalmát, majd az utolsó sor tartalmát törlöd.
Valahogy így:Dim sor As Integer
sor=Range("J12").Value
Range(Cells(sor+1 ,"A"),Cells(109,"H")).Copy Destination:=Cells(sor,"A")
Range(Cells(109,"A"),Cells(109,"H")).ClearContentsÍgy nem rontod el az adataid és nem marad köztük üres sor sem.
Üdv.
-
Fferi50
Topikgazda
válasz
logitechh
#41067
üzenetére
Szia!
Nem kell törölni a sort, majd újra beszúrni.
Elég a ClearContents tulajdonságot használni:Range("A100:H100").ClearContents.
Ha az A1 cellában van a sor száma:Range("A" & Cells(1,1).Value & ":H" & Cells(1,1)).ClearContents
A tartalom törlődik és a sor marad, újra felhasználható.Üdv.
-
Fferi50
Topikgazda
válasz
ntamas97
#41050
üzenetére
Szia!
A Darabhatöbb függvényt kellene használnod. Hogy egyszerűbb legyen a keresés, én csinálnék egy segédoszlopot, ahol a válaszok alternatíváit egy betűvel jelölném.
Pl. Sok autómárkát ismerek, származási helyükkel tisztában vagyok és az autós híreket is követem =A
Sok autómárkát ismerek és a származási helyükkel tisztában vagyok =B
stb.
Üdv. -
Fferi50
Topikgazda
válasz
Zola007
#41043
üzenetére
Szia!
Ezt az adott munkalap kódlapjára kell bemásolnod:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 1 Then Exit Sub
Dim cmt As Comment
Application.EnableEvents = False
Set cmt = Target.Comment
If Not cmt Is Nothing Then Target.Comment.Delete
If Target.Value <> "" Then Target.AddComment Target.Value Else Application.EnableEvents = True: Exit Sub
Set cmt = Target.Comment
With cmt
.Visible = True
.Shape.TextFrame.AutoSize = True
.Visible = False
End With
Application.EnableEvents = True
End SubAz előző Selection_Change makrót kitörölheted.
Mit csinál a makró?
Most az A (első) oszlop celláira működik, ha másik oszlopban vannak az adatok, akkor annak a számát íd be az 1 helyére.
Amikor megváltoztatod egy cella értékét, akkor azt az értéket beteszi megjegyzésbe is, amit egy kis piros jelölő mutat majd a cella jobb felső sarkában. A megjegyzés úgy viselkedik, ahogyan az elején írtad, ha az egérrel rámutatsz a cellára, a megjegyzés "kibomlik" és addig látható, amíg az egérmutató ott van.
Viszont ahhoz, hogy a makró szolgáltatását "élvezhesd", egyszer végig kell menned az adott oszlopon "enterekkel", hogy a Change esemény létrejöjjön.
Ha ezt túl soknak találod, akkor másold be ezt a makrót egy Modul lapra (de az sem nagy baj, ha a munkalap kódlapjára másolod):Sub megjegyzes()
Dim cl As Range, cmt As Comment
Application.EnableEvents = False
For Each cl In ActiveSheet.UsedRange.Columns("A").Cells
Set cmt = cl.Comment
If Not cmt Is Nothing Then cl.Comment.Delete
If cl.Value <> "" Then
cl.AddComment cl.Value
Set cmt = cl.Comment
With cmt
.Visible = True
.Shape.TextFrame.AutoSize = True
.Visible = False
End With
End If
Next
Application.EnableEvents = True
End Sub
Ez végigmegy az A oszlopon és felteszi a megjegyzéseket oda, ahol a cellában érték van. Természetesen az A oszlopot változtasd át a neked megfelelőre.Tehát először lefuttatod a második makrót - majd az első követi a változásokat az oszlopban.
Üdv.
-
-
Fferi50
Topikgazda
válasz
Bacusuz
#41029
üzenetére
Szia!
"Úgy látom ez a függvény egy másik fájlt keres hozzá,"
Ez biztosan nem úgy működik.
Valószínűleg nem Munka2 a neve a második munkalapodnak.
A=DARABTELI(Munka2!G:G;G2)>0képletben a Munka2 helyére írd a második munkalapod nevét légy szíves.
Így működik: Amennyiben talál olyan értéket a második munkalapon, az eredmény IGAZ, ha nem talál, akkor az eredmény HAMIS lesz.
Természetesen az FKERES függvény is használható, ahogyan az előttem szóló is javasolta.
Üdv.
-
Fferi50
Topikgazda
válasz
bartucz911
#41001
üzenetére
Szia!
Segédoszlopokkal és sok képlettel valósítható meg, ha nem szeretnél makrózni, mivel előre nem lehet tudni, hogy hány számot kell megvizsgálni.
Ha feltételezzük, hogy az A oszlopban vannak a számaid, a B oszlopba szeretnéd látni a lépésszámot, a C oszlopban (esetleg) az ismétlődő számot, akkor a segédoszlopok - hogy elkülönüljenek- kezdődjenek az E oszlopban.
Az E2 cella képlete:=HAHIBA(HOL.VAN($A2;$A3:$A$62;0);1000)
Az F2 cella képlete:=HA(DARABTELI($A$2:$A3;$A3)=1;HAHIBA(HOL.VAN($A3;$A4:$A$62;0)+OSZLOP()-5;1000);1000)
A G2 cella képlete:=HA(DARABTELI($A$2:$A4;$A4)=1;HAHIBA(HOL.VAN($A4;$A5:$A$62;0)+OSZLOP()-5;1000);1000)
A H2 cella képlete:=HA(DARABTELI($A$2:$A5;$A5)=1;HAHIBA(HOL.VAN($A5;$A6:$A$62;0)+OSZLOP()-5;1000);1000)
és így tovább, annyi oszlopon keresztül, ahány számig szeretnéd az összehasonlítási lehetőséget, mindig egy-egy sorral lejjebb téve a vizsgálódás tárgyát. A keresendő tartomány végét, ami most $62, a te tartományod végére állítsd be. Az 1000 egy kellőképp nagy szám, legyen a magasabb, mint az utolsó értéket tartalmazó sor.
A képletet húzhatod lefelé az oszlopokon, ameddig már nincs összehasonlítható szám.
A B2 cella képlete:=MIN(E2:X2)
A C2 cella képlete:=INDIREKT("A" & B2 +SOR() )
Ez is húzható lefelé az oszlopban.
Üdv.
Ps. Persze ez elég bonyolult. A makró sokkal egyszerűbb megoldás. -
Fferi50
Topikgazda
válasz
JagdPanther
#40957
üzenetére
Szia!
Mivel nincsenek számítások benne, igazából majdnem mindegy hány sor van... persze minél több a sor, annál tovább tart a beszúrás és a törlés, de nem észrevehető pár százas nagyságrendben szerintem.
Viszont egyszerűsíthető a dolog, ha az 5. sortól kezdve táblázattá alakítod az egészet (kijelölöd, beszúrás - táblázat fejléccel), mivel a táblázatba beszúrás automatikusan felveszi a táblázat szabályait (formázás, validáció), tehát azzal nem kell foglalkozni. Elég csak az új értékeket beírni.
Gyorsít még a dolgon, ha a Select utasításokat elhagyod, a cellákra a címükkel közvetlenül tudsz hivatkozni.
Pl.Sheets("Bevitel").Range("H6").Value = Date(igen, a makrórögzítő a selectet is rögzíti meg a sorgördítést is... ezeket szépen ki kell gyomlálni.)
Üdv.
-
Fferi50
Topikgazda
válasz
JohnYBoVs
#40954
üzenetére
Szia!
Ehhez meg kell osztanod a munkafüzetet - Véleményezés - munkafüzet megosztása (és védelme).
DE!
A változtatások csak akkor láthatóak, ha az aktuális állapotot mentik a felhasználók. Tehát ahhoz, hogy lásd, mit szerkesztett X, először menteni kell a munkafüzetet X-nek, utána pedig neked.
Bár be lehet állítani automatikus mentést is, de a mentések között eltelt idő miatt nem lesz teljes a változások beépítése. Továbbá a mentés idején nem lehet szerkeszteni a munkafüzetet.Talán inkább valamilyen adatbázis kezelőt kellene használnotok, amiben meg van oldva az egyidejű használat kezelése.
Üdv.
-
Fferi50
Topikgazda
-
Fferi50
Topikgazda
Szia!
Nem tudom, Google-ban van-e Darabteli függvény (vagy annak megfelelő angol verzió, CountIf), ha igen, akkor a képletek:
B2 cellába =HA(DARABTELI($A$2:$A2;$A2)>1;"";"x") , ezt végighúzod a B oszlopon lefelé.
B1 cellába =DARABTELI($B$2:$B$20;"x") , a vége az A oszlop utolsó cellájának sora legyen.Üdv.
-
Fferi50
Topikgazda
Szia!
Háát 2x nem is kell hozzáadni a +1-et.
Idézet:"sormeghat = Range("a" & rows.count).End(xlUp).Row+1
minden esetben az A oszlop első üres cellájának sorát adja meg."Tehát a másolás céljánál már nem kell hozzáadni vagy persze itt is lehagyhatod.
Ez a formula minden esetben használható, nem csak a fejléces munkalapon.Üdv.
-
-
Fferi50
Topikgazda
Szia!
Mert a
sormeghat = Range("a1").End(xlDown).Row
eredménye csak a fejléc esetén a munkalap utolsó sorának számát adja vissza, azon túl pedig nem lehet adatot beírni.
Helyettesormeghat = Range("a" & rows.count).End(xlUp).Row+1
minden esetben az A oszlop első üres cellájának sorát adja meg.Üdv.
-
Fferi50
Topikgazda
válasz
JagdPanther
#40870
üzenetére
Szia!
Ahhoz, hogy tudd használni az Outlook változóit a makróban, a Referenciák közé fel kell venni az Outlook referencia könyvtárát - pl. Microsoft Outlook 16.0 Object Library - a Tools - References menüpontban.
Utána deklarálhatod az olApp változót mint Outlook.Application.
Egyébként csak Object -ként deklarálva működik.
(Ez utóbbi esetben viszont nem hozza fel automatikusan az Outlook objektumait.)
A referenciát makróból is hozzá lehet adni a projekthez, mielőtt elindítanád a meghívást.Üdv.
-
Fferi50
Topikgazda
Szia!
"nem csak akkor fut le, amikor meghívom, hanem akkor is, amikor a főprogram véget ér, és jön ez a bizonyos SUB alprogramnév.... END SUB rész."
Ez egyszerűen nem így működik. Egy makró csak akkor fut le, ha meghívod. Attól, hogy egymás után vannak írva, még nem fog ráfutni!
Üdv.
-
Fferi50
Topikgazda
válasz
Laciahegyrol
#40866
üzenetére
Szia!
Szerintem magyar Windows és magyar Excel mellett kellene látnia a magyar ékezetes karaktereket.
Tegyél fel elérhető helyre egy mintát a munkafüzetből, akkor meglátjuk, hogy nálunk is "rosszul" viselkedik-e.Üdv.
Ps. Használd a programód vagy a konvertálatlan gombot az alsó sorban, hogy ne legyenek röhögő fejecskék. -
Fferi50
Topikgazda
válasz
Laciahegyrol
#40827
üzenetére
Szia!
Először is, neked nem a Search függvény kell, mert az arra szolgál, hogy megkeresse, van-e benne olyan karaktersorozat.
Ezzel szemben a CountIf (magyarul Darabteli) függvény megszámolja, hogy a keresett érték hányszor fordul elő a tartományban.
Másodszor:
Mivel szövegrészletet keresel, ezért használni kell a * (csillag) joker karaktert a szöveg előtt és után is.
A B3 cella képlete:
Magyarul:=DARABTELI(D:D;"*" & A3 & "*")
makróból így adhatod meg:Range("B3").Formula="=COUNTIF(D:D,""*"" & A3 & ""*"")
De egyszerre egész tartomány képletét is megadhatod, pl.Range("B3:B10").Formula="=COUNTIF(D:D,""*"" & A3 & ""*"")Üdv.
Ps. A Search (magyarul Szöveg.Keres) függvény egy db szövegen belül tud keresni, több cellán nem. -
Fferi50
Topikgazda
válasz
Laciahegyrol
#40816
üzenetére
Szia!
Természetesen tudtam, hogy az I15 cella tartalmát keresed, a kérdés az volt, mit tartalmaz a cella konkrétan (egy betűt, egy szót, szótöredéket???)
Hová tetted a mintát?Üdv.
-
Fferi50
Topikgazda
Szia!
Egyrészt, igaz amit Delila írt, tehát makróban angol függvényneveket használunk, az pedig a Date.
Másrészt a dátumok különleges bánásmódot igényelnek, nem mindegy, hogyan használjuk.
Próbáld így:ActiveSheet.Range("$A:$X").AutoFilter Field:=4, Criteria1:= _
"<" & Format(Date - 5, "###"), Operator:=xlAnd
Üdv. -
Fferi50
Topikgazda
Szia!
Makróval (majdnem) mindent meg lehet csinálni. De azt ugye tudod, hogy pl. a cellaméret és a nyomtatási méret az nem ugyanaz.
Wordben pedig megadhatod pl. hogy hány oldalt (etikettet) nyomtasson egy oldalra, hasábba rendezheted stb.
Egy próbát szerintem megérne az a körleveles forma.
Ha teszel fel elérhetően egy mintát, biztosan találsz segítőket hozzá.Üdv.
-
Fferi50
Topikgazda
válasz
Laciahegyrol
#40772
üzenetére
Szia!
1. A Workbooks("*.*") mi szeretne lenni? Mert munkafüzet nevet ilyen módon nem lehet megadni.
2. Mi a tartalma az I15 cellának? Egy betű vagy valamilyen betűcsoport?
3. Nyelvi beállítások rendben vannak? Milyen karakterkódolás van abban a munkafüzetben, ahol keresel?
4. Egy mintát ha feltennél elérhető módon, lehet okosabbak lennénk, mert így csak a levegőbe durrogtatunk.Üdv.
-
Fferi50
Topikgazda
válasz
MarioAna
#40759
üzenetére
Szia!
Valami szőr biztosan van a szitában, mert nálam szépen műxik (tudom, ez téged nem vígasztal).
Nézd meg légy szíves a feltételes formázás szabályainál a szabályok kezelésében, hogy mely szabályoknak milyen az érvényességi területe. Ott elvileg ki kell derülnie az ellentmondásnak.Üdv.
-
Fferi50
Topikgazda
válasz
MarioAna
#40756
üzenetére
Szia!
Háát, a kép és a szöveged szépen ellentmond egymásnak.....
Az az A2-3-4 cella az éppenséggel A2-B2-C2 lesz ugye? Az átlag pedig a D2 cellában van.
A +- eltérést pedig úgy nézheted meg, hogy az eltérés abszolút értékét veszed. Kijelölöd a 3 oszlopot, majd
feltételes formázás képlettel: = ABS(A2-$D2)>10 .
Az érvényesség pedig a 3 oszlop.Üdv.
-
Fferi50
Topikgazda
válasz
huliganboy
#40751
üzenetére
Szia!
Az egyes kérdésekre adható válaszokat az adott sorba be tudod tenni. Pl. a B5 cella adatérvényesítési területén levő értékeket másolás - transzponálás módon teheted a körlevél megfelelő oszlopai alá - így a sorrend is megmarad. Ugyanez igaz az igen-nem választékra is, csak persze itt egyszerűen be tudod írni a két cellába.
Azért még mindig nem értem, ha Excelt szeretnél kiküldeni, akkor mire fel kell a körlevél funkció?
Csinálhatsz egy sablont a kérdéseidnek megfelelően az általad kívánt színes-szagos formában (lásd az Excel sablon mintái!), sablonként elmented és az alapján nyitod meg az új munkafüzetet. Azt elküldheted mindenkinek. Ráadásul az összesítés is valószínűleg egyszerűbb lenne, mintha Word fájlokat kapnál vissza.Üdv.
-
Fferi50
Topikgazda
válasz
huliganboy
#40745
üzenetére
Szia!
Már nem világos, mit is szeretnél valójában. Word körlevelet Excel adatok alapján? Excel-ben körlevél formátumot? Minek a lenyíló, ha nem az Excelben van a körlevél?
Wordben kiküldött körleveleket szeretnél Excelben összesíteni?
Jó lenne ezt tisztázni előbb szerintem.
Talán mutass egy mintát is hozzá.Üdv.
-
Fferi50
Topikgazda
válasz
RAiN91
#40743
üzenetére
Szia!
Elképzelhető, hogy olyan tartományokat határoz meg, amelyek nem egybefüggőek, ezért nem tudja törölni. Bár akkor hibával meg kellene állnia.
A Range("A1") az első cella a munkalapon.
A CurrentRegion az A1 cella körüli összefüggő tartomány, amelyet egy üres sor és egy üres oszlop határol.
A Columns(5) ennek a tartománynak az 5. oszlopa. Ebben keressük az üres cellákat és rendeljük hozzá az egész sort.Talán érdemes megpróbálni így:
Sub Sortorles2()
Dim ures As Range, terulet As Range
Set ures = Range("A1").CurrentRegion.Columns(5).SpecialCells(xlCellTypeBlanks).EntireRow
For Each terulet In ures.Areas
terulet.Delete
Next
End SubDe problémát okozhat még esetleg az összevont cellák létezése is.
Persze ha túl nagy a terület, amit használsz, akkor lassú lehet a törlés így is.
Üdv.
-
Fferi50
Topikgazda
válasz
huliganboy
#40741
üzenetére
Szia!
Mivel a körlevél forrása az Excel egy-egy sora lehet, ezért a 3 lehetséges választ külön-külön cellákba kell felvinni. Ezután a Word-ben a körlevél törzsben oda teszed a mezőket, ahol látni szeretnéd.
Tehát az Excel sor így nézhet ki pl.
Kérdés1, válasz11,válasz12,válasz13,kérdés2,válasz21,válasz22,válasz23Üdv.
-
Fferi50
Topikgazda
válasz
huliganboy
#40739
üzenetére
Szia!
Pl. A2 cellában a képlet van, ha a B1 cellában IGEN van, akkor megjelenik a kérdés, ha más, akkor üresnek látszik a cella.
Üdv.
-
Fferi50
Topikgazda
válasz
huliganboy
#40736
üzenetére
Szia!
Bármit beszúrni csak makróval tudsz.
Ellenben képlettel lehet feltételesen megjeleníteni szöveget (kérdést).
Pl. HA(B1="IGEN";"Kitől kaptad?";"")
és így tovább.
Feltételes formázással a színezést is megoldhatod.
Az 5 sor válasz után feltennék egy újabb kérdést az A oszlopban, amire a B oszlopban válaszolni kellene szintén igen/nemmel, pl. Kaptál mástól is?
Ezután a feltételt erre a B oszlopban levő cellára érvényesíteném, és így tovább válasz lehetőségenként.Üdv.
-
Fferi50
Topikgazda
válasz
RAiN91
#40735
üzenetére
Szia!
Az üres cellákat a Range.SpecialCells(xlCellTypeBlanks) metódussal kaphatod meg.
Pl.set ures=Range("A1").CurrentRegion.Columns(5).SpecialCells(xlCellTypeBlanks).EntireRow
A törlés pedigures.DeletePersze az egész mehet egy lépésben is, a változó hozzárendelése nélkül.
Üdv.
-
Fferi50
Topikgazda
Szia!
A szűrés után látszó cellákat megkaphatod a SpecialCells tulajdonsággal:
set latszo=Intersect(Cells(1, 9).CurrentRegion, Cells(1, 9).CurrentRegion.Offset(1, 0).Columns(9)).SpecialCells(xlCellTypeVisible).EntireRowA 9. oszlop látszó celláinak sorait tartalmazza, az első sor (fejléc nélkül).
Ezt ezután egy lépésben törölheted, vagy másolhatod.
latszo.Delete
vagy
latszo.Copy Destination:=celrangeÜdv.
-
Fferi50
Topikgazda
válasz
Lokids
#40726
üzenetére
Szia!
Két apróság, az egyik biztosan fontos, mégpedig ez:
A honapok név tartománya A1 kezdetű legyen, ne pedig B1
A másik, az Adatok névnél az eltolás 13 értéke helyett 22 legyen (mivel az adatok vége elvileg a V oszlopban lesz (a hónapokat a V oszlopig terjesztetted ki). Ha most nem is okoz problémát, később biztosan.Üdv.
Új hozzászólás Aktív témák
- Futás, futópályák
- Huawei Watch GT 6 és GT 6 Pro duplateszt
- iPhone Ultra néven jöhet az Apple első foldja, nem lesz olcsó mulatság
- Fejhallgató erősítő és DAC topik
- VGA kibeszélő offtopik
- Xiaomi 17 Ultra - jó az optikája
- Luck Dragon: Asszociációs játék. :)
- Samsung Galaxy Watch7 - kötelező kör
- Xbox Series X|S
- Gitáros topic
- További aktív témák...
- ÁRGARANCIA!Épített KomPhone i9 14900KF 32/64GB DDR5 RAM RX 9070 XT 16GB GAMER PC termékbeszámítással
- iPhone SE 2020 128GB Black -1 ÉV GARANCIA - Kártyafüggetlen, MS4594
- iPhone 16 Pro Max 256GB 92% (1év Garancia)- AKCIÓ
- Telefon felvásárlás!! iPhone 11/iPhone 11 Pro/iPhone 11 Pro Max
- Számlás!Windows 10 Pro 11 Pro,Windows 10 Home 11 Home, Office 2016,2019,2021 ,Vírusirtok,Mac
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest



