-
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
válasz
poffsoft
#33677
üzenetére
Szia!
"Azt látod, hogy a két sor nem ugyanaz? "
Nem is lehet ugyanaz. Gondolom, észrevetted, hogy 30 * 2,4 semmilyen kerekítéssel nem lesz 48.
Ha a 2,4-es szorzóval mész végig a kerekítéses módon, nem lesz az összeg 500, vagy az összeg nem jó, vagy a szorzó. Az Excel célérték keresése sem tudott hasonló feltételekkel eredményt produkálni.
Ezért gondoltam azt, hogy a mértani sorozat (hiszen ha minden tag az előző tag ugyanakkora szorosa, akkor erről van szó) elemeinek kerekítése adhatja a jó megoldást. Szerintem ezzel lehet a 2 feltételt egyidejűleg teljesíteni.
Aztán ez vagy megfelel a kérdező elvárásainak vagy nem.Üdv.
-
Fferi50
Topikgazda
válasz
muszty
#33674
üzenetére
Szia!
"Nyolc részre szeretném osztani a KÉK mezőbe beírt (jelen esetben 500) értéket úgy, hogy a számok 2,4-es szorzóval növekedjenek."
Egy mértani sorozat összegének és hányadosának ismeretéből szeretnéd előállítani a sorozat tagjait. Ehhez első körben az összegképletet felhasználva számolható ki az első tag, majd utána a többiek. A kerekítés miatt szükség van egy segédsorra, amiben a tagok száma szerepel.

A segédsor az I2-P2, a célösszeg a H1, a hányados az I1 cellában van.
A képlet az I3 cellában van, ezt kell végighúzni a P3 celláig.
A képen láthatod, hogy az ellenőrző összeg a kerekítések miatt 2-vel nagyobb, mint a cél, de azt gondolom, ezt már kezelni lehet.Üdv.
-
Fferi50
Topikgazda
válasz
csferke
#33673
üzenetére
Szia!
Két tömbképlettel megoldható szerintem:
=MAX(($C$2:$C$130=K2)*$C$2:$C$130)
=MIN(HA(($C$2:$C$130=K2)*$C$2:$C$130>0;($C$2:$C$130=K2)*$C$2:$C$130;""))A tömbképletet Ctrl+Shift + Enter billentyűkombóval kell bevinni, az Excel kapcsos zárójelben jeleníti meg.
Beírod így az első cellákba, majd lehúzod az oszlopon. A minimumnál az üres, illetve a feltételnek meg nem felelő hónapok miatt trükközni kellett kicsit, ezért hosszabb a képlet.Üdv.
-
Fferi50
Topikgazda
válasz
Fecogame
#33661
üzenetére
Szia!
A következő képletet használd:
ha az első sortól indul akkor: "wp_" & sor() & "_comments"
ha nem az elsőtől, akkor: "wp_" & sor()-(sor()-1) & "_comments"
Ezt húzd végig az oszlopon lefelé, amíg kell.
Majd kijelölöd az oszlopot. Másolás - irányított beillesztés - értéket Ezt teheted ugyanarra az oszlopra, vagy egy másikra is - a képletes oszlop ezután törölhető is.Üdv.
-
Fferi50
Topikgazda
válasz
bteebi
#33655
üzenetére
Szia!
" ha megosztom a munkafüzetet (sokan használnák), akkor nem működik az archiválás, mert - gondolom - az "Archivált" lapon nem tudja megtalálni az utolsó sort."
Közös használat esetén csak teljes sorokat vagy oszlopokat lehet törölni, cella blokkokat nem, ezért nem működik abban az esetben a makród.Range(Sheets("Adatok").Cells(Target.Row, 2), Sheets("Adatok").Cells(Target.Row, 6)).Delete Shift:=xlUpsor helyett:
Sheets("Adatok").Cells(Target.Row, 2).EntireRow.DeleteÜdv.
-
Fferi50
Topikgazda
válasz
róland
#33604
üzenetére
Szia!
Makró nélkül azért nem fog menni, mert egy cellában vagy képlet (és annak eredménye) van, vagy "konstans érték". Képlettel el lehet érni, hogy az adott hónap legyen látható és még a lista követelményeknek is megfeleljen, viszont amint megváltoztatod az értékét, abban a pillanatban "elvész" a képlet.
Én a Munkalap aktíválási eseményébe tenném be az egysoros kódot - ami 3 sor lesz
Private Sub Worksheet_Activate()
Range("A1").Value=Application.Choose(Month(Date), "Január","Február","Március","Április" stb.)
End SubAz adott cellára természetesen az érvényesítést is kiadhatod emellett - ahhoz nem kell nyúlni többet.
Üdv.
-
Fferi50
Topikgazda
válasz
ljungberg
#33577
üzenetére
Szia!
Gondolom, előlről szeretnéd feltölteni, ebben az esetben:
B1 képlete =jobb("00000000" & A1;8)
Ezt lehet végighúzni a B oszlopon.
Ha értékként szeretnéd megkapni, akkor kijelölöd a B oszlop nem üres celláit, másolás, ugyanarra a kijelölésre irányított beillesztés - értéket.
Ezután az A oszlopot törölheted is.Üdv.
-
Fferi50
Topikgazda
válasz
szöszi29
#33526
üzenetére
Szia!
Erre a feladatra jól lehet használni a speciális szűrést (Adatok - speciális).
Akkor kényelmes, ha a munkalap első kb. 9 sorát szűrőnek tartjuk fenn, és a tényleges adatok a 10. sorban kezdődnek. Azaz a mostani táblázatod elé be kell szúrni üres sorokat a feltételek számára.
A rögzitést pedig az így meglevő tábla első sora után (a munkalap 10. sora után) kell tenni.
A munkalap első sorába ugyanúgy a táblázatod első sora (a fejlécek) kerül.
Alatta levő sorokba pedig a feltételeket lehet írni a következők figyelembe vételével:
- az egy sorban levő feltételek ÉS feltételként viselkednek, vagyis mindnek teljesülnie kell
- a külön sorban levő feltételek VAGY feltételként viselkednek.A menüpont kiválasztása után megjelenő párbeszéd panelen kijelölöd a listatartománynak a táblázatod, szűrőtartománynak azokat a sorokat, amelyekbe írtál feltételt, marad a helyben szűrje megjelölve és OK után a feltételeknek megfelelő rekordok látszanak.
Ez a menüpont azért hasznos, mert egyszerre több feltételt is megadhatsz, sőt a feltételeknek megfelelő tételeket ki is másoltathatod egy másik helyre - itt arra kell figyelni,hogy csak az aktív lapra lehet másoltatni - ebben az esetben a más helyre másolja választógombot kell bejelölni.Javaslom, nézegesd meg a hozzá tartozó helpet.
Üdv.
-
Fferi50
Topikgazda
válasz
moya#no1
#33466
üzenetére
Szia!
Ha a cellaformátumot beállítod dátum-ra és "hosszúra" - jobb egérgomb és a mintából kiválasztod a napot is tartalmazót, majd a cella jobb alsó sarkát megfogod és továbbhúzod, akkor növelnie kellene a dátumot.
"úgy szeretném, hogy B + 2xC = D ( és ha a D 30fölött van azt az E mezőben kimutatja hogy mennyi a plussz és az F ben már az Ex200 al való összeget irja ki "
Egyszerűen csak le kell ezt képletezned:
D1 cella képlete =B1+C1*2
E1 cella képlete =HA(D1>30;D1-30;0)
F1 cella képlete =E1*200
A képletek az oszlopkban lehúzhatók.Ha jól értettem a feladatot.
Üdv.
PS. Szerintem sokat segítene a HELP/SÚGÓ böngészése.
-
Fferi50
Topikgazda
válasz
zolikaDB
#33447
üzenetére
Szia!
Neked az Fkeres függvényre van szükséged. Alapesetben ez a függvény egy külön cellába írja az értékeket, de kicsit ügyeskedve az adott szöveg mellé is be lehet írni.
Első lépés: Nevezd el a Szöveget és számokat tartalmazó oszlopokat (vagy csinálj belőle táblázatot).
Ezután képlet egy cellában:="Dinnye " & FKERES("Dinnye";táblaneve;2;0) & " Ft"Üdv.
-
Fferi50
Topikgazda
válasz
szőröscica
#33445
üzenetére
Szia!
Az egyik lehetőség, hogy hibakezelést építesz be: On Error Resume Next sorral.
Ha tudod, hogy csak ez lehet a hiba, akkor semmit nem is kell tenned, csak a programszekció végén visszaadni a hibakezelést a VBA-nak: On Error Goto 0
Ez azért szerintem kissé kockázatos, bár természetesen minden sor után meg lehet nézni, milyen hiba keletkezett (If ERR= x akkor mi legyen - a hibaszámokat megtalálod a helpben).Másik megoldás, hogy végigmész a tételeken:
Dim pvti as PivotItem
For Each pvti in ,PivotItems
If pvti.Name = "Level 2" Or pvti.Name = "Level 1" Or pvti.Name = "Level 3" Then pvti.Visible = True
NextNekem ez utóbbi jobban tetszik.
Üdv.
-
Fferi50
Topikgazda
válasz
Agostino
#33437
üzenetére
Szia!
Van olyan lehetőség is a makró futtatáskor, hogy lépésenként hajtsa végre (akkor láthatod, hogy melyik sornak mi a következménye.)
Egyébként a következő a probléma:
Ha az egész munkalapot másolod paraméter nélkül, akkor a másolat egy új munkafüzetbe kerül át és az lesz egyúttal az aktív munkafüzet is. Így az új munkafüzetet fogod menteni és bezárni, a régi megmarad.
Ha viszont egy munkalap tartományt másolsz csak, akkor az eredeti munkafüzeted aktív munkalapját fogja elmenteni az új néven és egyúttal a neve is megváltozik, továbbá csak ez az egy munkafüzet lesz és ezt fogja bezárni a makró - bármelyik if ágra is kerül.
A SaveAs metódus mindig megváltoztatja az elmentett fájl nevét!
Ha csak egy területet szeretnél menteni, akkor szerintem az a megoldás, hogy a kívánt területet átmásolod egy új munkalapra, majd ezt az új munkalapot helyezed át és mented el csv fájlként:InitFileName = ThisWorkbook.Path & "\Kimentett munkafüzet_" & Format(Date, "yyyymmdd")stb.
Set NewSheet = Sheets.Add
Sheets("Munka1").Range("A1:C5").Copy Destination:=NewSheet.Range("A1")
NewSheet.Move
Set wb = ActiveWorkbookÜdv.
-
Fferi50
Topikgazda
-
Fferi50
Topikgazda
válasz
Delila_1
#33423
üzenetére
Delila valamint Pollen
Sziasztok!
Szerintem most is egy jó "öreg" tömbképlettel való trükközés fog segíteni, ami az ötleted nyomán jutott eszembe:
=SZUM(($A:$A=D1)*1*B1)
A tömbképletet Ctrl+Shift+Enter billentyűkombóval kell bevinni (hátha valaki még nem ismerné...)
Itt a kritériumok a D oszlopban vannak.
A másik feltételt ugyanígy szorzás formájában adhatod hozzá! Pl:
=SZUM(($A:$A=D1)*1*($C:$C=X1)*1*B1)
Ugyanis az összehasonlításnál tudja az Excel (legalábbis az enyém), hogy nem egyforma az E-t tartalmazó cikkszám az a nélkülivel. (Bizonyára egy kis hiba csúszott a sumif függvénybe Redmondban v. valahol...)Üdv.
-
Fferi50
Topikgazda
-
Fferi50
Topikgazda
válasz
Polllen
#33386
üzenetére
Szia!
Mivel az E betű a számok tudományos ábrázolásának része, ezért sajnos ez a két "karaktersorozat" ugyanazt a számértéket jelenti.
Ezért praktikusan azt tudom javasolni, hogy az E karaktert hagyjátok ki a cikkszámokból
Célravezető lehet még az is, ha a betű a cikkszám elején van, ebben az esetben szintén nincs "keveredés".Üdv.
-
Fferi50
Topikgazda
Szia!
A Thisworkbook kódlapjára másold be:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Type = xlWorksheet Then Range("A1").Select
End Sub
Ez minden esetben, amikor az aktívvá válik egy munkalap, az A1 cellára viszi a kurzort.
Ne feledd, hogy makróbarát (xlsm) munkafüzetként kell menteni.Ha viszont csak egyszer szeretnéd áttenni a kurzort, akkor ezt a makrót futtasd le:
Sub allitja()
Dim sh As Worksheet, ii As Integer
Application.ScreenUpdating = False
ii = ActiveSheet.Index
For Each sh In Worksheets: sh.Activate: sh.Range("A1").Activate: Next
Sheets(ii).Activate
Application.ScreenUpdating = True
End SubVégigmegy a munkalapokon és mindenütt az A1 cellára állítja a kurzort.
Ezt beteheted egy munkalap kódlapjára, vagy egy általános modulra, majd a futtatás után törölheted a kódot tartalmazó munkalapot és mentheted makró nélkül.Üdv.
-
Fferi50
Topikgazda
válasz
Pulsar
#33373
üzenetére
Szia!
"Két random szám van osszebrakva vesszővel elválasztva." Akkor ez a cella sajnos szöveg eredetileg és az érték függvény ezért hagyja le a "tizedesvessző"-nek gondolt rész után levő értéket.
"Az jutott eszembe, hogy a ket kapott számot össze fűzöm és osztom 100-al is ezt az eremenyt kapom,"
Nem, nem ezt az eredményt fogod kapni - amennyiben ezt szeretnéd, akkor az első számhoz a második szám osztva százzal eredményét kell hozzáadni. Azaz =elsőszám+másodikszám/100
Ebben az esetben maga az Excel fogja kirakni a tizedesvesszőt és szám lesz a cella formátuma is.Üdv.
-
Fferi50
Topikgazda
válasz
tankraid
#33374
üzenetére
Szia!
A HOL.VAN függvényt nézd meg, az a keresett érték helyét adja vissza. Ezután használhatod a HA függvényeket egymásba ágyazva vagy a VÁLASZT függvényt, amelynél a HOL.VAN függvényben visszakapott érték alapján jön létre az eredmény.
Javaslom a függvényvarázsló(állapotsor fx ikon) és a súgó használatát hozzá.Üdv.
-
Fferi50
Topikgazda
válasz
Lasersailing
#33351
üzenetére
Szia!
Az előző hozzászólásom hibás volt, kimaradt belőle az interior egy helyen.

A feltételes formázás alapján színezett cellák tényleges formátumát a 2010-es Exceltől meg tudod nézni a DisplayFormat tulajdonsággal,
If ActiveSheet.Cells(sm, 44).DisplayFormat.Interior.Color=ActiveSheet.Cells(sm,44).FormatConditions(1).Interior.Color Thenmegvizsgálja, hogy a cella tényleges színe egyezik-e a feltételes formázásban megadott színnel.
A feltételeid azt vizsgálják, hogy milyen a cella feltételes formázása, ezért viselkedik úgy, ahogy írtad.
Üdv.
-
Fferi50
Topikgazda
válasz
Lasersailing
#33351
üzenetére
Szia!
A feltételes formázás alapján színezett cellák tényleges formátumát a 2010-es Exceltől meg tudod nézni a DisplayFormat tulajdonsággal,
If ActiveSheet.Cells(sm, 44).DisplayFormat.Color=ActiveSheet.Cells(sm,44).FormatConditions(1).Interior.Color Thenmegvizsgálja, hogy a cella tényleges színe egyezik-e a feltételes formázásban megadott színnel.
A feltételeid azt vizsgálják, hogy milyen a cella feltételes formázása, ezért viselkedik úgy, ahogy írtad.
Üdv.
-
Fferi50
Topikgazda
válasz
huliganboy
#33341
üzenetére
Szia!
Csak egy icipici megjegyzés:
Ahhoz, hogy meghatározd a tartományt, nem kell kijelölni (select), az is időt igényel. Anélkül is lehet használni (sőt az a kívánatos - a selecteket száműzni kell mindenhonnan, ahonnan csak lehet).
Tehát ez működik
x.select kihagyvaFor each x in x.cells
Üdv.
-
Fferi50
Topikgazda
válasz
huliganboy
#33338
üzenetére
Szia!
Megpróbálhatod ezt:
Sub nagybetus()
Dim ertekek, xx As Long, yy As Long
ertekek = Range("D3:AD20000").Value
For xx = 1 To UBound(ertekek)
For yy = 1 To UBound(ertekek, 2)
ertekek(xx, yy) = Application.Proper(ertekek(xx, yy))
Next
Next
Range("D3:AD20000").Value = ertekek
End SubHa esetleg memória problémát jelezne, akkor vedd kétfelé a területet.
Üdv.
-
Fferi50
Topikgazda
válasz
föccer
#33324
üzenetére
Szia!
Majdnem "hülyebiztos" csak akkor lesz, ha listát nyújtasz át tálcán, hogy ebből tessék választani. De ne legyenek kétségeid, hogy ilyenkor is lesz, aki "mellé trafál".
Nem lenne egyszerűbb egy kimutatást csinálni az adatokból, amit aztán mindenki kedve szerint szűrhet, szabhat-varrhat (mármint a megengedett keretek között)?
Én lehet, ebbe az irányba indulnék el.Másrészt szerintem képekkel sem megyünk túl sokra, igazán a mintatábla segít, mert abban lehet tesztelni is a javaslatokat.
Sajnos távolbalátási és gondolatolvasási képességekkel ezen a fórumon kevesen rendelkeznek
Amint látod, így csak találgatunk - mint az egyszeri rabbi a libáknál

Üdv.
-
Fferi50
Topikgazda
válasz
föccer
#33319
üzenetére
Szia!
Eddig azt hittem, hogy értem a feladatot, de most nagyon elbizonytalanodtam

"További beavatkozás nálkül kellene kinyernem az adatot. Bianco készül, beírom a megfelelő adatokat"Ha bianco táblát kapsz, akkor miért is nem lehet beletenni amit szeretnél, hogy működjön?
"Összegzés függvénnyel gyönyörű szépen tudom a szűrt elemekre elvégezni a megfelelő műveleteket, csak ezt a fránya gyártási mennyiséget nem tudom összehozni"
A többi adatot milyen paraméterekkel szűröd? Lehet, hogy egy kis minta alapján többet tudnánk segíteni és nem beszélnénk el egymás mellett...
Üdv.
-
Fferi50
Topikgazda
válasz
föccer
#33317
üzenetére
Szia!
Az ismétlődéseket egyszerű módon eltávolíthatod. Egy segédoszlopba kiteszed mintás táblázatod megfelelő oszlopát, majd Adatok - ismétlődések eltávolítása.
Ez a "kigyomlált" segédoszlop legyen a legördülő forráslistája.
(Vagy az adott oszlopra speciális szűrőt használsz, azzal másoltatod ki a segédoszlopba - csak az egyedi értékek bejelölve a párbeszédpanelen - szűrendő az oszlop, szűrőfeltételnek kijelölöd az oszlop fejlécét, hova másolja a segédoszlop első cellája. Fontos, hogy a szűrőt arról a munkalapról kell indítani, ahova az értékeket kapni szeretnéd.)Üdv.
-
Fferi50
Topikgazda
válasz
föccer
#33311
üzenetére
Szia!
Semmi akadálya annak, hogy a SZUMHATÖBB függvényben másik munkalapra(munkafüzetre) mutató hivatkozásokat használj.
Pl.SZUMHATÖBB(egyik munkalap A:A;egyik munkalap B:B; másik munkalap A2; egyik munkalap C:C;másik munkalap D2)
Ráadásul ezt a képletet akár az egyik, akár a másik, akár egy harmadik munkalapra is elhelyezheted.Üdv.
-
Fferi50
Topikgazda
válasz
Declare
#33301
üzenetére
Szia!
Egy picit kellett módosítani rajta:
Sub adogat()
Dim kezdrng As Range, vegrng As Range, ws1 As Worksheet, celrng As Range, elsocim As String, gewerkrng As Range, kezdocim As String ' a második ciklus kezdőcímének tárolására
Set ws1 = ActiveSheet
'megkeressük az elso S. Titel cellát:
Set vegrng = ws1.Columns("G").Find(what:="S. Titel", LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlNext, After:=Range("G1"))
elsocim = vegrng.Address 'megjegyezzük a címét, mert itt kell leállítani
Do While Not vegrng Is Nothing
'megkeressük a kezdo sort / Titel /
Set kezdrng = ws1.Columns("G").Find(what:="Titel", LookIn:=xlValues, lookat:=xlWhole, After:=vegrng, searchdirection:=xlPrevious)
If kezdrng.Row < vegrng.Row Then 'ha kisebb mint az S. Titel helye, akkor összeadjuk
vegrng.Offset(0, -1).Formula = "=Sum(" & kezdrng.Offset(2, -1).Address & ":" & vegrng.Offset(-1, -1).Address & ")"
vegrng.Offset(0, -1).NumberFormat = "#,##0.00 $"
vegrng.Offset(0, -1).HorizontalAlignment = xlRight
End If
'következo S. Titel
Set vegrng = ws1.Columns("G").Find(what:="S. Titel", LookIn:=xlValues, lookat:=xlWhole, After:=vegrng, searchdirection:=xlNext)
If vegrng.Address = elsocim Then Exit Do 'ha visszaértünk az elsohöz, kilépünk
Loop
'megkeressük az elso S. Gewerk cellát:
Set vegrng = ws1.Columns("G").Find(what:="S. Bereich", LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlNext, After:=Range("G1"))
elsocim = vegrng.Address: Set gewerkrng = Range("G1") 'megjegyezzük a helyét és a lehetséges elso cellát
Do While Not vegrng Is Nothing
'megkeressük az elso S. Titelt a Gewerkben
Set kezdrng = ws1.Columns("G").Find(what:="S. Titel", LookIn:=xlValues, lookat:=xlWhole, After:=vegrng, searchdirection:=xlPrevious)
kezdocim = kezdrng.Address
Set celrng = kezdrng
Do While Not kezdrng Is Nothing
If kezdrng.Row > gewerkrng.Row Then ' ha benne van a tartományban
If kezdrng.Row < vegrng.Row Then ' és oda tartozik, akkor bevesszük az összesítésbe
Set celrng = Union(kezdrng, celrng)
Else
vegrng.Offset(0, -1).Formula = "=Sum(" & celrng.Offset(0, -1).Address & ")" 'ha nincs benne, akkor beírjuk az összesíto képletet
vegrng.Offset(0, -1).NumberFormat = "#,##0.00 $"
vegrng.Offset(0, -1).Font.Bold = True
vegrng.Offset(0, -1).HorizontalAlignment = xlRight
Exit Do
End If
Else
vegrng.Offset(0, -1).Formula = "=Sum(" & celrng.Offset(0, -1).Address & ")" ' ha már az elozo Gewerkhez visszaértünk, akkor beírjuk az összesíto képletet
vegrng.Offset(0, -1).NumberFormat = "#,##0.00 $"
vegrng.Offset(0, -1).Font.Bold = True
vegrng.Offset(0, -1).HorizontalAlignment = xlRight
Exit Do
End If
'megkeressük a következo S. Titel cellát:
Set kezdrng = ws1.Columns("G").Find(what:="S. Titel", LookIn:=xlValues, lookat:=xlWhole, After:=kezdrng, searchdirection:=xlPrevious)
If kezdrng.Address = kezdocim Then Exit Do 'ha nincs több S. Titel, akkor kilépünk EZ AZ EGYIK ÚJ SOR
Loop
Set gewerkrng = vegrng ' a Gewerk területet változtatjuk
'megkeressük a következo S. Gewerk cellát:
Set vegrng = ws1.Columns("G").Find(what:="S. Bereich", LookIn:=xlValues, lookat:=xlWhole, After:=vegrng, searchdirection:=xlNext)
'INNEN MÓDOSULT
If vegrng.Address = elsocim Then 'ha visszaértünk az elso találathoz
If Application.IsFormula(vegrng.Offset(0, -1)) Then 'és már van képletünk, akkor végeztünk
Exit Do
Else ' egyébként betesszük a képletet és utána végeztünk
vegrng.Offset(0, -1).Formula = "=Sum(" & celrng.Offset(0, -1).Address & ")" ' ha már az elozo Gewerkhez visszaértünk, akkor beírjuk az összesíto képletet
vegrng.Offset(0, -1).NumberFormat = "#,##0.00 $"
vegrng.Offset(0, -1).Font.Bold = True
vegrng.Offset(0, -1).HorizontalAlignment = xlRight
Exit Do
End If
End If
Loop
End Sub
Remélem így már rendben lesz.Üdv.
-
Fferi50
Topikgazda
válasz
Salex1
#33300
üzenetére
Szia!
Ha képként mented el, akkor bármivel meg lehet nézni és képként be is lehet importálni munkalapra is

Egyébként visszafelé nem kompatibilis egyetlen Excel verzió sem, a fejlesztéseket nem lehet a korábbi verziókban használni, azok hibát okoznak.
Azért nézd meg lsz. hogy a 2010-es Excelben nincs-e benne már a saját kombinációs lehetőség (2013-as verzióban van), mivel én azt már nem tudom megnézni.Üdv.
-
Fferi50
Topikgazda
válasz
bandus
#33284
üzenetére
Szia!
Próbáld ezt a makrót:
Sub transzp()
Dim honnan As Range, hova As Range, xx As Integer, cl As Range
Set honnan = Range("A1:A14") 'innen kell másolni
Set hova = Range("A20") ' ez a másolási cél első cellája
For Each cl In honnan.Cells
hova.Offset(0, xx).Value = cl.Value
xx = xx + 2
Next
End Sub
Üdv. -
Fferi50
Topikgazda
válasz
lumpy92
#33267
üzenetére
Szia!
Próbáld a következőt: Szúrj be egy üres oszlopot a munkalap elejére.
Ezután írd be a következő tömbképletet az A1 cellába:=INDIREKT(CÍM(SOR();MAX((B1:AZ1<>"")*OSZLOP(B1:AZ1))))
A tömbképletet a Ctrl+Shift+Enter billentyű kombinációval lehet bevinni, az Excel kapcsos zárójelbe teszi automatikusan. Majd húzd végig a képletet az oszlopon.Az AZ1 helyett azt a legutolsó oszlopot írd be, ahol még adat lehet.
Természetesen az adatok utolsó oszlopába is írhatod a képletet, annak megfelelően változtatva a tartományt.
Üdv.
-
Fferi50
Topikgazda
válasz
daddy9
#33262
üzenetére
Szia!
Egy "szép" tömbképlet megoldja a problémádat:
=HELYETTE(JOBB(A1;HOSSZ(A1)-NAGY((KÖZÉP($A$1;SOR($A1:$A50);1)="\")*SOR($A1:$A50);2));"\";"")
A tömbképletet Ctrl+Shift+Enter billentyű kombóval lehet bevinni, a szerkesztőlécen a képletet kapcsos zárójelbe teszi az Excel maga.Ha hosszabb lenne az elérési út mint 50 betű, akkor a $A50 helyett írj nagyobb számot. Ha az elérési út végén nincs "\" ,akkor egyszerűbb a képlet (ez is tömbképlet!):
=JOBB(A1;HOSSZ(A1)-MAX((KÖZÉP($A$1;SOR($A1:$A50);1)="\")*SOR($A1:$A50)))Üdv.
-
Fferi50
Topikgazda
válasz
total90
#33261
üzenetére
Szia!
Akkor csak a termékeket tartalmazó oszlopra csináld meg az ismétlődések eltávolítását, majd a mellette levő oszlopba Fkeres függvénnyel megkeresheted mindkét termékes listában az árat hozzá.
=Hahiba(Fkeres(F2;$A$1:$B$20;2;0);0)+Hahiba(Fkeres(F2;$D$1:$E$25);0)
A két lista az A-B,ill D:E oszlopban van, az egyesített, tisztított terméklista az F oszlopban.
A képletet az F oszlopon kell végighúzni.Ha a két árat nem összeadni szeretnéd, csak egymás mellett látni, akkor a + jel helyett
& " ; " &kell írni, ekkor pontosvesszővel lesz elválasztva a két ár.Ha egy listában többször is előfordul ugyanaz a termék, akkor viszont az összesített/egyesített listádban nem szabad kivenni az ismétlődéseket, hanem kimutatást kell belőle csinálni !
Üdv.
-
-
Fferi50
Topikgazda
Szia!
"Hogyan tudnám azt megadni, hogy a kötőjel után keresse a kettest?"
Akkor a kötőjel +2 kombót kell keresni:
SZÖVEG.TALÁL("-2";Összesített!U6)
Másrészt:
KÖZÉP(Összesített!U6;SZÖVEG.TALÁL("2";Összesített!U6);3)="2" soha nem fog teljesülni, mivel 3 karaktert hasonlítasz 1 karakterhez. A közép hossz paramétere legyen 3 helyett 1.Üdv.
-
Fferi50
Topikgazda
válasz
stigma
#33235
üzenetére
Szia!
"van e olyan változó melyet külön modul-ból vagy Thisworkbook-ból elérem?"
Minden Public -ként deklarált változót elérhetsz a projekten belül. Hivatkozni úgy tudsz rá, hogy megadod a teljes "elérési útját".
Pl. A Thisworkbook modulban Public valami, erre más modulokban úgy hivatkozhatsz, hogy Thisworkbook.valami, Munka1 munkalap kódmoduljában meghatározottra pedig így: Munka1.valami, de ez igaz az általános modulokban meghatározottakra is Modulnév.változónév biztosan a publikusan (vagy modulszinten) deklarált változóra hivatkozik.
A Const kulcsszóval konstansokat határozhatsz meg - ergo ezek értéke a programban nem változhat.
A Private változót csak az adott eljárás látja.Üdv.
-
Fferi50
Topikgazda
válasz
loscsaba86
#33209
üzenetére
Szia!
Nincs itt semmilyen kerekítésről szó.
Ne csodálkozz azon, hogy az 1000 alapról induló, azonos összeggel növekvő értékek mindig kerekek lesznek. Nem történt semmi más, csak az A oszlop adatait megszoroztad 20 ezerrel.
Hiszen az eredeti (A oszlopbeli) értékeid mindig 1 századdal növekszenek (ami az eredeti érték 20 %-a). A C1-be írt 1000 pedig éppen 20 ezer szerese az A1 értékének, ezért a különbségek is mindig az eredeti 1 század különbségnek a 20 ezer szeresei (azaz 200) lesznek.
A lehúzott képleted mindig az 1000-ből, mint alapból indulva számolja (kumulálva) az értékeket, hiszen a C oszlop megszorzott előző értékét használja.Üdv.
-
Fferi50
Topikgazda
válasz
Mexildos
#33199
üzenetére
Szia!
Egy segédoszlopba kell a következő képletet beírni, ha a szavak az A oszlopban vannak:
B1 képlete: ="(" & A1 & ")"
Ezt végighúzod ameddig az A oszlopban vannak szavak.
Ezután a B oszlopot kijelölöd - másolás - irányított beillesztés értéket. Vagy ezt másolod rá az A oszlopra, vagy kitörlöd előle az A oszlopot.Üdv.
-
Fferi50
Topikgazda
válasz
blountex
#33152
üzenetére
Szia!
"az egyiknél betűt kell írni mint n, a másiknál hogy hány darab van abból, a harmadiknál pedig a végederményt"
Kérdés, honnan tudod, hogy melyik betű milyen számot jelent? Mennyi az n és mennyi a k, vagy ha van más betű, akkor azoknak mi az értéke. Mert betűt számmal szorozni, annak mindig 0 az eredménye.Egy ötlet arra, hogyan lehet 2 betűt is használni:
A1 cellában vannak a betűk - ha két betű van, akkor ; (pontosvessző) az elválasztás közöttük.
B1 cellában van az előfordulások száma, ha két betű van az A1 cellában, akkor ide is két szám kell, elválasztó itt is a ; (Az n = 5, k = 7 állandókat használtam.) C1 cella képlete:=HA(HIBÁS(SZÖVEG.KERES(";";A1));5*B1;5*BAL(B1;SZÖVEG.KERES(";";B1)-1)+7*KÖZÉP(B1;SZÖVEG.KERES(";";B1)+1;HOSSZ(B1)))Ezt még meg lehet fejelni pl. azzal, hogy a szorzók (a betűk) értékét is egymásba ágyazott ha függvényekkel választod ki.
Üdv.
-
Fferi50
Topikgazda
válasz
blountex
#33150
üzenetére
Szia!
Veszel két cellát, az egyikbe beírod az n, a másikba a k szorzóját.
Pl. A1 cella az n szorzója, B1 cella a k szorzója, akkor C1-be a képlet: =A1*25+B1*12
Sőt:
Az n számára és a k számára is használhatsz egy - egy cellát és akkor
C1 képlete = A1*A2+B1*B2 (n az A2, k a B2 cellában van).Remélem, jól értettem a kérdésed.
Üdv.
-
Fferi50
Topikgazda
válasz
lenkei83
#33141
üzenetére
Szia!
Szerintem kicsit túlkombinálod.
Ez a függvényes, ami csak 1 cella esetén müxik jól.If (sh.CodeName = "munka5" Or 1 <= target.Column <= 2) Then
regiertek = target.Value ' ez volt a target értéke
Application.EnableEvents = False
Application.Undo
target.Cells.NumberFormat = "@"
If Application.CutCopyMode <> False Then ' ha másolásról van szó, akkor
target.PasteSpecial Paste:=xlPasteValues ' most bemásoljuk az értéket - ami megegyezik az előzőleg regiertekbe tett értékkel!
Application.CutCopyMode = False
target.Value = RemoveNotNum(regiertek) 'ezért itt jó a regiertek és a target.value is!!
Else
target.Value = RemoveNotNum(regiertek) 'ha nem másolás volt, akkor is kiszedjük a számokat
EndIf
mivel ez a két sor azonos, lehet az EndIf után tenni.Ez pedig a Sub-bal, itt viszont a meghíváskor RANGE-et kell megadni, nem értéket!
If (sh.CodeName = "munka5" Or 1 <= target.Column <= 2) Then
regiertek = target.Value
Application.EnableEvents = False
Application.Undo
target.Cells.NumberFormat = "@"
If Application.CutCopyMode <> False Then
target.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
RemoveNotNum Target 'regiertek
Else
Target.Value=regiertek
RemoveNotNum Target 'regiertek
End If
Ez működik több cellás cél esetén is (meg egy cella esetén is).Üdv.
-
Fferi50
Topikgazda
válasz
lenkei83
#33139
üzenetére
Szia!
Szerintem a Copy ágon nincs régi érték...
Ha több cellából áll a Target tartomány, akkor két lehetőséged van:
- vagy a Target tartomány celláin mész végig for each ciklussal és egyenként hívod meg a függvényt,
- vagy és ez szerintem a jobb, hogy a függvényből paraméteres eljárást csinálsz és ezen belül megy végig a ciklus a range celláin:Sub RemoveNotNum(ByRef myRange As Range)
Dim xOut As String, xTemp As String, i As Integer, xstr As String, cl As Range
xOut = ""
For Each cl In myRange
For i = 1 To Len(cl.Value)
xTemp = Mid(cl.Value, i, 1)
If xTemp Like "[0-9]" Then
xstr = xTemp
Else
xstr = ""
End If
xOut = xOut & xstr
Next i
cl.Value = xOut
xOut = ""
Next
End Sub
(Ez már csaknem az eredeti makró :-)
A meghívás pedig RemoveNotNum Target (illetve a Target helyett írhatod azt a tarrtományt, amelyből ki szeretnéd venni a nem szám karaktereket.
Itt már nem kell zárójel, mert nem függvény, hanem eljárás ami működik. Ez akkor is működik, ha csak egy cella van kijelölve, akkor is, ha több.Üdv.
-
Fferi50
Topikgazda
-
Fferi50
Topikgazda
válasz
lenkei83
#33119
üzenetére
Szia!
A második makróból csinálj egy függvényt (pl):
Function RemoveNotNum(ByVal ertek As String)
Dim xOut As String, xTemp As String, i As Integer, xstr As String
xOut = ""
For i = 1 To Len(ertek)
xTemp = Mid(ertek, i, 1)
If xTemp Like "[0-9]" Then
xstr = xTemp
Else
xstr = ""
End If
xOut = xOut & xstr
Next i
RemoveNotNum = xOut
End FunctionEzután az első makróban a target.Value = regiertek sort cseréld ki erre:
target.Value = RemoveNotNum(regiertek)Üdv.
-
Fferi50
Topikgazda
-
Fferi50
Topikgazda
válasz
tzimash
#32929
üzenetére
Szia!
Én maradnék a saját javaslatomnál:
Dim hiba As Range
Set hiba = Range("E:E").Find(what:="#", LookIn:=xlValues, lookat:=xlPart)
If Not hiba Is Nothing Then MsgBox "Az első hibás adat az " & hiba.Row & ". sorban van" & vbLf & "az A" & hiba.Row & " cella értéke: " & hiba.Offset(0, -4).Value: Exit SubÜdv.
-
Fferi50
Topikgazda
válasz
tzimash
#32925
üzenetére
Szia!
Többféle út is járható
Dim hiba As Range
Set hiba = Range("E:E").Find(what:="#", LookIn:=xlValues, lookat:=xlPart)
If Not hiba Is Nothing Then MsgBox "Hiányosak az adatok, a program befejeződik!": Exit Sub
vagydim hibas as integer
hibas = Application.CountIf(E:E, CVErr(2042))
if hibas>0 then stb.A kilépést magad is el tudod intézni, csak 1 mintát írtam.
Üdv.
-
Fferi50
Topikgazda
válasz
tzimash
#32891
üzenetére
Szia!
Minden MsgBox üzenet esetén kell OK vagy más gombot nyomnia a felhasználónak, nem csak a program végén :-(
Miért nem jó neked az állapotsor ott a képernyő alján? Ott nem kell a felhasználónak semmit csinálnia, csak nézni, mint boci...
Az elején pedig írhatsz egy MsgBoxot neki, hogy lesse az alsó sort, ha kíváncsi (ha nem).
Én hosszú folyamatoknál itt szoktam pörgetni a számlálót, hogy x tétel,cella van feldolgozva y darabból és általában 100-asával változtatom (mert különben nem látsz semmit a pörgéstől). Irtó kellemetlen lenne a felhasználónak, ha pár másodpercenként nyomkodnia kellene az entereket (mert "túl gyors" a program).
Szerintem akkor van értelme MsgBox-nak, ha a felhasználó döntésétől is függ, hogy mit csinálsz tovább, pl. nincs meg minden adat, de szeretne hiányos adatokkal is továbbmenni stb., illetve ha valami szokatlan történt és hibáról kell tájékoztatni.Üdv.
-
Fferi50
Topikgazda
válasz
tzimash
#32889
üzenetére
Szia!
Az MsgBox nem tűnik el addig, amíg a felhasználó rá nem kattint az OK gombra.
Az állapotsor felhasználható a folyamatok jelzésére:
Application.Statusbar="Most itt járok:" & "éppen indexelek"
A makró végén pedig Application.Statusbar=False - visszaadja a vezérlést az Excelnek (ez utóbbit ne felejtsd ki, mert egyébként az állapotsoron ott marad, amit legutoljára kiírattál.
Az állapotsorba rajzkarakterket is tehetsz, színt viszont nem.Lehet még olyan megoldás is, hogy egy userformot hozol létre, amire az üzeneteket kíírod egy Labelba, majd a Userform1.Show false paraméterrel hívod meg - ekkor a makró fut tovább, a form pedig addig lesz kinn, amíg az Unload Userform1 sort be nem írod, vagy a felhasználó "ki nem x-eli".
Az üzeneteket menet közben változtathatod, amíg a form kint van, pl. Userform1.Label1.Caption="Most más szöveg jön".
Ide rajzos karaktereket is tehetsz és színezheted is. De azért nem árt sokat gyakorolni, mielőtt ráereszted a felhasználóra.Üdv.
-
Fferi50
Topikgazda
válasz
botond2225
#32885
üzenetére
Szia!
Hasznos lett volna, ha a hibakiírást is rajta hagyod a képen.
Talán az lehet a probléma, hogy az offset(0,-52)-t nem tudja értelmezni, mert nincs a kijelölt cellától balra 52 oszlop már. Valószínúleg nem ott állsz, mint ahol a makrót rögzítetted.
Szerintem elég lenne a Destination:=Activesheet.range('A1:BA500"), stb.Üdv.
-
Fferi50
Topikgazda
-
Fferi50
Topikgazda
válasz
lenkei83
#32873
üzenetére
Szia!
Szerintem ennek működni kellene, viszont mivel a Thisworkbook kódlapja nem általános modul, hanem osztálymodulnak számít, a változót csak úgy tudod elérni, ha a teljes nevével hivatkozol rá, azaz Thisworkbook.valid_cell_range. Ebben a formában már látja minden modul - és a vba segítőben is látod.
Üdv.
-
Fferi50
Topikgazda
válasz
Sprite75
#32868
üzenetére
Szia!
2013-as excelben már 255 paramétere lehet az összefűz függvénynek. Nézd meg lsz. a szerkesztősoron a függvényre kattintva, hogy hány paramétert enged meg. (Beírod az =Összefűz( szöveget, rákattintasz az Fx szimbolra, az előugró ablakban ott a szöveg.)
Másik lehetőség: Szürő az oszlopra, nem üresre állítva a szűrőt megkapod azokat a cellákat, amelyekben van érték. Ezeket egyben kijelölheted, átmásolhatod egy másik munkalap összefüggő tartományába. Máris csak pár cellát kell összefűzni, arra meg jó a & műveleti jel is.
Üdv.
-
Fferi50
Topikgazda
válasz
poffsoft
#32838
üzenetére
Szia!
Sajnos a Help is félrevezető ebben a tekintetben. A MÓDUSZ.TÖBB akkor írja ki a több számot, ha az előfordulásuk azonos - vagyis több értéket lehet módusznak tekinteni, ha csak egy módusz van, akkor csak azt az egy számot fogja így is kiírni és nem adja meg az utána következő előfordulásokat.
Csak nagyon figyelmesen elolvasva a Helpet, jön át ez a "korlátozás":
"A =MÓDUSZ.TÖBB(A2:A13) képletet tömbképletként kell beírnia. Ebben az esetben a MÓDUSZ.TÖBB 1, 2 és 3 értéket ad vissza móduszként, mivel mindegyik háromszor jelenik meg".Üdv.
-
Fferi50
Topikgazda
válasz
Tomjack
#32833
üzenetére
Szia!
Pillanatnyilag egyszerű megoldás nem jut eszembe, de csinálhatod a következőt:
Egy segédoszlopba átmásolod az összes számot - utána adatok - ismétlődések eltávolítása.
Majd a mellette levő cellába megszámoltatod a darabteli függvénnyel az eredeti helyen levő előfordulásokat, ezután az eredményt sorbarendezed csökkenő módon. (=darabteli(eredeti hely, bal oldali cella))Üdv.
-
Fferi50
Topikgazda
válasz
TrollBalint
#32817
üzenetére
Szia!
Mutatnál egy képet, esetleg feltennéd valahova a mintafájlt, mert sajna nem tudok mire gondolni pillanatnyilag.
Üdv.
-
Fferi50
Topikgazda
válasz
morgusz
#32801
üzenetére
Szia!
Szerintem a
Set Email = Outlookprogi.CreateItem(0)
On Error Resume Next
For xx = 2 To 100
If IsEmpty(Cells(xx, "I")) Then Exit For
If Cells(xx, "S") = "küldhető" And Cells(xx, "M") = 1 Then
programrészt kellene átírni így:On Error Resume Next
For xx = 2 To 100
If IsEmpty(Cells(xx, "I")) Then Exit For
If Cells(xx, "S") = "küldhető" And Cells(xx, "M") = 1 Then
Set Email = Outlookprogi.CreateItem(0) 'abban nem vagyok biztos, hogy mindig (0) paraméter kell, lehetséges, hogy azt is kell növelni, ezt próbáld ki lsz.Az elküldése szerintem a .send lehet (de ez csak tipp, nézd meg lsz.)
Üdv.
-
Fferi50
Topikgazda
válasz
morgusz
#32787
üzenetére
Szia!
Lehetne pl. így
Dim Outlookprogi As Object
Dim Email As Object
Dim xx As Integer
Set Outlookprogi = CreateObject("Outlook.Application")
Set Email = Outlookprogi.CreateItem(0)
On Error Resume Next
For xx = 2 To 100
If IsEmpty(Cells(xx, "I")) Then Exit For
If Cells(xx, "S") = "küldhető" And Cells(xx, "M") = 1 Then
With Email
.to = "F"
.CC = "P"
.Subject = Cells(xx, "W").Value 'ActiveCell.Offset(0, 11).Value L+11 oszlop
.Body = Cells(xx, "A").Value ' ActiveCell.Offset(0, -11).Value L-11 oszlop
.Display
End With
End If
Next
Set Email = Nothing
Set Outlookprogi = NothingAz On Error Resume Next sorral nem tudom, mit szerettél volna elérni, így önmagában nem sokat ér, csak annyit, hogy hiba esetén nem áll meg a program és nem tudod meg, hogy hiba volt - pl. nem tudta létrehozni az email objektumot, de rendületlenül készítgeti a semmit...
Üdv.
-
Fferi50
Topikgazda
válasz
TrollBalint
#32788
üzenetére
Szia!
Szerintem "csupáncsak" annyi a baj, hogy a táblázatodban vannak üres sorok és ezek is bele vannak foglalva a képletbe - emiatt a MIN függvény természetesen 0 lesz, ami dátumformátumban 1900.01.00.
Ezért a képleteket elsőre úgy kell megadni, hogy csak a tele sorokat tartalmazza. Mivel a table forma maga automatikusan bővül, ha beviszel egy új sort az első táblába, a képlet figyelembe fogja venni "magától". Ha új nevet viszel be, azt át kell írnod a második táblába a következő sorba, a képlet itt is automatikusan működik.
Természetesen amíg a kezdő dátumhoz nem írsz semmit, addig a második tábla első oszlop adataiban 0 érték fog megjelenni.
Csak a tömbképlet működik helyesen!!!
(A sok # azért lett, mert negatív időt nem tud megjeleníteni az Excel.)Üdv.
-
Fferi50
Topikgazda
Szia!
Jó-jó, de akkor sem lenne haszontalan látni azt a képletet az I45 cellában ill. a szerkesztőlécen. Mégis csak én tudom (vagy Delila, vagy más), hogy mit miért kell úgy csinálni a képletben.
Azt például látom a képen, hogy az általad korábban írtaktól eltérő oszlopokban vannak az x jelek (pl. a K oszlopban egy db sincs).
Ezért legalább azt meg lehetne nézni, hogy jól írtad-e át a Te állapotodnak megfelelően.Üdv.
-
Fferi50
Topikgazda
-
Fferi50
Topikgazda
Szia!
Próbáld az alábbi tömbképletet:
=SZUM((HAHIBA(SZÖVEG.KERES("x";$K$1:$K$23 & $L$1:$L$23 & $M$1:$M$23 & $N$1:$N$23);0)*1*($E$1:$E$23)))
Az oszlopok elejét és végét a saját kitöltöttségednek megfelelően állítsd be lsz.
A tömbképletet Shift + Ctrl + Enter billentyűkombinációval viheted be, az Excel kapcsos zárójelbe teszi.Üdv.
Új hozzászólás Aktív témák
- Honor X8a / 4/128GB / Kártyafüggetlen / 12HÓ Garancia
- iKing.Hu - Használt, karcmentes Google Pixel 9 Pro Fold Obsidian színben, 256 GB tárhellyel, 6 hónap
- Apple iPhone 17 Pro Max 256GB Cosmic Orange használt, karcmentes 100% akku Apple garancia 2026
- Asus VC239 23 Full HD Monitor 6 hó garancia Házhozszállítás
- Hp USB-C/Thunderbolt 3 dokkolók: USB-C Universal, G2, G4, G5, Hp Elite/Zbook- Thunderbolt 4 G4
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest



) kell venned B1 helyett.

