- One mobilszolgáltatások
- Milyen GPS-t vegyek?
- Fotók, videók mobillal
- Apple Watch
- Bemutatkozott a Poco X7 és X7 Pro
- Csak semmi szimmetria: flegma dizájnnal készül a Nothing Phone (3)
- Google Pixel 9a - a lapos munka
- Apple iPhone 16 Pro - rutinvizsga
- Okosóra és okoskiegészítő topik
- CMF Buds Pro 2 - feltekerheted a hangerőt
-
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
-
Delila_1
veterán
válasz
Fire/SOUL/CD #10837 üzenetére
A csúf leírás m.zmrzlina kérdésére volt a válasz, nem tetszett neki a dupla With abban a makróban, amit letöltött valahonnan.
Szerintem nincs igazad az F1-gyes mondatoddal.
Más volt a cél, ő a címsort színezi, ha aktív a szűrő, Te üzenetet küldesz. -
Delila_1
veterán
Folytatva az előbb elkezdettet, az eredeti makró
Function FilterOn(myCell As Range) As Boolean
On Error Resume Next
With myCell.Parent.AutoFilter
With .Filters(myCell.Column - .Range.Column + 1)
If .On Then FilterOn = True
End With
End With
End FunctionAz első With kezdősorában szerepel a myCell.Parent.AutoFilter, vagyis a megadott cella szülőjének (a munkalapnak) az autofiltere.
A With és End With közötti ponttal kezdődő hivatkozásokat úgy kell értelni, mint a kezdősorában lévő adat folytatása.A második With első sora [.Filters(myCell.Column - .Range.Column + 1)] a fenti autofilterre vonatkozik, az If-es sor pedig erre a filterre.
Mindent kiírva ez a belső sor így nézne ki:If myCell.Parent.AutoFilter.Filters(myCell.Column - myCell.Parent.AutoFilter.Range.Column + 1).On Then FilterOn = True
és akkor a teljes makró ennyi lenne:
Function FilterOn(myCell As Range) As Boolean
Application.Volatile
On Error Resume Next
If myCell.Parent.AutoFilter.Filters(myCell.Column - myCell.Parent.AutoFilter.Range.Column + 1).On Then FilterOn = True
End FunctionEzzel csak az a baj, hogy nehezen követhető.
-
Delila_1
veterán
válasz
m.zmrzlina #10830 üzenetére
A programozók fő erénye a lustaság. Ha nem muszáj, nem írnak le semmit kétszer.
Aki ezt a rövid makrót írta, nagyon erényes. Szép.letisztult makrót írt.Az első With kezdősorában szerepel a myCell.Parent.AutoFilter, vagyis a megadott cella szülőjének (a munkalapnak) az autofiltere.
A With és End With közötti ponttal kezdődő hivatkozásokat úgy kell értelni, mint a kezdősorban lévő adat folytatása.Szerk.: Ezt összezavartam, újra leírom.
-
Delila_1
veterán
válasz
m.zmrzlina #10831 üzenetére
Igen, a Volatile a megoldás.
-
Delila_1
veterán
válasz
m.zmrzlina #10827 üzenetére
Igazad van, próba nélkül írtam be.
Olvastam valahol arról, mivel lehet rávenni a saját függvényeket a frissülésre, de most nem találom.
-
Delila_1
veterán
válasz
m.zmrzlina #10824 üzenetére
Ez nagyon jó.
Azonnal frissül, ha a laphoz ezt az üres makrót hozzárendeled:
Private Sub Worksheet_Change(ByVal Target As Range)
End Submert figyeli a lapon történt változásokat, és csak frissít.
-
Delila_1
veterán
válasz
Pityke78 #10813 üzenetére
Játszottam a szűrővel.
Hagyd üresen az első és második sort, és adj ezeknek a celláknak szöveg formátumot. A lenti makró (gombhoz rendelheted) ezekbe a sorokba kiírja a szűrés feltételeit zöld háttérrel.Sub Crit_1_2_sorba() '1:2 sorba írja a feltételeket zöld háttérrel
Dim AF As AutoFilter, F As Filter, sz$, oszlop%
Set AF = ActiveSheet.AutoFilter
For oszlop% = 1 To AF.Filters.Count
Range(Cells(1, oszlop%), Cells(2, oszlop%)) = ""
Range(Cells(1, oszlop%), Cells(2, oszlop%)).Interior.ColorIndex = -4142
Set F = AF.Filters(oszlop%)
If F.On Then
Cells(1, oszlop%) = F.Criteria1
Cells(1, oszlop%).Interior.ColorIndex = 4
If F.Operator > 0 Then
If F.Operator = xlAnd Then sz$ = "és " Else sz$ = "vagy "
Cells(2, oszlop%) = sz$ & F.Criteria2
Cells(2, oszlop%).Interior.ColorIndex = 4
End If
End If
Next
End Sub -
Delila_1
veterán
válasz
föccer #10821 üzenetére
A címsorba a feltétel ilyen lenne:
Sub Krit_A_Cimsorba()
Dim AF As AutoFilter, F As Filter, i As Long
Sheets("Munka1").Select
Set AF = ActiveSheet.AutoFilter
For i = 1 To AF.Filters.Count
Set F = AF.Filters(i)
If F.On Then
Cells(1, i).NumberFormat = "@"
Cells(1, i).Value = Right(F.Criteria1, Len(F.Criteria1) - 1)
End If
Next
End Sub -
Delila_1
veterán
válasz
Pityke78 #10813 üzenetére
Tegyél ki ehhez a makróhoz egy gombot, a futtatás után a szűrt oszlopok fejléce (1. sor) piros hátterű lesz.
Sub AutoSzuro()
Dim AF As AutoFilter, F As Filter, oszlop As Long
Set AF = ActiveSheet.AutoFilter
For oszlop = 1 To AF.Filters.Count
Set F = AF.Filters(oszlop)
If F.On Then
Cells(1, oszlop).Interior.ColorIndex = 3
Else
Cells(1, oszlop).Interior.ColorIndex = -4142
End If
Next
End SubMajd jön ide valaki, aki megmondja, hogy lehet a szűrés változásához hozzárendelni, hogy ne kelljen külön gombot nyomogatni.
-
Delila_1
veterán
válasz
Honkydoo #10811 üzenetére
A 10782-ben hányadost kerestettél, amit megváltoztattál a 10789-ben. Az újabb válaszra most mindent átírsz.
Ha szívességet kérsz valakitől – igénybe véve az idejét és esetleges tudását –, vedd a fáradságot, hogy eleve azt kérdezed, amire szükséged van.
Nézd át jól a makrót, biztosan át tudod írni arra a feladatra, amit pillanatnyilag végre szeretnél hajtatni vele. Miért fordítanék több időt a válaszokra, mikor te, akinek szüksége van a válaszra, nem foglalkozol annyit a dologgal, hogy pontosan leírhatnád a kérdést?!
-
Delila_1
veterán
válasz
Honkydoo #10789 üzenetére
Makróval oldottam meg, mert anélkül nagyon hosszú képletek kellenének.
Sub kulonbs()
Dim sor%, sor_1%, usor%
Columns("G:G").ClearContents
sor = 5: usor = Range("F50000").End(xlUp).Row
Do While Cells(sor, 2) <> ""
For sor_1 = 4 To usor
If Cells(sor, 2) = Cells(sor_1, 6) Then _
Cells(sor_1, 7) = Cells(sor_1, 7) & " " & Cells(sor, 1)
Next
sor = sor + 1
Loop
End SubA fenti kódból a Columns("G:G").ClearContents a kigyűjtés előtt törli a teljes G oszlop tartalmát. Ha ez bajt okozna a lapodon, töröld a sort a makróból, és indítás előtt töröld a csatold kép szerinti G4:G8 tartományt.
-
Delila_1
veterán
válasz
repvez #10780 üzenetére
Az A2:A35 szabálya ez legyen: =DARABTELI(B2:H2;"lox")=0
A B2:H35 tartománynál töröld a
=VAGY(B2="lox";B2="pihenő";B2="szabi";B2="véradó";B2="eü";B2>0)
szabályt, helyette egyenként vidd be a listád adatait így:
=b2="lox" , adj neki színt, jön a következő: =B2="pihenő" , ennek is adsz egy másik színt, és így tovább. Végül az óraszám színezéséhez a képlet: =SZÁM(B2)A lox-hoz nem jól írtad be a képletet a feltételes formázáshoz, vagy nem a B2:H35 tartomány volt kijelölve a képlet beírásakor, azért nem lett jó.
-
Delila_1
veterán
válasz
repvez #10778 üzenetére
Célszerűbb a sok nap miatt abban a formában megadni az adatokat, ahogy AE ajánlotta.
A címsor és címoszlop bevitele után kijelölöd az A2:A35 tartományt, és a feltételes formázásnál új szabályként (A formázandó cellák kijelölése képlettel almenüben) ezt adod meg: =I2=0, és adsz hozzá egy formátumot. Én zöld kitöltést adtam azért, mert az a nap még szabad, be kell osztani oda valaki(ke)t. A képlet azt jelenti, hogy ha az I oszlopban nincs még összesített óraszám, akkor jelölje a napot a megadott formátummal.
Most kijelölöd a B2:H35 tartományt. Adatok - Érvényesítés. A Megengedve legördülőből kiválasztod a Listát, a Forráshoz pedig beírod sorban az 5 kiválasztható elemet (lox és társai), közéjük tegyél pontosvesszőt. Nem írtam szándékosan a 6. elemet, a 8-at, mert előfordulhat, hogy valaki eltérő óraszámot dolgozik. Éppen ezért, hogy a felsoroltakon kívül mást is be lehessen vinni a tartományba, a Hibajelzés fülön vedd ki a pipát az "Érvénytelen adat beírásakor hibaüzenet jelenjen meg" szöveg előtti jelölő négyzetből. OK után minden cellában benne lesz a legördülő.
Az I2 cellába írd be: =SZUM(B2:H2)+DARABTELI(B2:H2;"lox")*24, és másold le a 35. sorig.
A B36 képlete: =SZUM(B2:B35)+DARABTELI(B2:B35;"lox")*24, ezt másold jobbra a H36 celláig.
Az I36-ba az =SZUM(I2:I35) képlet kerül.
Most jön a színezés. Újra kijelölöd a B2:H35 tartományt. A feltételes formázásnál "Új szabály", ismét "A formázandó cellák kijelölése képlettel", az "Értékek formázása, ha ez a képlet igaz:" felirat alá beírod: =VAGY(B2="lox";B3="lox";B4="lox"), és adsz neki formátumként egy hátteret, ami nálam piros.
Újabb szabály ugyanerre a területre, a képlete:
=VAGY(B2="lox";B2="pihenő";B2="szabi";B2="véradó";B2="eü";B2>0)
Ez is kap egy háttérszínt, nálam sárga.Ezzel kész is a mű.
-
Delila_1
veterán
válasz
repvez #10771 üzenetére
Fukar kezekkel méred az információt, így nem várhatsz segítséget.
Gondolom, a B3:AF10 tartományba szeretnéd bevinni legördülő segítségével a lox, pihenő, stb. értékeket, de azt nem közölted, hogy a 8 órán kívül melyiket hány órával kell elszámolni, melyik után hány nap szünet következik.
-
Delila_1
veterán
válasz
q13579 #10766 üzenetére
Lehet, hogy az üresnek látszó cellák nem üresek, valami képlet, vagy nem látszó karakter (pl. szóköz) van bennük.
Lekérdezheted az =hossz(cellahivatkozás) függvénnyel a hosszukat, akkor kiderül a disznóság. Bár képlet esetén nulla értéket ad ez a függvény, de a másik esetben a hossz értéke jelzi a nem látható karaktereket.Szerk.: közben kipróbáltam, hogy a két cella közül az egyikbe szóközt teszek, akkor is jó az eredmény (csak a számot tartalmazó cella értékét hozza összegként).
Valószínű, hogy bár számoknak látszanak a tartalmak, szöveg formában vannak felvíve.
Megoldás: egy üres cellába beírsz egy 1-est, Ctrl+c-vel másolod. Kijelölöd a két oszlopot, amik a látszólagos számokat tartalmazzák, jobb klikk, Irányított beillesztés, Szorzás.
Ezzel az oszlopok tartalma számmá változik, el tudod végezni az összegzést. A beírt 1-est törölheted. -
Delila_1
veterán
A működéshez tedd meg az alábbi lépéseket:
Office gomb, Az Excel beállításai, Bővítmények. Balra lent a Kezelések közül Excel bővítmények, Ugrás, a kapott felsorolás első két bővítménye elé tegyél pipát, OK.Az első (gyűjtő) lapodhoz rendelve marad a
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then karbantart
End Submakró, ami figyeli az A1 cella változását.A modulba kerül a másik makró,
Sub karbantart()
Dim sorGy%, lap%, sorLap%, usorLap%
sorGy% = 2
Sheets(1).Select
Rows("2:10000").ClearContents
For lap% = 2 To Worksheets.Count
Sheets(lap%).Select
usorLap% = Sheets(lap%).Range("A50000").End(xlUp).Row
For sorLap% = 2 To usorLap%
If Cells(sorLap%, 5) + Cells(sorLap%, 6) <= Sheets(1).Cells(1) Then
Range(Cells(sorLap%, 1), Cells(sorLap%, 6)).Copy Sheets(1).Cells(sorGy%, 1)
sorGy% = sorGy% + 1
End If
Next
Next
Sheets(1).Select
End Subami a kigyűjtést végzi. A számítás alapja, hogy az egyes lapokon az utolsó karbantartás idejéhez hozzáadja a következő karbantartáshoz szükséges napokat (E+F), és ha ez a nap kisebb, vagy egyenlő, mint a gyűjtő lap A1 cellájába írt dátum, akkor bemásolja az egyes alkatrészek adatait a lapokról az A:F oszlopokból.
-
Delila_1
veterán
válasz
Fire/SOUL/CD #10737 üzenetére
Csak éppen nagy munkában vagyok, ez meg úgy működik, ahogy kell...
Ideje volt már, hogy visszatérj a hosszas távolléted után.
-
Delila_1
veterán
válasz
Fire/SOUL/CD #10735 üzenetére
Nem változtatok, így jó, ahogy van (legalábbis nekem
).
Ha bármelyik feltétel nem igaz az ÉS-sel összekötöttek közül, vagyis bármelyik fkeres megtalálja a keresett értéket, akkor a HA függvény hamis ága íródik ki.
-
Delila_1
veterán
válasz
Fire/SOUL/CD #10733 üzenetére
Ha IGAZ, hogy HIBÁS az első fekeres, ÉS IGAZ, hogy HIBÁS a 2. fekeres, és IGAZ, hogy HIBÁS a 3. fkeres, akkor ad NOK kimenetet.
-
Delila_1
veterán
válasz
Fire/SOUL/CD #10731 üzenetére
Az én képletem azt vizsgálja, hogy ha mindhárom oszlopban hibára fut az fkeres, akkor NOK eredményt ad, egyébként OK a kimenet.
Ezt egyszerűbbnek tartom.
-
Delila_1
veterán
válasz
Fire/SOUL/CD #10729 üzenetére
Ha valamelyik tartományban szerepel, akkor OK.
-
Delila_1
veterán
válasz
DjSteve85 #10658 üzenetére
Egy apró kiegészítés cousin333 válaszához:
Amikor nem talál a helységnévhez megfelelő irányítószámot az FKERES függvény, akkor nulla értéket ad. Az
=HA(FKERES(A1;Fülneve!A:B;2;0)="";"Hiányzik az irányítószám";FKERES(A1;Fülneve!A:B;2;0))
függvény ezt kiküszöböli.
Az FKERES függvény tartományát ki lehet terjeszteni a teljes A:B oszlopra, nem szükséges a kezdő- és befejező sort beírni.
-
Delila_1
veterán
Az két makró ezt csinálja:
Ha az első lap A1 cellájába beírod a dátumot, automatikusan indul a kigyűjtés erre a lapra, A2-től kezdődően. A beírás indítja az első makrót, ami nekilódítja a másikat.Az utóbbi végigszalad a másodiktól az utolsó lapig. Minden lapon végignézi az A oszlopban tárolt dátumokat soronként (amik feltehetően az utolsó karbantartás dátumai).
Ahol az első lap A1-es dátumánál 90 nappal, vagy annál régebbi dátumot talál, a sor első 15 oszlopát (A:O oszlopok) átmásolja az első lapra egymás alá.Ahhoz, hogy automatikusan induljon a kért dátum beírásakor, 2 makró szükséges.
Az elsőt a gyűjtő (első) laphoz rendeld, a másodikat modulba.Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then karbantart
End Sub
.
Sub karbantart()
Dim sorGy%, lap%, sorLap%, usorLap%
sorGy% = 2
Rows("2:10000").ClearContents
For lap% = 2 To Worksheets.Count
Sheets(lap%).Select
usorLap% = Sheets(lap%).Range("A65000").End(xlUp).Row
For sorLap% = 2 To usorLap%
If Sheets(1).Cells(1) - Sheets(lap%).Cells(sorLap%, 1) >= 90 Then
Range(Cells(sorLap%, 1), Cells(sorLap%, 15)).Copy Sheets(1).Cells(sorGy%, 1)
sorGy% = sorGy% + 1
End If
Next
Next
Sheets(1).Select
End SubHa több oszlopod van, mint 15, a
Range(Cells(sorLap%, 1), Cells(sorLap%, 15)).Copy Sheets(1).Cells(sorGy%, 1)
sorban írd át a 15-öt. -
Delila_1
veterán
válasz
m.zmrzlina #10602 üzenetére
Neked is!
-
Delila_1
veterán
válasz
m.zmrzlina #10600 üzenetére
Nem pontos a meghatározásod.
"Erre a te színlekérdezős makród is azt válaszolja (akármilyen színe van a háttérnek) hogy átlátszó." Arra ír átlátszót, ami a feltételes formázás előtt átlátszó.Biztosan le lehet külön-külön kérdezni RGB szerint, mármint az alapszínt, de már nagyon péntek este van ahhoz.
-
Delila_1
veterán
válasz
m.zmrzlina #10598 üzenetére
Ja, hogy előállítottál egy színátmenetes formázást, és abból szeretnéd megtudni egy közbenső szín paramétereit?
-
Delila_1
veterán
válasz
m.zmrzlina #10596 üzenetére
Nem az üreset, hanem a feltételes formázás nélkülit. Ha alapállásban sárga a háttér, annak a kódját adja meg.
Állíts egy cellát alapban arra a színre, amit majd a feltétellel akarsz létrehozni, és ezt kérdezd le.Nekem a personal.xls-ben van egy kis makróm erre a célra, mert időnként le akarok kérdezni 1-1 színt. Kitettem hozzá egy ikont.
Sub Szín_lekérdezés()
If Selection.Font.ColorIndex = -4105 Then
MsgBox "A karakter színkódja: " & " fekete (automatikus, -4105)"
Else
MsgBox "A karakter színkódja: " & Selection.Font.ColorIndex & " "
End If
If Selection.Interior.ColorIndex = xlNone Then '-4142
MsgBox "A cella hátterének színkódja: " & " átlátszó, -4142"
Else
MsgBox "A cella hátterének színkódja: " & Selection.Interior.ColorIndex & " "
End If
End Sub -
Delila_1
veterán
válasz
m.zmrzlina #10591 üzenetére
A formátumfestő ecsettel simán másolható a formátum.
-
Delila_1
veterán
Kikeresed a tartomány max. és min. értékeit, ezek különbségét osztod annyival, ahány árnyalatban akarod megjeleníteni a karaktereket.
A csatolt képen a B1 a min., C1 a max., D1 az osztás, és az E1:E6 tartomány adja a határértékeket a feltételes formázáshoz. Kerekítheted is a számokat.
A formázást meg úgy tedd, ahogy m.zmrzlina ajánlotta.Szerk.: semmi szükség a HA függvényre, elég az =$B$1+$D$1*SOR()-1 az E2 cellától, az első érték (E1) a min. érték legyen.
-
Delila_1
veterán
Önmagára mutatást nem írhatsz, de a számok melletti oszlopba beteheted a következő képletet a B2 cellától kezdve:
=HA(A1>A2;"ň";HA(A2=A1;"ů";"ń"))
A képletet tartalmazó oszlop legyen Wingdings karakterű.
Arra az esetre, ha nem sikerülne valamiért a képlet beillesztése, a C:E oszlopba beírtam a karakterek kódját, de választhatsz helyettük bármi mást.
-
Delila_1
veterán
válasz
bnorci71 #10520 üzenetére
Írtam hozzá egy makrót, amit az excel1.xls füzetedhez másolj be.
Alt+F11-re bejön a VB szerkesztő. Bal oldalon kiválasztod az excel1-et, Insert menü, Module.
Jobb oldalon kapsz egy üres lapot, oda másold.Ha nem excel1 és excel2 a füzeteid neve, írd át a saját neveidre. Ugyanúgy a Munka1 lap nevét is, ha nálad más a lapok neve. Mindegyik füzet neve egyszer szerepel a makróban, a hozzá tartozó Munka1 lappal egy sorban.
A makró futtatásakor legyen mindkét füzeted nyitva.Sub kieg()
Dim sor%, usor%, lel, sor_lel%, WS As Object
Workbooks("excel1.xls").Sheets("Munka1").Activate
usor% = Range("C60000").End(xlUp).Row
Set WS = Workbooks("excel2.xls").Sheets("Munka1")
For sor% = 2 To usor%
With WS.Columns("I:I")
Set lel = .Find(Cells(sor%, "E"), LookIn:=xlValues)
sor_lel% = lel.Row
If Not lel Is Nothing And WS.Cells(sor_lel%, "D") > "" Then
Cells(sor%, "C") = Cells(sor%, "C") & ". " & WS.Cells(sor_lel%, "D")
End If
End With
Next
End Sub -
Delila_1
veterán
válasz
m.zmrzlina #10516 üzenetére
Azonos területről azonos területre másoltam az adatokat a két makróval, közben nem változtattam semmi mást.
Nem is számít, hiszen Nálad jól működik, nekem meg nem kell, és ha kellene, az átírt makróval nálam is jól megy.
-
Delila_1
veterán
válasz
m.zmrzlina #10514 üzenetére
Ez jó kérdés!
-
Delila_1
veterán
válasz
m.zmrzlina #10512 üzenetére
Igen, ott 2-t kellett volna levonni.
Valamiért ez mégis tudja a 2,9-et. -
Delila_1
veterán
válasz
vgergo #10507 üzenetére
Úgy értettem a dolgot, hogy a hosszú számok pl az A oszlopban vannak.
A csv fájllá alakítás előtt a makródban meghatározod az alsó sort:
as=range("a1000").end(xlup) ,
a következő sor range("a1:a" & as)=range("a1:a" & as)&""A behíváshoz rögzítesz egy makrót, ami tudja a számkénti megjelenítést, ehhez teszel ki nekik 1-1 gombot az eszköztárra.
-
Delila_1
veterán
válasz
m.zmrzlina #10501 üzenetére
Nálam egész számokat adott a 2.9, vagy a 0.2 helyett.
Nem tudom már, mi volt a makróink között a különbség, ide rajzolom az enyémet.
A value legtöbb helyen alapérték, nem kell kiírni, anélkül is 50 cm a változó meghatározása.Sub kiemel()
Dim cella As Range, kiemeles As String
For Each cella In Selection.Cells
kiemeles = WorksheetFunction.Substitute(Mid(cella, WorksheetFunction.Search("(", cella) + 1, _
WorksheetFunction.Search("%", cella) - WorksheetFunction.Search("(", cella) - 1), ".", ",")
Worksheets("Munka2").Cells(cella.Row - 10, cella.Column) = kiemeles * 1
Next
End Sub -
Delila_1
veterán
válasz
bnorci71 #10498 üzenetére
Az adatok az A1-ben kezdődnek mindkét fájlban, vagy máshol, azonos sorokban, vagy nem?
Az excel1 első sora azonos az excel2 első sorával, vagy az excel2 első sora már tartalmazza a plusz adatokat? Az excel2-ben az emelet és ajtó a címmel azonos cellában szerepel, vagy külön? Ezek az adatok fontosak.Kicsit bőkezűbben bánhatnál a vesszőkkel, háromszor elolvastam az írásodat, mire úgy-ahogy megértettem, mi a lényeg. Talán csatolhatnál 2 képet a két fájl elrendezéséről.
Az sem mindegy, hogy az Excelnek melyik verzióját használod, írd meg.
-
Delila_1
veterán
válasz
m.zmrzlina #10485 üzenetére
Kell a ciklus? Ha a teljes tartományt akarod másolni feltételek nélkül, akkor elég ez is a Munka2 lapon állva:
range("a1:d100").copy sheets("Munka3").range("a10")
-
Delila_1
veterán
válasz
m.zmrzlina #10480 üzenetére
Ez jó hír.
-
Delila_1
veterán
válasz
m.zmrzlina #10476 üzenetére
A ws.Range("B1").End(xlDown).Row annak a műveletnek a VB-s leírása, mikor a B1 cellán állva Ctrl+le nyilat nyomsz. Ha üres a B oszlop, vagy csak a B1-ben van érték, a fókuszod ilyenkor az alsó, 1048576. sorodra áll.
Mivel az usor% változó értékét
usor% = ws.Range("B1").End(xlDown).Row + 1 -ként adtuk meg, ez a 1048577. sort adja meg a változónak, ami eggyel több, mint amit az Excel lelke kibír. Ezért jelez joggal túlcsordulást. -
Delila_1
veterán
válasz
gigi183 #10474 üzenetére
Az Nts oszloptól balra lévő hármat fixen írod be, vagy valami képlet adja az értéküket?
Ha fixen, az alábbi egyszerű kis makró megoldja a lenullázást.A makrót ahhoz a laphoz kell rendelned, amelyiken ezt a műveletet végre akarod hajtani. Lapfülön jobb klikk, Kód megjelenítése. Bejutottál a VB szerkesztőbe, a jobb oldalon kapott üres lapra kell bemásolnod.
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Column = 5 And Target = 0 Then
Dim sor%, oszlop%
sor% = Target.Row: oszlop% = Target.Column
Range(Cells(sor, oszlop - 2), Cells(sor, oszlop - 1)) = ""
End If
Application.EnableEvents = True
End SubA csatolt képen nem látszik, milyen betűjelű oszlopban van az Nts. A makróban úgy vettem, hogy az E (ötödik) oszlop tartalmazza. Bemásolás után az If Target.Column = 5 And Target = 0 Then sorban írd át az 5-öt a megfelelő értékre.
A füzetedet másként, makróbarátként kell mentened, a kiterjesztése meg fog változni xlsm-re. Az Excelben is módosítanod kell a biztonsági beállításokat, ha eddig nem volt makrót tartalmazó füzeted.
-
Delila_1
veterán
válasz
m.zmrzlina #10476 üzenetére
Ha a helyfoglalásnál % jelet teszel a változó után, akkor integer (egész) típusú értékeket vár értékként. Ilyenkor a Dim változó után nem kell (nem is engedi) az As Integer meghatározást.
A dim v$ string (szöveges)-, a v# double (lebegőpontos)-, a v! single (lebegőpontos, más tartománnyal)-, a v& long (egész, más tartománnyal, mint az integer)-, a v@ currency (fixpontos) értéket fogad. A napokban jöttem rá véletlenül, hogy elég a dimenzionálásnál megadni a %, $, stb. jeleket, a makró további részében már el lehet hagyni, de szerintem jobb később is kiírni a könnyebb követhetőség érdekében.
A túlcsordulást megelőzheted az
usor%=range("H1048576").end(xlup).row+1 formával.Ne hidd, hogy csak Te szenvedsz a makrók megírása közben.
-
Delila_1
veterán
válasz
gigi183 #10471 üzenetére
Kijelölöd a tartományodat C3-tól jobbra, és le, ameddig kell.
Feltételes formázás, Új szabály, A formázandó cellák kijelölése képlettel.
Az "Értékek formázása, ha ez a képlet igaz" rovatba ezt írod:
=DARABTELI(B:B;C3)=0, és megadod a zöld karakterszínt.
Újabb formázás, a 2. képlet =DARABTELI(D:D;C3)=0, itt az áthúzott szöveget adod meg.A feltételes formázás képletében az első egyenlőségjelet úgy kell érteni, mintha egy HA feltétel lenne, vagyis HA a darabteli függvény az előző oszlopban nem találja meg az aktuális oszlopbeli nevet, akkor az aktuális név legyen zöld színnel írva (C oszlopban kezdődött a formázás, ehhez képest a B az előző oszlop).
Javaslom, hogy háttérnek pasztell színeket adj, mert a mostani a vad piros, és lila háttéren nem látszik majd a zöld szöveg.
-
Delila_1
veterán
válasz
Zomb€€ #10458 üzenetére
Nem lenne szabad elszállnia. Be van kapcsolva az Excelben az Analysis ToolPak - VBA?
Próbáld így:set terület=range("a1:c1000")
workbooks("ebből.xls").sheets("erről_a_lapról").terület.copy
workbooks("ebbe.xls").sheets("erre_a_lapra").select
usor=range("a1").end(xldown).row+1
range("a" & usor).select
selection.paste -
-
Delila_1
veterán
Hiperhivatkozást szúrj be a cellába.
Beszúrás - hiperhivatkozás - A dokumentum adott pontja. A megjelenő ablakban kiválaszthatod az ugrás helyét, valamint azt, hogy mi legyen a megjelenő szöveg az ugrást előidéző cellában.
A cellán jobb klikkre is előjön a hiperhivatkozás menüpont. -
Delila_1
veterán
válasz
m.zmrzlina #10442 üzenetére
OK. Várom a beszámolót.
-
Delila_1
veterán
válasz
m.zmrzlina #10438 üzenetére
Lehet, hogy hibával léptél ki valamelyik makróból, ezért nem érvényesült az
Application.EnableEvents = True sor, letiltva maradt a makrók futtatása.Ctrl+g-vel bejön az Immediate ablak, oda írd be a fenti sort, és enterezd le.
-
-
Delila_1
veterán
válasz
m.zmrzlina #10421 üzenetére
Private Sub Worksheet_Change(ByVal Target As Range)
'A B.xls füzetből indulunk. A munkalaphoz rendelt eseménykezelő
'csak a saját munkalapján tud dolgozni, ezért innen indítunk
'olyan makrókat, amik nincsenek munkalaphoz rendelve.
Application.EnableEvents = False 'Eseménykezelés letiltása
Dim utvonal, Érték, sor%
sor% = Target.Row 'Adatbevitel sora
utvonal = Cells(sor%, 1) 'Az A oszlopba bevitt érték
If Target.Column = 1 Then 'Ha az A oszlopba vittél be adatot,
Darabteli utvonal, sor% 'meghívom a Darabteli makrót, átadva a 2 változót
End If
If Target.Column = 2 Then 'Ha a B oszlopba írsz értéket,
Érték = Cells(sor%, 2) 'az Érték változó vegye fel a bevitt értéket
Beír Érték 'Beír makró meghívása, az Érték változó átadásával
End If
Application.EnableEvents = True 'Eseménykezelés engedélyezése
End SubSub Darabteli(utvonal, sor%)
'Ez a makró az átvett "utvonal" változót keresi az A.xls Munka1 lapján, a B oszlopban,
'a COUNTIF (darabteli) függvénnyel. A B.xls A oszlopába történt beírás hívja meg a makrót.
Dim ws As Object, usor%
Set ws = Workbooks("A.xls").Sheets("Munka1") 'A ws változó tartalma innen kezdve az egyenlőség jobb oldala
usor% = ws.Range("B1").End(xlDown).Row + 1 'Első üres sor a ws.B oszlopában
If Application.WorksheetFunction.CountIf(ws.Range("B:B"), utvonal) = 0 Then
'Ha a B.xls A oszlopába beírt "utvonal" nem található az A.xls B oszlopában,
'vagyis a darabteli=0
ws.Cells(usor%, 2) = utvonal 'az utvonal változót írja be az ws.B oszlop első üres sorába
Else
'ha van "utvonal" a ws.B oszlopában, keresse meg, és a hozzá tartó H oszlopban lévő értéket
'írja be a kiinduló füzet (B.xls) B oszlopába.
'Itt nem kell a B.xls-re hivatkozni, mert nem léptünk át Select-tel az A.xls-be, csak leskelődtünk.
Cells(sor%, 2) = Application.WorksheetFunction.VLookup(utvonal, ws.Columns("B:H"), 7, 0)
End If
End SubSub Beír(Érték)
'A B.xls B oszlopába történt beírás hívja meg ezt a makrót.
'Akkor írsz értéket a B oszlopba, ha az fkeres nem talált A oszlopbeli útvonalat.
Dim ws As Object, usor%
Set ws = Workbooks("A.xls").Sheets("Munka1") 'Mint fent
usor% = ws.Range("H1").End(xlDown).Row + 1 'Mint fent
ws.Cells(usor%, 8) = Érték 'A ws.H oszlop első üres sorába beírja az értéket
End SubAz eseménykezelés letiltása azért kell a laphoz rendelt makróba, mert a munkalapon történt minden változásra beindul. Próbáld ki az Application.EnableEvents = False sor nélkül lépésenként futtatni, és meglátod, hányszor fut le feleslegesen. A lépésenként futtatáshoz tegyél a makró elejére egy stop-ot, majd írj a B.xls-be egy útvonalat, vagy km-t.
Az end sub előtt vissza kell állítani True értékkel! -
Delila_1
veterán
válasz
m.zmrzlina #10418 üzenetére
A júzer által használt füzetbe, a munkalaphoz:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim utvonal, Érték, sor%
utvonal = Cells(Target.Row, 1)
Érték = Cells(Target.Row, 2)
sor% = Target.Row
If Target.Column = 1 Then
Darabteli utvonal, sor%
End If
If Target.Column = 2 Then
Beír Érték
End If
Application.EnableEvents = True
End SubSzintén abba a füzetbe, modulba:
Sub Darabteli(utvonal, sor%)
Dim ws As Object
Dim usor%
Set ws = Workbooks("A.xls").Sheets("Munka1")
usor% = ws.Range("B1").End(xlDown).Row + 1
If Application.WorksheetFunction.CountIf(ws.Range("B:B"), utvonal) = 0 Then
ws.Cells(usor%, 2) = utvonal
Else
Cells(sor%, 2) = Application.WorksheetFunction.VLookup(utvonal, ws.Columns("B:H"), 7, 0)
End If
End SubSub Beír(Érték)
Dim ws As Object
Dim usor%
Set ws = Workbooks("A.xls").Sheets("Munka1")
usor% = ws.Range("H1").End(xlDown).Row + 1
ws.Cells(usor%, 8) = Érték
End Sub -
Delila_1
veterán
válasz
m.zmrzlina #10418 üzenetére
Csak este tudok foglalkozni vele, ha addig nem kapsz választ, megpróbálom.
-
Delila_1
veterán
válasz
m.zmrzlina #10413 üzenetére
-
Delila_1
veterán
válasz
m.zmrzlina #10413 üzenetére
Ez egy sima fkeres.
=FKERES(A1;[MásikFüzet.xls]MunkalapNeve!$A:$F;6;0)Az A oszlop pedig =[MásikFüzet.xls]MunkalapNeve!$A1
-
Delila_1
veterán
válasz
Fire/SOUL/CD #10408 üzenetére
Az eddigieket megoldja, a további cellákba be kell írni a képletet.
-
Delila_1
veterán
válasz
Geryson #10402 üzenetére
=ha(e3="Pénztár";"–";"")
Úgy van, a régi, adatokat tartalmazó cellákba ne másold be a képletet.
Legfeljebb egy kis makróval lehetne megoldani az oszlop felülírását.Sub E_oszlop()
Dim sor%, usor%
usor% = Range("E5000").End(xlUp).Row
For sor% = 3 To usor%
If Cells(sor%, 5) = "Pénztár" Then Cells(sor%, 6) = "–"
Next
End SubEz a kitöltetlen sorok 6. (F) oszlopába ír a Pénztár szót tartalmazó E oszlop mellé hosszú kötjelet, a nem Pénztár-t tartalmazók melletti F cellát békén hagyja. A mostani adatokat rendbe teszi, a további cellákba érdemes beírni a fenti képletet.
Új hozzászólás Aktív témák
Hirdetés
- Gyermek PC játékok
- Eladó steam/ubisoft/EA/stb. kulcsok Bank/Revolut/Wise (EUR, USD, crypto OK)
- Eladó Steam kulcsok kedvező áron!
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- Microsoft licencek KIVÉTELES ÁRON AZONNAL - UTALÁSSAL IS AUTOMATIKUS KÉZBESÍTÉS - Windows és Office
- Azonnali készpénzes AMD Ryzen 1xxx 2xxx 3xxx 5xxx processzor felvásárlás személyesen / csomagküldés
- ÁRGARANCIA!Épített KomPhone Ryzen 7 5700X3D 32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- Csere-Beszámítás! Xbox One X 1TB Játékkonzol Olvass! Model 1787
- Keresünk dokkolókat
- ÁRGARANCIA!Épített KomPhone i5 12400F 16/32/64GB RAM RX 7600 XT 16GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: PC Trade Systems Kft.
Város: Szeged