-
GAMEPOD.hu
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
Topikgazda
válasz p5quser #36657 üzenetére
Meg kell keresni a Szlazo lap A oszlopában az első üres sort, és ezt kell megadni a beillesztés helyeként.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Ide As Long
If Not Intersect(Target, Range("A1:A2637")) Is Nothing Then
Ide = Sheets("Szlazo").Range("A" & Rows.Count).End(xlUp).Row + 1
Cancel = True
Target.Copy Destination:=Sheets("Szlazo").Range("A" & Ide)
Sheets("Szlazo").Select
ActiveCell.Offset(0, 2).Select
End If
End SubProgramozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Fferi50
őstag
válasz p5quser #36929 üzenetére
Szia!
Meg van nyitva a célfájlod.
Megnyitod a forrásfájlt. Munkalap fülön jobb egérgomb - másolás vagy áthelyezés - kiválasztod a célfájlt - legyen másolat. Forrásfájl bezárás.
Ezt ismétled, mígnem elfogynak a forrás fájlok.
Persze lehet rá makrót is írni - sőt felvenni is. Ha a célfájlba valahova beírod a forrásfájlok neveit, akkor ciklusban sorban meg lehet nyitni azokat, átmásolni a munkalapot és bezárni.Üdv.
PS.
(valamikor hajdanán volt olyan DOS parancs, amivel több fájlt össze lehetett másolni , nem tudom, Windows támogat-e ilyet, azt pedig végképp nem, hogy a legeslegeslegújabb fájlformátumban egyáltalán lehetséges-e hasonló - de szerintem nem) -
Delila_1
Topikgazda
válasz p5quser #36955 üzenetére
A ThisWokrbook laphoz rendelve
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If ActiveSheet.Name > "Munka1" Then
ActiveSheet.Range("$A$1:$N$316").AutoFilter Field:=11, Criteria1:=">1", _
Operator:=xlOr, Criteria2:="<-1"
End If
End SubProgramozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Pakliman
tag
válasz p5quser #36959 üzenetére
Szia!
Nem próbáltam ki, mert dokinál vagyok, de mennie kellene:Sub CommandButton2_Click()
'Kijelölés
Dim ws as worksheet
Dim act as worksheet
Set act=activesheet
For each ws in worksheets
If not ws is act then
Ws.activate
Ws.Range("$A$1:$N$330").AutoFilter Field:=11, Criteria1:=">1", _
Operator:=xlAnd
Ws.AutoFilter.Range.Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Ws.ShowAllData
Ws.Range("$A$1:$N$330").AutoFilter Field:=11, Criteria1:="<-1", _
Operator:=xlAnd
Ws.AutoFilter.Range.Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
End With
Ws.ShowAllData
Ws.Range("$A$1:$N$316").AutoFilter Field:=11, Criteria1:=">1", _
Operator:=xlOr, Criteria2:="<-1"
Endif
Next ws
End Sub
(Baromi nehéz telefonon írni )[ Szerkesztve ]
-
Delila_1
Topikgazda
válasz p5quser #36959 üzenetére
A laphoz rendelt gomb csak a saját lapján tud dolgozni. Helyette tegyél a lapra (mondjuk az elsőre) egy alakzatot, pl. a lekerekített téglalapot.
Modulba másold be a makrót:
Sub Szures()
Dim lap As Integer
Application.ScreenUpdating = False
For lap = 2 To Sheets.Count
Sheets(lap).Select
ActiveSheet.Range("$A$1:$N$330").AutoFilter Field:=11, Criteria1:=">1"
ActiveSheet.AutoFilter.Range.Select
Selection.Interior.Color = 5296274
' ActiveSheet.Range("$A$1:$N$330").AutoFilter Field:=11 'összes sor mutatása
Next
' Sheets(1).Select 'első lapra állás
Application.ScreenUpdating = True
End SubAz alakzathoz rendeld hozzá a Szures makrót. Ez a másodiktól az utolsó lapig halad, és mindenhol végrehajtja a szűrést, színezést.
Nézd meg, kell-e a két sor a makróban, amikhez megjegyzést fűztem.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz p5quser #36979 üzenetére
Lehet, hogy látszatra egyforma a két érték, de a keresett érték számként-, a 11. oszlopban pedig szövegként van megadva.
Ha mindegyik szöveg, gyakori hiba, hogy az egyik tartalmaz (többnyire a végén) egy szóközt. A TRIM függvénnyel levághatod a szöveg elején, és végén lévő szóközöket egy új oszlopban a keresés előtt, majd értékként beilleszted az eredeti helyére.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
föccer
nagyúr
-
Delila_1
Topikgazda
válasz p5quser #37629 üzenetére
Sorban megnyitod egy mappa adatait. Az egyes füzetek megnyitása után hívd meg ezt a makrót.
Sub Kigyujtes()
'B oszlopban szűrünk az "elszámolás" szóra.
'A szűrt adatok közül a szűrés előtti, a szűrt oszlop, és a szűrés utáni oszlop
'adatait másoljuk az Összesítés lap első üres sorába, a lap B oszlopától kezdve.
'Az Összesítő A oszlopába beírjuk a lap nevét, ahonnan másoltunk. Megszüntetjük a szűrést.
'Az Összesítő az utolsó lap a füzetben.
Dim lap As Integer, innen As Long, eddig As Long, WSO As Worksheet
Set WSO = Sheets("Összesítés")
Application.ScreenUpdating = False
For lap = 1 To Sheets.Count - 1
Sheets(lap).Activate
Range("$A:$F").AutoFilter Field:=2, Criteria1:="elszámolás"
Range(Cells(2, 1), Cells(10000, 3)).SpecialCells(xlCellTypeVisible).Copy
innen = WSO.Range("B" & Rows.Count).End(xlUp).Row + 1
WSO.Range("B" & innen).PasteSpecial xlPasteValues
eddig = WSO.Range("B" & Rows.Count).End(xlUp).Row
WSO.Range("A" & innen & ":A" & eddig) = ActiveSheet.Name
Range("$A:$F").AutoFilter Field:=2
Next
WSO.Activate: Range("A2").Select
Application.ScreenUpdating = True
End SubBiztosan hozzá tudod idomítani a saját igényeidhez.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz p5quser #37637 üzenetére
Lehet, hogy nem értéket, hanem képletet illesztettél be az új helyre, és a képlet az új helyén más cellák adataiból számol.
Szerk.:
Jobban megnézve a két sorodat, értéket illesztesz be (.value). Ez esetben fogalmam sincs, miért nem jelenik meg az előjel az új helyen.
[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Fferi50
őstag
válasz p5quser #37673 üzenetére
Szia!
'Mint írtam, van működő kód, csak nem értem ezt az előjel váltást, és érdekelt, hogy mi nyűgje lehet.'
Ezek szerint amit leírtál kód, az mégsem működik megfelelően. Sajnos így látatlanban nem tudom megmondani, mi lehet a probléma. A kódnak elvileg jól kellene működnie.
Talán elküldhetnéd privátban.
Üdv.
-
Fferi50
őstag
válasz p5quser #38075 üzenetére
Szia!
Úgy tűnik, ilyen több műveletet tartalmazó képletet csak egy módon tudsz kiszámoltatni (bár erre igazán lehet azt mondani, hogy pofonegyszerű ):
A kifejezést tartalmazó cellára nyomsz egy F2-t majd eléírod az = jelet.
Persze ez többszáz cellánál elég időigényes. De sajnos makróval sem találtam jobb megoldást.Üdv.
-
ny.janos
tag
válasz p5quser #38078 üzenetére
Az itt segítséget nyújtó fórumtársak túl profik az excelhez hozzám képest, ami ebben az esetben pont nekem jelentett előnyt. (Mivel ők kizárólag excelben gondolkodtak, legalábbis nekem úgy tűnt.)
A néminemű tudatlanságom okán viszonylag sokszor szoktam az excel megoldásaimhoz jegyzetttömböt és word-öt is használni. Így adta magát a dolog, hogy ez esetben is kipróbáljam. Kár, hogy csak azt követően sikerült megírnom a megoldást, hogy már manuálisan végigmódosítgattad a fájlodat. -
Mutt
aktív tag
válasz p5quser #38070 üzenetére
Szia,
Az EVALUATE Excel 4.0-ás függvény tud neked ebben segíteni, de csak trükkösen hívható elő.
Ha az adatok az A oszlopban vannak, akkor hozz létre a névkezelőben egy változót, aminek a képlete ez:=EVALUATE($A1)
Ahogy látható csak az A-oszlop lesz rögzítve, a sor változik.
Ezek után ahova beírod a változód nevét oda a sor első oszlopának értékét ki fogja számolni.
Alternatív megoldás a Power Query használata.
Itt is igazából a fenti függvényt lehet használni, de a neve Expression.Evaluate.
üdv
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
Mutt
aktív tag
válasz p5quser #38721 üzenetére
Szia,
1. Felveszel egy új adatsort, aminek csak egy eleme, az aktuális napot tartalmazó cella az értéke.
2. Az új adatsort másodlagos tengelyhez rendeled, a tengelynek minimuma 0, maximuma 1 legyen.
3. Az új adatsorhoz engedélyezed a hibasávokat.
4. A vízszintes hibasáv törölhető, a függőlegest formázni kell.
Irány: negatív, végpont stílusa: nyílt, hiba mértéke: rögzített, aminek 1 az értéke (mivel ekkora a másodlagos tengely). Válassz színt és legyen a vonal kicsit vastagabb.
5. Az új adatsort jelöld ki és a jelzőpontnak ne legyen kitöltése, körvonala.
6. Rejtsd el a másodlagos tengelyt.üdv
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
Mutt
aktív tag
válasz p5quser #38725 üzenetére
Szia,
Oszlop diagram (stacked bar chart) esetén nem megy az általam javasolt megoldás, de ha pont diagramot használsz akkor jó lesz. Ezen tutorial alapján menni tudsz Gantt-diagramot másik módon létrehozni és ötvözni a korábban már említett trükköt.
Az y-tengely felirata lehet zavaró, mert ott sorszámokat fogsz látni, de adatfeliratok segítségével megoldható hogy az eredeti szöveg látszódjon.
üdv
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
Fferi50
őstag
válasz p5quser #38727 üzenetére
Szia!
Nem hagyott engem sem nyugodni a dolog és kiókumuláltam egy olyan megoldást, ami az eredeti elképzelésedhez hasonlít:
Lépések:
1. Az E1 cellába beírtam a Ma fejlécet. Az E oszlop minden sorában a képlet =MA()
2. A Diagramot kiegészítettem az E oszloppal, mint új adatsorral. Legyen a neve MA
3. A MA adatsort kijelöltem - adatsor diagramtípusának megváltoztatása - csoportosított sáv - másodlagos tengely bejelölve.
4. A másodlagos tengely (ami felül jelent meg a diagramon) minimum - maximum értékeit hozzáigazítottam az alsó tengely értékeihez, majd a feliratokat eltávolítottam.
5. Most jön az igazi trükk: A MA adatsor kitöltésénél színátmenetest jelöltem be. Az első szín fehér. Végponti pozíciója 98%, áttetszőség 100%. A második szín piros.
6. Hátravan még a MA adatsor pozicionálása: Az adatsor beállításainál az Átfedő adatsorok 100 %, A térköz szélessége 0 %.
A végeredmény:Üdv.
-
Delila_1
Topikgazda
válasz p5quser #40267 üzenetére
"...újabb oszlopban értékesíteni" a HELYETTE (SUBTITUTE) függvénnyel tudod, vagy már eleve a vesszős változatot viszed be a cellába.
Sheets(1).Cells(1) = Application.WorksheetFunction.Substitute(TextBox1, ".", ",") * 1
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Mutt
aktív tag
válasz p5quser #40270 üzenetére
Szia,
Előbb próbáld ki ezt a cserét:
Selection.Value = Application.InputBox("Darabszám", Type:=1)
Ha ez nem jó, akkor a Selection.Value helyébe tedd ezt:
vresult = InputBox("Darabszám")
If InStr(1, vresult, ",") Then
Selection.Value = CDbl(Left(vresult, InStr(1, vresult, ",") - 1) & Application.DecimalSeparator & Right(vresult, Len(vresult) - InStr(1, vresult, ",")))
Else
Selection.Value = vresult
End Ifüdv
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
Pakliman
tag
válasz p5quser #40480 üzenetére
Szia!
A legegyszerűbb megoldás (szerintem), ha a munkalapokat átnevezed:
Amint láthatod, egy munkalapnak 2 "Neve" van, VBA-ban mindkettő használható, de más módon:
1.: egy tulajdonképpeni "belső" azonosító, közvetlenül lehet hivatkozni rá:Munka3.Range("A1")
2.: ez látszik az Excelben a lapfülön, szövegként hivatkozhatunk rá:Worksheets("Munkaóra").Range("A1")
A 2. változatnál egy általános modulban deklarálni kell a szükséges "változókat"Public ws1 As Worksheet
Public ml3 As Worksheet
Public Össz As Worksheet, majd a Thisworkbook modulban értéket adni neki(k):
pl.:Private Sub Workbook_Open()
Set ws1 = Worksheets("Táblázat")
Set ml3 = Worksheets("Munkaóra")
Set Össz = Worksheets("Segéd")
End Sub[ Szerkesztve ]
-
Pakliman
tag
válasz p5quser #40486 üzenetére
A Workbook_Open metódus csakis a munkafüzet megnyitásakor fut le, vagyis az értékadás is akkor történik meg.
Próbáld meg először azt, hogy mentéssel bezárod a munkafüzetet majd újra megnyitod.Ha azt szeretnéd, hogy bármikor rendelkezésre álljanak az új hivatkozások, akkor egy általános modulban kellene létrehozni egy pl. Init nevű eljárást és abba beírni az értékadást.
Később, amikor szükség van az azonosítókra, a kódban egyszerűen csak meghívod az Init eljárást. -
Fferi50
őstag
válasz p5quser #40632 üzenetére
Szia!
"Ha az stnm helyére beírom idézőjelekkel az adat file teljes nevét kiterjesztéssel, teszi a dolgát"
Mit értesz teljes név alatt? Ha csak a kiterjesztéssel bővített fájlnevet, akkor rendben van. Ha viszont az elérési utat (Path) is beleérted, akkor nem működhet rendesen.
Megnyitott munkafüzetre a fájlnévvel (Name) lehet/kell hivatkozni, igen, kiterjesztéssel együtt.
Viszont itt:If stnm <> "" Then
Workbooks.Open stnm
End IfAz stnm a Path-t is fogja tartalmazni, ezért jelentkezik hiba az adott sorban.
Ebből az alábbi sorral kaphatod meg a fájl nevét:fnev=Mid(stnm,InStrRev(stnm,"\")+1)
Még egy megjegyzés: Amikor megnyitod az stnm nevű munkafüzetet, az lesz az aktív munkafüzet, tehát a nevét az ActiveWorkbook.Name tulajdonsággal is lekérdezheted.
Üdv.
[ Szerkesztve ]
-
Pakliman
tag
válasz p5quser #40632 üzenetére
Szia!
A
Dim stdb As Workbook
Dim stnm As Stringsorokat töröld a Workbook_Open metódusból (ha még nem tetted meg), mert különben kizárólag ezek a HELYBEN ÉRVÉNYES változók veszik fel az értékeket (ez miatt hasal el a program is, mert ott nincs értéke az stnm-nek!).
Private Sub Workbook_Open()
stnm = Application.GetOpenFilename
If stnm <> "" Then
Set stdb = Workbooks.Open(stnm)
End If
End SubA
Workbooks(stnm).Sheets(1).Range("A1:B" & Rows.Count).AutoFilter field:=2, Criteria1:="*" & TextBox2.Value & "*"
helyett így már használhatod astdb.Sheets(1).Range("A1:B" & Rows.Count).AutoFilter field:=2, Criteria1:="*" & TextBox2.Value & "*"
formát![ Szerkesztve ]
-
Pakliman
tag
válasz p5quser #40636 üzenetére
Sajnos várni kell a mesterséges intelligenciára
De addig is - egy kis plusz munkával - "tanítható" adatbázisból is dolgozhatsz.
Létrehozol egy munkafüzetet, amiben 2 oszlopot kell kezelned.
A 1. oszlopban lesznek a különböző felhasználók által használt kifejezések
A 2. oszlopba melléjük írod Te, hogy az mi is akar lenni (vagy Te mit szeretnél látni a zagyvaságok helyett )
Ezután az FKERES függvénnyel ebben a táblában kikeresed a kapott szöveget és megkapod a kívántat.
Ha hibát ad vissza, akkor egyszerűen csak kibővíted az új jövevénnyel.
Persze, sosem lesz tökéletes, de egyre kevesebb lesz a #HIÁNYZIK eredmény.Kicsit nehezebb feladat rávenni a kuncsaftokat, hogy egységes szövegeket használjanak.
[ Szerkesztve ]
-
Delila_1
Topikgazda
válasz p5quser #40636 üzenetére
Jobban olvasható, ha nem off-ban írod, és ide is tartozik. Kijavítottam.
A Beállítások | Nyelvi ellenőrzés | Automatikus javítás | Automatikus javítás fülön beállíthatod a Módosítandó szöveget (pl. Tartal), a Jó szöveghez pedig beírod a teljeset (Tartalék akkumulátor mobiltelefonhoz). Beírja a Tartal szöveget, másik cellába lépve átíródik a "rendes" hosszúra. Kis- és nagybetűt figyeli!
Szerk.:
Ne adj módosítandónak értelmes szöveget, mert ha csak azt a szót akarod meghagyni, akkor is átírja a megadott jó szövegként.[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz p5quser #40640 üzenetére
Csak úgy ne járj, mint egykor a főnököm.
Egy hosszú jegyzőkönyvben sokszor le kellett írnom a zöld/sárga földelő vezeték szöveget. Nosza, automatikus javításba tettem, zs-ként. A főnöknek is átküldtem. Pár nap múlva kétségbe esve jött, hogy megbolondult nála az Excel. Mikor rövidítve leírja az egyik dolgozó nevét – Kovács Zsigmond helyett Kovács Zs – átíródik Kovács zöld/sárga földelő vezetékre. Eszerint a fájlom nála is bevezette az automatikus javítást.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Fferi50
őstag
válasz p5quser #40636 üzenetére
Szia!
Még egy ötlet, esetleg ennek is hasznát veheted:
A keresésnél (Fkeres, Hol.Van függvény) lehet használni pl. a * (csillag) joker karaktert, ami tetszőleges karaktersorozatot helyettesít:
"*tart*" olyan cellát keres, amelyben megtalálható a tart szótöredék
"tart*" olyan cellát keres, amelyik tart szövegrészlettel kezdődik
"*tart" pedig olyan cellát keres, ahol tart a szöveg vége
Ebben az esetben nem számít, hány karaterből vagy hány szóból áll a megtalálandó cellában a szöveg.Pl. Fkeres(Bal("Tartalék akkumlátor mobiltelefonhoz" ;4) & "*";Másik tábla;1;0) visszaadja az első olyan találatot, amelyik Tart -tal kezdődik. Fontos a 4. paraméter 0 (HAMIS) értéke!
Üdv.
[ Szerkesztve ]
Új hozzászólás Aktív témák
- Gitáros topic
- AMD Radeon™ RX 470 / 480 és RX 570 / 580 / 590
- Sorozatok
- OFF TOPIC 44 - Te mondd, hogy offtopic, a te hangod mélyebb!
- gban: Ingyen kellene, de tegnapra
- Rövid előzetesen a S.T.A.L.K.E.R. 2: Heart of Chornobyl
- iPhone topik
- Trollok komolyan
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Motoros topic
- További aktív témák...