- Jobb zoom, egyszerűbb kijelző - megérkezett a Sony Xperia 1 VI
- Netfone
- Samsung Galaxy S23 Ultra - non plus ultra
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Apple iPhone 15 - a bevált módszer
- Ezek a OnePlus 12 és 12R európai árai
- Motorola Edge 30 Neo - wake up, Jr...
- Samsung Galaxy A33 5G - a három az majdnem öt
- iPhone topik
- Huawei Mate 20 Pro - a mindenit!
Hirdetés
-
AMD Radeon undervolt/overclock
lo Minden egy hideg, téli estén kezdődött, mikor rájöttem, hogy már kicsit kevés az RTX2060...
-
One UI 6.1 frissítésekkel túlórázik a Samsung
ma Középkategóriás telefon és ütésálló tablet is részesült belőle a hétvége előtt.
-
A tüntetések ellenére is bővítheti német gyárát a Tesla
it Hiába a nagy tüntetések, a helyi önkormányzat rábólintott a Tesla német gyárbővítésére.
-
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
-
Fferi50
őstag
Szia!
Elnavigálsz abba a könyvtárba, ahol a fájljaid vannak.
Elindítod az excelt, ami egy új munkafüzettel indít.
Ide összemásolhatod a fájlokat.
Ezután Alt+F11 lenyomásával átmész a VBA project ablakba.
A menüből kiválasztod az insert, azon belül pedig a module pontot.
A megnyilt modullapra bemásolod az alábbi kódot:
Sub osszerako()
Dim hova As Worksheet, fajlneve As String, usor As Long, xx As Integer
Set hova = ActiveSheet
fajlneve = Dir("*.xls*")
Application.EnableEvents = False
Applicaton.ScreenUpdating=False
Do While fajlneve <> ""
xx = xx + 1
usor = hova.UsedRange.Rows.Count + 1: If usor = 2 Then usor = 1
Workbooks.Open Filename:=fajlneve, ReadOnly:=True
ActiveSheet.UsedRange.Copy Destination:=hova.Cells(usor, 1)
ActiveWorkbook.Close False
fajlneve = Dir()
If xx Mod 10 = 0 Then Application.StatusBar = "Másolva: " & xx & "db fájl!"
Loop
Application.EnableEvents = True
Application.ScreenUpdating=True
Application.StatusBar = False
MsgBox "A másolásnak vége, kérem, mentse el a fájlt!", vbInformation, "Fájlok összemásolása"
End SubVisszamész az excel munkalapra (Alt+F11 ismét).
Ezután menü - nézet- makrók megjelenítése. Megjelenik a listában az osszerako. Inditás.
Alul a státusz soron fogod látni a begyűjtött fájlok számát, tizesével nőve.Ha végzett, kapsz egy üzenetet.
Ezután mentés másként művelettel nevezd el a fájlodat, a mentés után bezárhatod.Remélem, sikerülni fog.
Üdv.
-
Fferi50
őstag
Szia!
Az alábbi kis makrórészletet légy szíves betenni a dim sor után:
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = CurDir()
If .Show Then
ChDir (.SelectedItems(1))
Else
MsgBox "Nem választottál, kilépek a programból!", vbCritical :Exit Sub
End If
End WithÍgy amikor elindítod a programot, kiválaszthatod, hogy melyik könyvtár adatait rakja össze (ez talán jobb is, mintha kívülről navigálnál, mert ez biztosan oda visz, ahova szeretnéd).
Ha nem válaszottál könyvtárat, akkor nem megy tovább.Üdv.
-
Fferi50
őstag
válasz pirit28 #24897 üzenetére
Szia!
Bocs a hosszú hallgatás miatt! Remélem, még aktuális. Próbáld meg ezt:
Sub okesit()
Do
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = CurDir()
If .Show Then
okesito .SelectedItems(1), True
Else
If MsgBox("Nem választottál, befejezed?", vbYesNo, "Könyvtár választás") = vbYes Then Exit Sub
End If
End With
Loop
End Sub
Sub okesito(ByVal konyvtar As String, ByVal alkonyvtaris As Boolean)
Dim fs, fldr, subfldr, fld, fajl As String
Set fs = CreateObject("Scripting.FilesystemObject")
Set fldr = fs.GetFolder(konyvtar)
fajl = Dir(fldr & "\*.xls*")
Do While fajl <> ""
Workbooks.OpenText Filename:=fldr & "\" & fajl
ActiveWorkbook.SaveAs Filename:=Replace(ActiveWorkbook.FullName, ".xls", "ok.xls")
'MsgBox fajl
fajl = Dir()
Loop
If alkonyvtaris Then
Set subfldr = fldr.subfolders
For Each fld In subfldr
fajl = Dir(fld & "\*.xls*")
Do While fajl <> ""
Workbooks.OpenText Filename:=fld & "\" & fajl
ActiveWorkbook.SaveAs Filename:=Replace(ActiveWorkbook.FullName, ".xls", "ok.xls")
'MsgBox fajl
fajl = Dir()
Loop
Next
End If
End SubAz okesit makrót kell elindítani, ott ki tudod választani azt a könyvtárat, amelyben (és alkönyvtáraiban) végre szeretnéd hajtani a műveletet.
Ha a kiválasztott könyvtárban elvégzi a műveletet, akkor visszatér a választó ablak.
A makróból úgy léphetsz ki, hogy a mégse gombot választod, vagy esc-t nyomsz és a kérdésre igent válaszolsz.
Az előrehaladásra nem tettem bele információ kijelzést, a státuszsoron esetleg kiírathatod pl. a kikommentelt msgbox helyére, Application.StatusBar = fajl
akkor a végére pedig Application.StatusBar=FalseÜdv.
-
Fferi50
őstag
Szia!
Ezt nevezik szívásnak....
Ha hálózaton dolgoztok, akkor megoldás lehet, hogy felteszed egy központi helyre a fájlt, ott megadod az excelnek a szükséges beállításokat. Ezek után pedig csak az itteni excelt elindítva lehessen használni.Mivel nem indulhat el a makró, így nem tudod kikényszeríteni sem a bezárást, sem a makró indulást.
Még egy olyan ötletem van, hogy egy adott cellába beírsz egy képletet, ami egy másik cella állapotát figyeli és attól függően feltételes formázással figyelmezteted a felhasználót, hogy ez így nem lesz jó.Pld.
A1 cella képlete =ha(A2<>1;"Nincsenek bekapcsolva a makrók, hibás adatokat fogsz elmenteni, kérlek, lépj ki mentés nélkül!";"Minden OK")
A1 cella feltételes formázása képlettel, =$A$2=0, kitöltés vörös
A2 cellába pedig a Workbook_Open eseményben legelső dolgod, hogy beleírod az 1-et, a Workbook_BeforeClose eseményben pedig átírod 0 értékre.Persze ez nyilván nem garantálja, hogy bárki is ennek megfelelően cselekszik. Arra egyelőre nincs tippem, hogyan nézhető meg, hogy valaki "makróhasználat nélkül" írta felül a fájlt.
Üdv.
-
-
Fferi50
őstag
válasz KaliJoe #24978 üzenetére
Szia!
A userformon nem hatásos az application.enableevent=false.
Ott csak trükkösen lehet megkerülni az eseménylefutást. Egy form szintű változót kinevezel eseményvezérlőnek, ha ez true, akkor fusson le az esemény, ha false akkor ne fusson le. Minde eseménykezelésnél ennek a változónak a vizsgálatával kezded a projektet.DE: Javaslom még mindig, hogy Textbox_KeyDown eseményt nézd meg, itt a keycode megmondja, hogy melyik billentyűt nyomták le.
A backspace keycodja a vbKeyBack vba konstans,ami numerikusan 8.A billentyűk Keycode megfeleltetését a help Keycode Constants cimszava alatt találod.
Private Sub object_KeyDown( ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As fmShiftState)
if KeyCode=vbKeyBack then
ide írod amit szeretnél csinálni ha BackSpace-t nyomtak.
endif
KeyCode=0
end subAz utolsó sor, a KeyCode=0 a lényeg, ezzel eliminálod a billentyű leütést! Minden olyan esetben kell, ha nem akarod, hogy a leütött billentyű hatása érvényesüljön!
(Pl. te beírod a textboxba a leütött betűt, vagy lecsökkented a hosszát, akkor már nem szabad, hogy a rendszer is megcsinálja ugyanazt!)
Ha meg kell, hogy csinálja a rendszer, akkor ezt a sort elhagyod.Hidd el, ez a legegyszerűbb megoldás a billentyűzet figyelésre. A change az macerás. Rengeteg hasznos info van a Help-ben. (A szokásostól eltérően.)
Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
válasz KaliJoe #24980 üzenetére
Szia!
Milyen excel verziód van?
Igen, sajnos a KeyAscii nem azonos a KeyCode - értékével - ezt valahol írtam is az előbb.Ez alapján viszont:
"
KeyPress EventOccurs when the user presses an ANSI key.
Syntax
Private Sub object_KeyPress( ByVal KeyANSI As MSForms.ReturnInteger)
The KeyPress event syntax has these parts:
Part Description
object Required. A valid object.
KeyANSI Required. An integer value that represents a standard numeric ANSI key code.Remarks
The KeyPress event occurs when the user presses a key that produces a typeable character (an ANSI key) on a running form while the form or a control on it has the focus. The event can occur either before or after the key is released. This event also occurs if you send an ANSI keystroke to a form or control using either the SendKeys action in a macro or the SendKeys Statement in Visual Basic.
A KeyPress event can occur when any of the following keys are pressed:
Any printable keyboard character.
CTRL combined with a character from the standard alphabet.
CTRL combined with any special character.
BACKSPACE.
ESC.A KeyPress event does not occur under the following conditions:
Pressing TAB.
Pressing ENTER.
Pressing an arrow key.
When a keystroke causes the focus to move from one control to another.Note
BACKSPACE is part of the ANSI character set, but DELETE is not. Deleting a character in a control using BACKSPACE causes a KeyPress event; deleting a character using DELETE doesn't.When a user holds down a key that produces an ANSI keycode, the KeyDown and KeyPress events alternate repeatedly. When the user releases the key, the KeyUp event occurs. The form or control with the focus receives all keystrokes. A form can have the focus only if it has no controls, or if all its visible controls are disabled.
The default action for the KeyPress event is to process the event code that corresponds to the key that was pressed. KeyANSI indicates the ANSI character that corresponds to the pressed key or key combination. The KeyPress event interprets the uppercase and lowercase of each character as separate key codes and, therefore, as two separate characters.
To respond to the physical state of the keyboard, or to handle keystrokes not recognized by the KeyPress event, such as function keys, navigation keys, and any combinations of these with keyboard modifiers (ALT, SHIFT, or CTRL), use the KeyDown and KeyUp event procedures.
"
Lehetséges, hogy mégis a KeyPress eseményhez kell menekülnöd, ezt tudja a backspace-t érzékelni.
A Backspace ansi kódja is 8.Próbáld ezt az eseményt úgy, ahogyan az előbb a másikra írtam.
Üdv.
Ps:A change esemény kezelésbe most nem mennék bele, mert nincs annyi időm jelenleg. De ígérem, ha egy kicsit szabadulok - visszatérek még rá.
-
Fferi50
őstag
válasz KaliJoe #24982 üzenetére
Szia!
Nagyjából úgy kell kezelned, mint az application.enableevents kapcsolót. Hiszen azt is ki-be kapcsolgatod.
A userformban definiálsz az első sorok előtt pl. egy changetextbox_name boolean változót.
A textbox_name_change eseményben pedig először azt nézed meg, hogy ez true. Ha igen, mehet tovább, ha nem, akkor kilép.
Amikor olyan utasítást adsz ki, amelyik megváltoztatja a textbox értékét, akkor eldöntöd, hogy fusson-e le a chage esemény és az utasítás előtt megváltoztatod a changetextbox_name értékét ennek megfelelően.
De ugyanez igaz akkor is, ha magában az eseménykezelésben változtatod a textbox értékét, mert az képes rekurzívan meghívni magát... Tehát a változtatás előtt change... false. Ezáltal nem fog tovább menni.
Az eljárás végén pedig chage...true és akkor a következő változtatásnál belemegy az eljárásba.Remélem érthető.
Üdv.
-
Fferi50
őstag
válasz MrCsiT #24989 üzenetére
Szia!
Ezt a képletet próbáld meg légy szíves:
Pl. C1 cellába: =darabteli(B:B;"*"& A1 & "*")
Ez minden olyan cellát összeszámol a B oszlopban, ahol az A1 cellában levő szöveg bármely helyen előfordul.
Hátránya persze, hogy Anna esetében a Panna neveket is bele fogja számolni, így azok darabszámát ki kell vonni (ha van ilyen résznév az egészben eset).Üdv.
-
Fferi50
őstag
válasz Mindless #24998 üzenetére
Szia!
Az előző sor formuláit így írhatod át értékre:
.offset(-1,0).entirerow.value=.offset(-1,0).entirerow.value
Ha egy meghatározott tartomány értékét szeretnéd felülírni, akkor pedig
range(.offset(-1,-4),.offset(-1,5).value=range(.offset(-1,-4),.offset(-1,5).value
Az előző sor 10 celláját írja felül az értékével.
Megjegyzem, hogy ez a módszer csak összefüggő tartományon működik.Üdv.
-
Fferi50
őstag
válasz Mindless #25040 üzenetére
Szia!
Próbáld ezt.
Sub hasonlito()
Dim sh1 As Worksheet, sh2 As Worksheet, cl As Range, vane
Set sh1 = Sheets("Munka1")
Set sh2 = Sheets("Munka2")
For Each cl In sh1.Range("O:O").Cells
If IsEmpty(cl) Then Exit For
vane = Application.Match(cl.Value, sh2.Columns("O"), 0)
If IsError(vane) Then
vane = sh2.Range("O30000").End(xlUp).Row: If Not IsEmpty(sh2.Cells(vane, "O")) Then vane = vane + 1
End If
sh1.Rows(cl.Row).Copy sh2.Rows(vane)
Next
MsgBox "Vége a programnak", vbInformation
End SubTermészetesen a Munka1 és Munka2 helyére a saját munkalapjaid nevét írd.
A makró a Munka1 munkalapról másolja át az adatokat a Munka2 munkalapra.
Ha van az O oszlopban olyan érték, akkor oda, ha nincs, akkor a Munka2 végére az egész sort.Remélem, ilyesmire gondoltál.
Üdv.
-
Fferi50
őstag
válasz nebulo0128 #25042 üzenetére
Szia!
Két külön excel futásakor csak értéket tudsz beilleszteni, a két külön excel példány független egymástól, nem tudja az egyik, mit csinál a másik.
A két munkafüzetet azonos excel alatt kell megnyitnod, akkor tudsz "normál módon" másolni bele. A nézet ablakváltással tudsz egyik excel munkafüzetből a másikba átmenni.Üdv.
-
Fferi50
őstag
válasz komyka #25068 üzenetére
Szia!
Ha a listában nincs ismétlődő termékszám, akkor az fkeres beágyazva és kombinálva a hahiba függvénnyel műxik.
=hahiba(fkeres($A1;elsőtábla!$B:$B;1;0);hahiba(fkeres($A1;másodiktábla!$B:$B;1;0);hahiba(fkeres($A1;harmadiktábla!$B:$B;1;0);$B1)))
Ezt a képletet a C oszlopban, vagy ha az foglalt, akkor az adatok utáni oszlopba tedd. Esetleg átmenetileg beszúrhatsz egy oszlopot a B után.
A képlet eredményét pedig értékként beilleszted először vissza a C oszlopba, utána pedig a B oszlopra.Ha nincs hahiba függvényed, akkor a ha és a hibás függvények kellenek hozzá.
Üdv.
-
Fferi50
őstag
válasz Polllen #25069 üzenetére
Szia!
Írd így:
"=VLOOKUP(RC[-9],'[" & valtozo & "]Shortage'!C1:C10,10,0)"A valtozo szöveges változó (string) tartalmazza a fájl nevét - ha teljes elérési útvonalat is kell megadni, akkor viszont:
"=VLOOKUP(RC[-9],'" & utvonal & "[" & valtozo & "]Shortage'!C1:C10,10,0)"Az utvonal tartalmazza az elérési utat, a végén backslash van.
Üdv.
[ Szerkesztve ]
-
-
Fferi50
őstag
válasz tgumis #25084 üzenetére
Szia!
Persze, mert 1 hónapon túl van a különbség. Ha beírod még előre a hh "hónap" kifejezést is a formátumba, akkor mutatni fogja, hogy hány egész hónap van benne.
Egyébként pedig el kell kezdeni számolgatni, és akkor nem cellaformátummal, hanem számként használva a dátumot képlettel kell megadni.
pl. = int(A1-A2) & nap &( (A1-A2)-int(A1-A2))*24 & "óra"
A perceket és a másodperceket ugyanígy osztással kell továbbszámolni.Ne feledd az excelben a dátum is számformátum. Az egész rész jelenti a napot, a törtrész pedig az időt - 24 órából áll egy nap, tehát 12 óra az 0,5 napnak számít.
Remélem, tudod hasznosítani.
Üdv.
-
Fferi50
őstag
Szia!
Ezt a sort így :=HA(valami = 0;"nincs kitöltve";valami) a VBA és az excel szövegként értelmezi.
Ha így szeretnéd beírni, akkor a formulalocal tulajdonságot kell használnod - de ez nagyon "röghözköti" a programot.
VBA-ban az international - azaz angol - függvény megnevezéseket célszerű használni, tehát
amit.formula="=IF(valami = 0;"nincs kitöltve";valami)"Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
válasz KaliJoe #25126 üzenetére
Szia!
A konstansnak (állandónak) pont az a lényege, hogy egyszer definiálod "direkt" módon az értékét és az soha de soha nem változhat meg a programban. Ezért nem lehet semmilyen változó tartalomhoz kötni a meghatározását, mert akkor már a konstans jelleg nem áll fenn. A makróba be kell "égetni" az értéket, csak úgy tudod változtatni, ha átírod a makróban ezt az értéket.
Ha tehát cella értékből akarod kivenni a "konstans" értékét, akkor azt csak változóba teheted bele, de ez a változó természetesen lehet az egész programra érvényes Global, vagy Public is és elég a program indulásakor értéket adni neki, többet nem kell vele foglalkoznod.
Nézz rá helpben a változók deklarálására.
Üdv.
-
Fferi50
őstag
válasz KaliJoe #25120 üzenetére
Szia!
Próbáld a következőt:
If activewindow.SelectedSheets("wsh_Ürlap").printpreview=true then
műveletek
endif
Ugyanis így adod meg a konkrét munkalapot.Ha több munkalap is ki van választva, akkor pedig
For each wsh in activewindow.selectedsheets
if wsh.printpreview=true then
műveletek
endif
next
Ezzel végigmész az összes munkalapon és megnézheted, hogy ki lett-e nyomtatva.Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
válasz Polllen #25132 üzenetére
Szia!
Akkor lenne igazad, ha csak egy munkalapot tartalmazhatna, de ez nem így van. (Az activesheet az egy darab munkalap, az activeworkbook szintén egy darab munkafüzet -- kiválasztott (selected) viszont több is lehet.)
A selectedsheets egy gyűjtemény, magában foglalja az összes kiválasztott munkalapot.
Idézet a help-ből:
"Window.SelectedSheets Property
Returns a Sheets collection that represents all the selected sheets in the specified window. Read-only."
Ha a művelet eredményét nem szeretnénk viszontlátni, akkor nem kell a konkrét munkalapot megnevezni, szép sorban megmutatja az összes kijelöltet.
De ha szükség van a nyomtatás megtörténtének információjára, akkor már konkrét munkalapra kell hivatkozni - hiszen lehet, hogy egyik munkalapot kinyomtatod, másokat pedig nem, akkor most mi legyen a logikai változó eredménye??Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
Szia!
Hát persze hogy nem: =Kerekítés(Szum(E4:D4);-1)
(ha nem akarod, hogy ilyen szuper jelek jelenjenek meg, használd a programkód gombot)
A kerekítés második paramétere határozza meg, hogy hány számjegyre kerekítsen. A -1 azt jelenti, hogy tizesre kerekít a magyar szabályok szerint.
Üdv.
-
-
Fferi50
őstag
válasz bteebi #25180 üzenetére
Szia!
Egyrészt, ha eseménykezelést végzel, akkor ki kell kapcsolni az eseményeket:
Application.EnableEvents=False
majd a végén visszakapcsolod:
Application.EnableEvents=True
Ha nem így teszel, akkor jó esetben csak meghosszabodik a program futása, rossz esetben más cellákat is átír, nem csak azokat, amelyeket szeretnéd.Továbbá van két képlet benne, ami formailag ugyan helyes (nem kiabál érte a fordító), de teljesen blőd eredményt ad, rossz helyre került a záró zárójel:
If Sheets("proba").Cells(sor - 72, 5) < Sheets("proba").Range("S130") Or WorksheetFunction.IsNumber(Sheets("proba").Cells(sor - 72, 5)) = True
A Te kódodban a True után volt a zárójel, az előréb kell hozni az egyenlőség jel elé, ahogyan itt is látod.
Ugyanez van az oszlopos vizsgálatánál is, ott is az egyenlőség jel után kell a zárójel és nem a False után.
Üdv.
-
Fferi50
őstag
válasz katka84 #25194 üzenetére
Szia!
Nem feltétlenül kell makró hozzá, de a Visual Basic nézetben (Alt+F11) tudod megcsinálni. Keresd meg az immediate ablakot (ha nem látod akkor Ctrl+G). Ebbe az ablakba írd be:
Sheets("Munkalapneve").visible =xlSheetVeryHiddenEnnek az a hatása, hogy mások elől abszolute rejtve marad a munkalap, nem jön elő a jobb egérgombos rákattintásnál levő listában sem.
Viszont Te sem látod, Ahhoz, hogy dolgozni tudj vele, ezt a sort kell ugyanide beírni:
Sheets("Munkalapneve").visible=xlSheetVisibleTermészetesen a két fenti sor elhelyezhető makróban is (pl. a munkafüzet megnyitásakor vagy bezárásakor lefutó makróban), vagy csak külön is, amit akkor indítasz el, amikor szükséged van rá.
(A Sheets("Munkalapneve") helyett írhatod az activesheet kifejezést is az elrejtős sorba - ekkor mindig az éppen aktív munkalapot rejti el.
Visszafelé ez ugye nem működik, hiszen a rejtett munkalap nem lesz aktív láthatóan.)Üdv.
-
Fferi50
őstag
Szia!
Szerintem vagy Te bonyolítod túl a kérdést, vagy én nem értettem meg.
Javaslat:
Excel verziótól függően:adatok - irányított vagy speciális szűrés, a megjelenő párbeszéd panelen kijelölöd az adott oszlopot - bejelölöd, hogy más helyre másolás, szűrőtartomány az oszlop fejléce (remélem van neki, ha nincs adni kell). Hova másolja helyre beírod azt az 1 cellát, ahol szeretnéd, hogy kezdődjenek az adatok, majd bejelölöd a csak az egyedi rekordok megjelenítése. Ezután OK. A kívánt helyen megjelenik az a pár egyedi tétel, ami az adott oszlopban van.A beviteli mező adatérvényesítésénél pedig beírod a listához ennek tartománynak a címét.
Ha mindezt lerögzítetted egy makróban, máris megvan az alapod. Hozzárendeled egy billentyűhöz és ha szükséges, akkor lefuttatod ismét.
Remélem, jól értettem a feladatot (vagy legalább az irányt....)
Üdv.
-
Fferi50
őstag
Szia!
1. Milyen excel verziód van?
2. Nem hiszem, hogy egy nyúlfarknyi makró miatt összeomlana bármelyik is - a sok-sok képlet annál inkább zabálja a memóriát és lassítja a betöltődést is (de ez már nyilván adottság).
3. Egy gombra kattintást talán még egy vezető is meg tud tenni.
4. Ha mégis problémásnak gondolod, akkor lehet a frissítést megnyitáskor automatikusan megoldani, verzió függő, hogy hova kell a makrót tenni - ekkor a vezetőnek csak az a dolga, hogy kiválasztja a neki tetsző tételt a listából. (És még az is megoldható, hogy csak akkor frissítsen, ha aznap még nem volt frissítve - jó ez egy kissé macerás is lehet, ha mindenki aki használja, rá is ment.)5. Azért írom külön, mert ez sem mindegy: minden vezető "saját különbejáratú fájlt" használ, vagy egy van közös használatban, vagy egy van, de egyszerre csak egyvalaki használhatja, vagy egy van és azt csak olvasási joggal lehet használni.
Ez utóbbi pont azért fontos, mert nem mindegy a makrós megoldás miatt sem és a használat normalizálása miatt sem.
Üdv.
-
Fferi50
őstag
válasz marcyman #25222 üzenetére
Szia!
Most komolyan, kipróbáltad már az átlaghatöbb függvényt:
D2 képlete: =átlaghatöbb(C:C;B:B;B2;A:A;A2)Ezt pedig végighúzod a D oszlopon. Már csak az a fontos, hogy az A oszlopban a dátumok egyforma módon legyenek beírva (nem a cellaformázásra gondoltam, hanem dátumként, illetve esetleg végig szövegként).
Üdv.
-
Fferi50
őstag
válasz wolfman #25233 üzenetére
Szia!
A kép alapján ez egy részösszegezést tartalmazó táblázat - amiről "eltüntették" a szokásos szintjelző gombokat -.
Próbáld meg az adatok - részösszeg menüpontban az összes eltávolítása parancsgombot kiválasztani a megjelenő párbeszédpanelen.
Ha ez sikerült, ott marad - remélhetőleg - egy tovább már rendesen értelmezhető és használható adatállomány.Viszont az is lehet, hogy csak értéket és formázást megtartva másolták le az eredeti táblát - akkor érdemes lenne esetleg megkérni az eredeti táblát, ha lehet.
Ebből a formából elég macerás visszavadászni a "normál" adatokat.Megpróbálhatod, hogy az A oszlopban levő adatokkal kitöltöd a felettük levő üres sorokat.
Az E oszlopban levő SUMMA tartalmú sorokat szívfájdalom nélkül törölheted, mert az a felette levő információ összegzése, tehát a törlésével nem vesztesz semmit.
Az A oszlop kitöltése után az abban levő SUMMA tartalmú sorok is törölhetők.
Ezután már szerintem "normálisan kezelhető adataid lesznek.Gyanús viszont az állapotsorban levő Körkörös hivatkozás hibaüzenet, ami persze lehet, hogy nem is erre a munkalapra vonatkozik.
Üdv.
-
Fferi50
őstag
Szia!
A frissítésre javaslom az application.ontime metódust.
Amikor a munkafüzetet megnyitod lefuttad az "időzítő programot" ami a következő:
Sub idozito()
kovetkezo=now +timeserial(0,10,0)
application.ontime kovetkezo, "frissito"
range("A1").value=kovetkezo 'ezt a cellát választhatod, melyik legyen, ami nem zavar sehol.
end subsub frissito()
[M](C)ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources(/C)[/M]
end sub
Amikor bezár a munkafüzet, akkor ki kell kapcsolni az időzítőt (ezért kell eltárolni a következő frissítés időpontját, mert egyébként nem tudod helyesen meghivatkozni:
Sub idozitoki
kovetkezo=range("A1").value
if timevalue(kovetkezo) >Time then
application.ontime kovetkezo,"frissito",,False 'a False előtt két vessző van.
end if
end subRemélem, segít.
Üdv
[ Szerkesztve ]
-
Fferi50
őstag
válasz wolfman #25240 üzenetére
Köszi, ezzel csak annyit ellenőriztem, hogy - sajnos - valóban csak részösszegzett értékeket tartalmazó táblát adták oda nektek (ami azért valljuk be, elég pórias).
Sajnos nem látok jobb megoldást arra, hogy ne vesszenek el az A oszlopban levő "kulcsaid", mint az üres sorok kitöltése.
Talán próbáld meg a következő kis makrót:
Sub kitolti()
For xx = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(xx, 1).Value = "" Then Cells(xx, 1).Value = Cells(xx - 1, 1).Value
Next
End SubEz kitölti az A oszlop üres celláit az előtte levő cella értékével.
Utána használhatod az előzőekben írt módszeremet, a summa sorok eltávolítását (csak 2 szűrő, egy az E oszlopon, egy az A oszlopon - tartalmazza summa-, ami a szűrő fennmarad sor, törölhető), lehet két menet, de azért az elég gyors.
Üdv.
-
Fferi50
őstag
Szia!
Szerintem az Átlaghatöbb függvény tekintetében félreértés keletkezett. Az átlagolandó érték egy tartomány lehet (az első paraméter), a többi paraméter párban a feltétel tartománya és az ott érvényesítendő feltétel értéke. Ráadásul a feltétel tartomány mérete meg kell egyezzen az átlagolandó értéket tartalmazó tartomány mértékével. Viszont több feltételt is lehet érvényesíteni egyidejűleg - olyat is, ami nem az átlagolandó értékre vonatkozik, hanem annak egy jellemzőjére egy külön oszlopban.
A képről azt látom, hogy az első paraméter után is írtál feltételt, azt sajnos itt így nem lehet.
(És nem lehet több átlagolandó tartomány sem...)Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
válasz Gyufaaa #25264 üzenetére
Szia!
A legördülő listád forrásában megkeresed fkeres függvénnyel.
Képlet b1-re =fkeres(a1;lista;1;0), ha a1 a kiválasztó cella, a lista helyére írd a tényleges címét (pl. Z1:Z20, vagy ha névvel van, akkor a nevet).
Ez viszont változik, ha változtatod az a1 cella értékét - ha ezt nem szeretnéd, akkor marad a makró.Üdv.
-
Fferi50
őstag
válasz DasBoot #25265 üzenetére
Szia!
Dec2Bin csak 10 számjegyig jó. E fölött be kell vetned az általános iskolában tanult ötletet - maradékos osztással megkeresed a számjegyeket és egymás mellé írod egy szövegben.
Azaz kiindulsz az adott számból: A1 cella. Mellé írod (B1 cella) a = maradék(A1;2) képletet. Alá pedig az int(A1/2) képletet, ezt végighúzod az oszlopokon addig, hogy az osztás eredménye 1 legyen.
Ezután a B oszlop eredményét visszafelé haladva összefűzöd.Persze makróval ez gyorsabb.
Üdv.
-
Fferi50
őstag
válasz Gyufaaa #25270 üzenetére
Szia!
Ha esetleg megpróbálnád behelyettesíteni a Te celláidat az általam írt általános javaslatba:
"Képlet b1-re =fkeres(a1;lista;1;0), ha a1 a kiválasztó cella, a lista helyére írd a tényleges címét (pl. Z1:Z20, vagy ha névvel van, akkor a nevet)."
Nálad a lista a C5:C9 ben van, a hozzátartozó értékek pedig a D5:D9-ben.
A kiválasztó celláid az F4:F7, adatcelláid a G4:G7
Ez alapján a módosított képlet a G4-re: =fkeres(F4;$C$5:$D$9;2;0)
Ezt pedig lehúzhatod a G7-ig.Az egyetlen kis módosítás, hogy az Fkeres tartomány 2 oszlopos és a második oszlopban kell keresnil.
Üdv.
ÉS BOCS Fire.
[ Szerkesztve ]
Új hozzászólás Aktív témák
- Bitdefender Total Security 3év/3eszköz! - "Tökéletes védelem most kedvező áron..."
- Lemezes Retro PC Játékok
- AKCIÓ! - STEAM kulcsok / Punch Club, Oddworld: Soulstorm, Children of Morta, stb. - 2024.05.16.
- Eredeti Windows, telepítéssel! Digital Doctor Számítógép Szerviz
- Adobe Creative Cloud - 2024. 04. 05 - 2025. 04. 05-ig
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen
Cég: Alpha Laptopszerviz Kft.
Város: Pécs