- Windows 11
- Kodi és kiegészítői magyar nyelvű online tartalmakhoz (Linux, Windows)
- ArchiCAD és Artlantis topik
- Padavan firmware
- Bocsánatot kért az Apple, mert nagyon mellélőtt a legutóbbi reklámjával
- Már nem hisz a nagy európai EV-forradalomban a Ford
- Synology NAS
- YouTube
- Xiaomi AX3600 WiFi 6 AIoT Router
- Linux kezdőknek
-
IT café
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
-
Mutt
aktív tag
válasz morgusz #19331 üzenetére
Hello,
1. Szeretnék megoldást találni arra, hogy a makró által átalakított, új néven mentendő file nevében benne legyen az aktuális dátum.
vegsonev = filenev & "_" & Format(Date, "yyyy_mm_dd")
Ahogy látod Date függvény kell neked, esetleg formázhatod is a kedvedre.2. Nem értem, hogy a makró rögzítésekor CSV-ként mentett XLS fájl, miért más formátumú a makró későbbi futtatásakor mint a rögzítéskor.
A kód nélkül nem tudunk erre választ adni.3. Hogy lehet megoldani makróval, azonos oszlopkból és naponta változó számú sorból álló, adatokat tartalmazó cellatartomány másolását
Range("A1").CurrentRegion.Copy Destination:=cel
Adj meg egy cellát (pl. A1) a tartományban (üres sorok és oszlopok közötti összefüggő nem-üres cellák halmaza) és CurrentRegion-nal tudod kezelni egyben.Ha van üres sor/oszlop, akkor más technika kell (pl. Range("A"&Rows.Count).End(xlUp).Row)
üdv.
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
Delila_1
Topikgazda
válasz morgusz #19656 üzenetére
1.
Workbooks.Open Filename:="D:\előkészítés+\AVO\Avo " & Format(Date, "hh.nn") & ".xls"2.
Sheets("Eredmény CH").Activate
Range("A1").Select
Selection.CurrentRegion.CopyProgramozó: 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 morgusz #19873 üzenetére
A 2007-es változattól létezik az Adatok | Adateszközök menüben az ismétlődések eltávolítása. Ezzel megoldhatod.
Régebbi verziókban az Adatok | Szűrő | Irányított szűrő menüponttal oldhatod meg.
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 morgusz #27323 üzenetére
Ez könnyen megoldható.
A lapfülön jobb klikk, Kód megjelenítése. Ezzel bejutottál a VB szerkesztőbe. A jobb oldalon lévő nagy üres mezőbe másold be a makrót:Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Target.Offset(, 1) = Date
Application.EnableEvents = True
End SubBezárod az ablakot a szokásos X-szel, és már töltheted is tovább a táblázatodat.
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 morgusz #27362 üzenetére
Óhajod parancs.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 9 Or Target.Column = 13 Or Target.Column = 17 Then
Application.EnableEvents = False
Target.Offset(, 1) = Date
Application.EnableEvents = True
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.
-
poffsoft
addikt
válasz morgusz #28171 üzenetére
Sub proba()
Dim lista() As String
Dim i As Long
Dim usor As Long ' last used row in source sheet
Dim lrow As Long 'last row in this sheet
Dim scol As Long ' first column of actual formulas source
Dim ecol As Long ' last column of actual formulas source
lista = Split("Munka1,Munka2,Munka3,Munka4,Munka5,Munka6,Munka7,Munka8,Munka9", ",")
Worksheets(lista(0)).Activate
For i = 1 To UBound(lista)
usor = Worksheets(lista(i)).UsedRange.Rows.Count
scol = ((i - 1) * 4) + 1
ecol = ((i - 1) * 4) + 3
lrow = Range(Cells(3, scol), Cells(Rows.Count, ecol)).End(xlUp).Row
If lrow < 3 Then lrow = 3
ActiveSheet.Range(Cells(3, scol), Cells(lrow, ecol)).Clear
Selection.Clear
Range(Cells(2, scol), Cells(2, ecol)).Copy Destination:=Range(Cells(3, scol), Cells(usor, ecol))
Next i
End Suba lista=split( után az idézőjelek között vesszővel elválasztva kellenek a munkalapnevek.
Munka1 az összesítő lap neve, a többi pedig a források, ahogyan mondtad, Munka2-től Munka9-ig.[ Szerkesztve ]
[ Szerkesztve ]
-
poffsoft
addikt
válasz morgusz #28171 üzenetére
upsz, kis hiba maradt,
az a selection.clear nem kell a vége felé!Sub proba()
Dim lista() As String
Dim i As Long
Dim usor As Long ' last used row in source sheet
Dim lrow As Long ' last row in this sheet
Dim scol As Long ' first column of actual formulas source
Dim ecol As Long ' last column of actual formulas source
lista = Split("Munka1,Munka2,Munka3,Munka4,Munka5,Munka6,Munka7,Munka8,Munka9", ",")
Worksheets(lista(0)).Activate
For i = 1 To UBound(lista)
usor = Worksheets(lista(i)).UsedRange.Rows.Count
scol = ((i - 1) * 4) + 1
ecol = ((i - 1) * 4) + 3
lrow = Range(Cells(3, scol), Cells(Rows.Count, ecol)).End(xlUp).Row
If lrow < 3 Then lrow = 3
ActiveSheet.Range(Cells(3, scol), Cells(lrow, ecol)).Clear
Range(Cells(2, scol), Cells(2, ecol)).Copy Destination:=Range(Cells(3, scol), Cells(usor, ecol))
Next i
End Sub[ Szerkesztve ]
[ Szerkesztve ]
-
Fferi50
őstag
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.
[ Szerkesztve ]
-
Fferi50
őstag
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.
-
Delila_1
Topikgazda
válasz morgusz #38184 üzenetére
A Const utvonal-nál a saját útvonaladat add meg, ügyelve, hogy az utolsó karakter \ legyen.
Sub Masolas()
Dim usorCel, usorFN, FN, Cel As Worksheet
Const utvonal = "D:\Adatok\Morgusz\" 'Itt add meg a saját útvonaladat
Set Cel = ActiveWorkbook.Sheets("Munka1")
Application.ScreenUpdating = False
ChDir utvonal 'Direktor váltás
FN = Dir(utvonal & "*.xls", vbNormal)
Do
If Left(FN, 3) = "xyz" Then
usorCel = Cel.Range("A" & Rows.Count).End(xlUp).Row + 1 'céllap első üres sora
'Fájlok behívása
Workbooks.Open Filename:=utvonal & FN
usorFN = Sheets("Munka1").Range("A" & Rows.Count).End(xlUp).Row 'alsó sor a megnyitottban
Range("A" & usorFN & ":J" & usorFN).Copy Cel.Range("A" & usorCel)
ActiveWindow.Close False 'megnyitott fájl bezárása módosítás nélkül
End If
FN = Dir()
Loop Until FN = ""
Application.ScreenUpdating = True
MsgBox "Kész van az adatok bemásolása", vbInformation, "Értesítés"
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.
-
Mutt
aktív tag
válasz morgusz #38199 üzenetére
Szia,
Delila megoldása mellett itt egy nem-makrós megoldás, ami Excel 2010 felett műkődik.
Power Query kell hozzá, amit Excel 2010 esetén külön kell installálni.Lépés:
1. Adatok -> Adatok beolvasása -> Fájlból -> Mappából
2. Kiválasztod a mappát ahol a fájlok vannak, OK-t nyomsz és a Szerkesztés gombra kattintasz.
3. Extension oszlopot kijelölöd, majd az Átalakítás fülön Formátum -> Nagybetűs opciót kiválasztod. Ezzel minden kiterjesztést nagybetűre konvertálunk, így ha véletlenül vki .XLS -ként menti el a fájlt, akkor is be fogjuk olvasni.
4. Extension oszlop jobb sarkában található szűrővel kiválasztjuk a .XLS fájlokat.
5. Name oszlop jobb sarkában a szűrővel kiválasztjuk a xyz kezdetű fájlokat (itt is lehet előtte egy nagybetűsítést csinálni).
6. Kijelőlöd az első két oszlopot (Content és Name), majd jobb klikk a fejlécen (ahol látod hogy Content) és További oszlopok eltávolítását választod (ezzel a többi oszlop eltünik, nincs rájuk szükség)
7. A Content oszlop jobb sarkában van két lefelé mutató nyíl (Fájlok kibontása), kattints rá. Ez elkezdi beolvasni a fájlokat, és felhoz egy mint ablakot, ahol válaszd ki a Munka1 lapot és nyomj okét. Dolgozni fog egy kicsit, de az összes fájlod Munka1 lapját be fogja tölteni.
8. Jobb oldalt lesz egy csomó új lépés ennek eredményeként. A gond, hogy a korábban megtartott fájl nevet vhogy vissza kell kapni. A Többi oszlop eltávolítva 1-es lépésnél található fogaskerékre kattitnts és pipáld be a Name-t, hogy újra lássuk a fájlneveket. Ezek után kattints az utolsólépésre, mert innen folytatjuk.
9. Oszlop hozzáadása menüben válaszd az Indexoszlopot.
10. Most régi adósságot törlesszük, adjunk egy értelmes nevet a lekérdezésnek.
Jobb oldalt a Tulajdonságok alatt a Név-ben van vmi (nekem temp, ami a könyvtár neve ahol voltak a fájlok). Adjunk vmi jobb nevet pl. Frissadatok
11. Egy újabb furcsa lépés fog jönni, az eddigi művet lemásoljuk. Bal oldalon a Lekérdezések részben jobb klikk és Megkettőzést válaszd.
12. Lett egy másolatunk, ami aktív is lett. Esetleg nevezzük át (pl. Utolsosorok), mert itt fogjuk megtudni, hogy az egyes fájlokban hol van az utolsó sor.
13. Kezdőlapon Csoportosítási szempontra kattints. Csoportosítani fogunk a fájlnév alapján, Name oszlop, és amit keresünk az Index oszlop maximum értéke. Egy OK után meg is kapjuk a kért dolgokat. Itt végeztünk.
14. Kattintsuk bal oldalt az Adatsorok lekérdezésre, mert most ezzel megyünk tovább.
15. Kezdőlap fülön Összevonás -> Lekérdezések egyesítése jön. Ezzel az a célünk, hogy a korábban már megkapott utolsósorokat ebben a lekérdezésben meg tudjuk találni.
Három részből áll az ablak: fent látjuk az aktuális lekérdezés képét, alatta lévő listában válasszuk ki az Utolsosorok lekérdezést (amit a 13-as lépésben véglegesítettünk). Meg kell mondanunk az Excelnek, hogy mely oszlopok azonossak a két lekérdezésben. A fenti táblában jelöld ki a Name és Index oszlopot (Ctrl-t kell majd nyomnod kattintáskor). Az alsó táblában is jelöld ki a Name és Index oszlopot. Fontos, hogy a fejlécekben látni fogsz egy kis sorszámot 1 és 2 (ez a kijelőlés sorrendje), ezeknek a sorszámoknak egyeznie kell mindkét táblában a helyes műkődésért.
A harmadik dolog amit itt meg kell adnod az pedig a csatlakozás módja, ami nekünk most Belső (csak egyező sorok).
16. Nyomj egy OK-t
17. Végeredményt 3 felesleges oszlop fogja csúfitani, a fájlneve, az utolsósor száma és egy új oszlop amiben Table szöveg van. Ezeket töröljük. Jobb klikk az oszlop nevén és Eltávolítás.
18. Kezdőlap -> Bezárás és betöltés -> .. adott helyre opcióval meg tudod mondani az Excelnek, hogy hova kéred az eredményt.Sok lépés ez, de segítség azoknak akiknek makróírás még távoli.
Legközelebb pedig ha futtatnod kell, akkor az Adatok fülön Az összes frissítése opciót használod, vagy kattintasz a Lekérdezések és kapcsolatok gombra és a megjelenő panelen a Frissadatok lekérdezésen jobb klikk és Frissítés.
üdv
[ Szerkesztve ]
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 morgusz #45579 üzenetére
Szia!
Egy segédoszlop első cellájába írd be az alábbi tömbképletet:=MAX(($A$1:$A$7=$A1)*SOR($A$1:$A$7))=SOR($A1)
$A$7 -ben a 7 helyére írd az utolsó sorod számát.
A tömbképletet Ctrl+Shift + Enterrel kell lezárni és az Excel kapcsos zárójelbe teszi.
A képlet lehúzható a segédoszlopban.
Eredménye IGAZ lesz, ahol az adott cikkszám utolsó előfordulása van, mindenütt máshol pedig HAMIS értéket ad.
Ezután a segédoszlop alapján már tudsz szűrni az IGAZ értékekre.
Üdv. -
zzz012
csendes tag
válasz morgusz #45590 üzenetére
Jön egy megkeresés A-tól mondjuk 2-án 5-én 8-án akkor őt meg kellene jelölni mert teljesül a feltétel, hogy hét napon belül 3-szor volt, többet A-val nem kell foglalkozni az adott évben, de ha mondjuk 2-án 5-én 15-én jön akkor tovább figyelem, mert több mint hét nap telt el az első és az utolsó megkeresés közt, és ha pl 15-én 20-án 21-én van dátum akkor az jó,mert teljesül a hét napon belüli feltétel. Majd jön B, C D...., stb. Nem tudom elég érthetően írtam- e le.
-
Lulu új
lelkes újonc
válasz morgusz #45586 üzenetére
Köszönöm a segítséget!
Az alapbetegségekkel kapcsolatos véleményedet vitatom! Egyes országok a statisztikájukban nem számolják azokat akiknek valamilyen betegségük volt. Pl. ha valakinek COPD betegsége van, ami gyógyíthatatlan, de karban tartható és a Covid 19 hatására a tüdeje összeomik, akkor nem Covid fertőzöttként szerepel a statisztikájukban. Nálunk, meg mindenki aki Covid 19 fertőzött és meghal, az szerepel a statisztikában!
Evés közben jön meg az étvágy: szeretném azt is megállapítani, hogy melyek a leggyakoribb együttesen előforduló betegségek az elhunytaknál. -
ny.janos
tag
válasz morgusz #45992 üzenetére
Előfordulhat (főként külső adatforrásból exportált adatok esetén), hogy olyan nem nyomtatható karaktereket tartalmaznak egyes cellák, amely karakterek nem láthatóak és úgy tűnik, mintha a cella üres lenne, holott valójában nem az. Segítség lehet a KIMETSZ, TISZTÍT és a HELYETTE függvény is.
Kerülő megoldás lehet, hogy szűröd a tartományodat az üresnek tűnő cellákra, majd manuálisan törlöd azokat, hogy valóban üressé váljanak (ez viszont sok adat esetén körülményes lehet).
-
-
Fferi50
őstag
válasz morgusz #48436 üzenetére
Szia!
Íme:Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
If Left(ws.Name, 4) = "alap" Then
With ws.Sort
.SortFields.Clear
.SortFields.Add2 Key:=Range("A1:AP1") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("A1:AP150")
.Header = xlYes
.MatchCase = False
.Orientation = xlLeftToRight
.SortMethod = xlPinYin
.Apply
End With
End If
Next
Az alap - pal kezdődő nevű munkalapokon végrehajtja műveleteket. Nem szükséges minden munkalapot Select-tel kiválasztani - (azt csak a makrórögzítő csinálja).
Üdv. -
karlkani
aktív tag
válasz morgusz #52033 üzenetére
Az ÓRA(MOST()) NEM a pontos időt adja meg, hanem 1900.01.óra* 0:00-t.
* 8 óra elmúlt, az érték 1900.01.08 0:00 (általános formátumban 8).Számoláskor ebből vonja ki, ami az A oszlopban szerepel. Ha a kapott érték 1-nél nagyobb, akkor megjelenik Az adatok nem frissek figyelmeztetés, ellenkező esetben a cella üres.
Új hozzászólás Aktív témák
- Samsung Galaxy S22 és S22+ - a kis vagány meg a bátyja
- Épített vízhűtés (nem kompakt) topic
- Samsung Galaxy S22 Ultra - na, kinél van toll?
- Milyen egeret válasszak?
- Építő/felújító topik
- A vártnál kevesebb iPad Pro fogyhat
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Fejhallgató erősítő és DAC topik
- Politika
- Autós topik látogatók beszélgetős, offolós topikja
- További aktív témák...
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen