-
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
-
wwhy
veterán
Ilyen, amikor egy bölcsész (én) ekszcelül fogalmaz
Semmit nem kell kiszámolni, egyszerűen át kell vinni a sofőr által beírt legnagyobb értéket.
Azaz ha ABCD123 egy nap megtett 3 utat, 10, 20 és 30 km-el, akkor azokat beírja az útjai végén, és csak a 30 km kell szerepeljen az én listámban.
És ugyanígy, XYZ123, megtesz napi 4 utat - 5, 10 ,15, 20 km - , akkor ahhoz a rendszámhoz nekem a 20 km-t kell beírni.Tehát a napi elszámolás listában meg kell keresni az adott rendszámhoz tartozó legnagyobb értéket, és azt változatlanul beíratni az autólistába
Fferi50: nagyon köszönöm!
Köszönöm a türelmeteket
[ Szerkesztve ]
ELADÓ <<Dell 7440 laptop>><<Újszerű, garis>><<i5-1345U, 16GB RAM, 256GB vagy 1TB SSD>>
-
Fferi50
Topikgazda
Szia!
Talán megpróbálhatnád az alábbi lépéseket:
1. Az első sorban, vagy ha az foglalt a fejléceknek, akkor az adatok utáni sorban számozd be az oszlopokat 1 -től a végéig.
2. A következő sorban számozd be azokat az oszlopokat, amelyekkel számolni szeretnél. Én az első oszlopot otthagynám.
3. Az adatokat kijelölni - az eredmény oszlopot kihagyva természetesen
4. Adatok - rendezés - irány balról jobbra - utolsó sor szerint
5. A rendezés után egymás mellé kerülnek a kívánt oszlopok, így alkalmazható a DARABTELI függvény.
6.FONTOS! Az eredmény oszlopot kijelölöd - másolás - irányított beillesztés értékként
7. Adatok - rendezés - balról jobbra - utolsó előtti sor szerint (ami az eredeti sorrendet tartalmazza).
Ezzel kész a feladat.
Így néz ki a képletezésre előkészített táblázat:
Megcsinálni gyorsabb, mint az egészet elolvasni!
Üdv. -
Mutt
senior tag
Hali,
INDEX-el tudsz oszlopokat válogatni: a harmadik paraméter az oszlop választó és ha kapcsos zárójelben felsorolod, hogy a tartomány mely oszlopára van szükséged, akkor csak azok jelennek meg.
Angol nyelvű Excelben pontosvesszővel, magyarban backslash ("\") az oszlop elválasztó.
Ezek után szövegösszefűzéssel 1 cellába kiírattam az eredményt és azon megszámoltam az A-betüket.
Az egészet 1 lépésben is meg lehet csinálni ha nem kell a köztes eredmény. Microsoft365 esetén a LET függvénnyel még egyszerűsíteni is lehet:
Magyarul a képletek:
=SZÖVEGÖSSZEFŰZÉS("";IGAZ;INDEX(B2:L2;;{1\6\11}))
=HOSSZ(M2)-HOSSZ(HELYETTE(M2;"A";""))Ha Microsoft365-ön vagy akkor sima enter, korábbi változatokhoz Control-Shif-Enter kell az első képleten.
üdv
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
Mutt
senior tag
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
ny.janos
tag
Legfeljebb még nem, mert eddig nem használtad. Ha több problémát is sikerül megoldani vele (SZORZATÖSSZEG), akkor a megoldások keresése során elkezd vele egyre gyakrabban szemezgetni az ember (én legalábbis így vagyok vele).
Ha van kedved hozzá, akkor rákereshetsz a fórumban a függvény nevére, érdekes megoldásokra lehet bukkanni a használatával. -
ny.janos
tag
Szia!
Tömbképlettel pl. szorzatösszeg függvénnyel, de nem bonyolítanám ezzel. Inkább szumha függvényt használnék, vagy kimutatást. De PowerQuery-vel is megoldható.
#Szerk: közben rájöttem, hogy félreértelmeztem, hogy mit szeretnél. De PQ az általad kértekre is megfelelő lehet.
[ Szerkesztve ]
-
föccer
nagyúr
Használd inkább a SZŰRŐ függvényt. A befoglalásba az ellenőrzött oszlopot kell beadni.
Építésztechnikus. Építőmérnök. Ingatlan adás-vétel vevő oldali támogatása. Mérnök tanácsadás, felújításhoz, átépítéshez. Excel feladatok megoldása. Lézergravírozás. Mindent IS csinálok: www.jatekosfejlodes.hu
-
Fferi50
Topikgazda
Szia!
"mögé szeretnék még írni valamit, ami mindig változik és egy adott cellában van."
Szerintem munkalapon ilyet nem lehet csinálni. Viszont az egyéni formázásban a számok elé - mögé írhatsz szöveget, amit utána formátum másolással át tudsz vinni bárhová.
Pl. 0,00utas formátum minden beírt szám után odaírja az utas szöveget. Tehát megcsinálod a kívánt egyéni formátumokat és azokat alkalmazod a megfelelő cellákra.
Üdv. -
sztanozs
veterán
VBA-val kell egy Split makró, ami megcsinálja:
Public Function SPLITTEXT(Text, Optional Separator = "") As Variant
If Separator <> "" Then
SPLITTEXT = Split(Text, Separator)
Else
SPLITTEXT = Split(Text)
End If
End FunctionUtána a következő worksheet függvénnyel lehet sorokba szétszedni:
=TRANSPOSE(SPLIT(A1, ","))
Office 365-ben nem is kell Array (CTRL+ENTER) forma a beíráshoz, megcsinálja magától a kiterjesztést.JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
-
Fferi50
Topikgazda
Szia!
"Létezik ilyen?"
Sajnos nem, mivel a függvények nem számítanak üres cellának, így az egészA1:G100
tartomány egybefüggőnek számít.
Ahhoz, hogy csak az 50. sorig jelölje ki, az 51-ik sornak üresnek kell lennie.
Tehát először meg kell nézned, hogy hol van először a függvényednek üres értéke, majd ezután beszúrsz egy üres sort utána.
A Darabüres függvény megszámolja az adott tartomány üres celláit - azokat is beszámolja, ahol "" eredmény (üres szöveg) a függvény eredménye, de nem számolja azokat a cellákat, amelyekben 0 van.
Üdv. -
lappy
őstag
Pontosan nem tudom mit akarsz a képlettel, de megpróbáltam excelben rájönni és a következőt csinálja:
egy általad megadott tömbben visszaadja azt az értéket ahányadik sorban vagy éppen
pl: a tömb 1-10 tartalmaz elemeket és te az 5 sorban vagy akkor a kapott érték az 5 lesz.
na most googlesheet ben =IFERROR(INDEX(A$7:A$10;ROW());" ") ez a képlet is ugyanazt adja vissza
ha jó amit az elején írtamBámulatos hol tart már a tudomány!
-
Fferi50
Topikgazda
Szia!
Elméletileg: szerintem csinálni kell egy olyan kimutatást, amely összesíti mindenkinek az adósságát és a követelését. Ennek összevetésével kiderül, hogy kinek van nettó adóssága és kinek van nettó követelése. Ezek után a nettó adósok utalnak a nettó hitelezőknek - ezt meg lehet úgy szervezni, hogy minden nettó adós csak 1 utalást indítson.
Egy példa 10 főre:
Itt minimum 7 utalás lesz.
Üdv. -
Fferi50
Topikgazda
Szia!
"Ez tuti valami PDF-es adatbiztonsági bohóckodás."
Szerintem pedig nem. Ha megnézed a linkeket, láthatod, hogy az első kettő helyi fájlra mutat, feltételezhetően egy ideiglenesen létrehozottra - erre utal az AppData/Local ill a documents$ az elérési utakban. Azaz megnyitás előtt a hálózatról letölti a helyi gépre a fájlt.
A PDF szerkesztőben kellene megnézni, hogyan lehet az eredeti linket stabilizálni.
Üdv. -
félisten
Igen, normális. Meg kell jeleníteni, aztán megint elrejteni, persze ezt a "csiki-csukit" el lehet rejteni a felhasználó elől.
Application.ScreenUpdating = False
Sheets("Report MOS").Visible = True
Range ("'Report MOS'!A16:i25")
Selection.Rows.AutoFit
Sheets("Report MOS").Visible = False
Application.ScreenUpdating = TrueMindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
Pakliman
tag
Szia!
A
' Set the font for the html-body (parentheses are just because of MrExcel posting limitation)
HtmlFont = HtmlFont = "<body font: " & 11 & "pt " & Arial & ";color:black"">"
kód (jelen esetben) hibás.A HtmlFont értéke FALSE lesz, mivel feltételt vizsgáltatsz vele...
Helyesen:
HtmlFont = "<body font: " & 11 & "pt " & Arial & ";color:black"">"
[ Szerkesztve ]
-
Pakliman
tag
Ebben a sorban
Set .SendUsingAccount = OutlApp.Session.Accounts.Item(Account)
azAccount
-nak egy számnak kell lennie (fentebb deklarálva van konstansként 2-nek).
Szerintem azért fut hibára Neked, mert a 2 az túl nagy szám neki, nincs a rendszerben olyan sorszámúAccount
.
Ha megint megáll hibával azon a ponton, akkor írd be az "Immediate" ablakba:? OutlApp.Session.Accounts.Count
Ha 2-nél kisebb számot ad eredménynek, akkor megvan a hiba.[ Szerkesztve ]
-
Pakliman
tag
Igen, arra rájöttem, hogy el is akarod küldeni, csak a PDF készítésnek és a küldésnek nincs köze egymáshoz.
Mondjuk úgy, hogy kicsit kötözködtem VeledÉn céges gépen vagyok, automatikusan küldök ki címekre automatikusan generált pdf fájlokat, de ilyen hibával nem találkoztam.
Tény, hogy nálam nincs a kódbanAccount
-ot kérő sor.
Ha érdekel, én egy ilyen eljárást hoztam össze:Public Sub SendEmail( _
xTo As String, _
xSubject As String, _
Optional xCC As String = "", _
Optional xBCC As String = "", _
Optional xBody As String = "", _
Optional xHTMLBody As Variant = "", _
Optional bSend As Boolean = False, _
Optional bTörölniKüldésUtán As Boolean = False, _
Optional vFiles As Variant = Empty _
)
Const olFolderSentMail As Long = 5
Const olByValue As Long = 1
Dim OutApp As Object
Dim OutMail As Object
Dim oFolder As Object
Dim oEditor As Object
Dim cFile As Long
Dim sBody As String
If (xTo <> "") And (xSubject <> "") Then
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.To = xTo
.cc = xCC
.BCC = xBCC
.Subject = xSubject
If TypeName(xHTMLBody) = "Range" Then
xHTMLBody.Copy
Set oEditor = .GetInspector.WordEditor
oEditor.Content.Paste
Else
sBody = IIf(xHTMLBody = "", xBody, xHTMLBody): If sBody = "" Then sBody = " "
.HTMLBody = sBody
End If
If IsArray(vFiles) Then
For cFile = LBound(vFiles) To UBound(vFiles)
If Dir(vFiles(cFile)) <> "" Then .Attachments.Add (vFiles(cFile)) 'Source:=vFiles(cFile), Type:=olByValue
Next cFile
Else
If Dir(vFiles) <> "" Then .Attachments.Add (vFiles) 'Source:=vFiles, Type:=olByValue
End If
If bSend Then
.DeleteAfterSubmit = bTörölniKüldésUtán
.Send
Else
.Display
End If
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
End If
End Sub -
Fferi50
Topikgazda
Szia!
Próbáld meg ezt a tömbképletet a B1 cellába:=INDEX($A$1:$A$10;KICSI(HA(($A$1:$A$10>5);SOR($A$1:$A$10);"");SOR()))
A tartományokat igazítsd a sajátodhoz.
A KICSI képlet második paraméter akkor SOR(),ha az oszlop első cellájába írod a képletet. Ha lejjebb, akkor ki kell vonni belőle a megelőző sor számát, hogy elsőre 1 legyen az eredmény (pl. a harmadik sor esetén SOR()-2).
Ha elfogytak a számok, akkor hiba lesz az eredmény, ezt elkerülheted, ha a HAHIBA függvénybe ágyazod a képletet és hiba esetére megadod pl. hogy "NICS TÖBB".
Üdv.[ Szerkesztve ]
-
Fferi50
Topikgazda
Szia!
Ha nem válna be, amit Lappy tanácsolt, próbáld a következőket:
Egy segédoszlop kell hozzá, amit az eredeti mellé veszel fel. Nálam az F-ben van az adat, a G a segédoszlop és a J oszlopba kerül a felsorolás:
Az első cellába kerül egy db 1.
A második cellában a képlet:=HA(F2<>"";G1+1;G1)
Ez a képlet húzható lefelé.
A J1 cella képlete:=HAHIBA(INDEX($F:$F;HOL.VAN(SOR();G:G;0));"NINCS TÖBB")
Ez is húzható lefelé. A NINCS TÖBB helyett írhatsz akár üres szöveget is ("")Üdv.
-
Fferi50
Topikgazda
Szia!
Teszel egy szűrőt az oszlopra. Ezután kiszűröd az üres tételeket - maradnak az értéket tartalmazó cellák.
Ezeket kijelölöd - másolás - Egy új oszlop első sorába - irányított beillesztés - transzponálás.
A szűrőt megszünteted! (Ez fontos, hogy később ne zavarja a köreidet.)
Kijelölöd az előbb bemásolt tételeket - másolás - A kivánt oszlopba - irányított beillesztés - transzponálás.
Majd a "segédadatokat" kitörlöd.
Üdv. -
Mutt
senior tag
Szia,
=HA(SOROK(C$2:C2)<=DARABTELI($B$2:$B$30;">=20");INDEX($A$1:$A$30;ÖSSZESÍT(15;6;SOR($B$2:$B$30)/($B$2:$B$30>=20);SOROK(C$2:C2)));"")
Ü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
Topikgazda
Szia!
Erre mutattam azt a makrót, ami a cella változásakor megvizsgálja, hogy van-e már ilyen érték a bevittek között.
Csak meg kellene próbálnod testre szabni:
Ezt másold be az adott munkalap kódlapjára:Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Or Target.Column = 3 Then 'ez az első és a harmadik oszlopot figyeli
'ha minden oszlopon figyelnéd, akkor hagyd el.
'ha egy tartományt figyelnél, akkor a vizsgálat:
'If Not Intersect(Target,Range("A1:X100") Is Nothing ThenApplication.EnableEvents = False
If Application.CountIf(Range(Cells(1, Target.Column), Cells(Target.Row - 1, Target.Column)), Target.Value) > 0 Then
MsgBox "Ilyen érték már van!"
Target.Value = ""
Target.Select
End If
Application.EnableEvents = True
End If
End Sub
Üdv.
-
Mutt
senior tag
Szia,
Melyik képlettel tudom azt megcsinálni, hogy egy adott oszlopban található értékek közül, ha talál ismétlődést, akkor dobjon egy "NOK" üzenetet, vagy bármi mást.
Az alábbi képlet IGAZ-at ad vissza ha nincs ismétlődés, HAMIS-t ha van.
=DARAB2(A1:A9)=SZORZATÖSSZEG(1/DARABTELI(A1:A9;A1:A9))
A képlet csak akkor működik ha nincs üres cella a vizsgált tartományban.
üdv
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
Fferi50
Topikgazda
Szia!
A usernek nem kell semmit csinálnia, ha a feltételes formázást előre beállítod azokra a tartományokra, ahol az adatbevitel folyik. Az ismétlődést vörösre állítod. A usert pedig kitanítod, hogy a vörös azt jelenti, ilyen tétel már van.Makróban pedig tudod használni a darabtelit, a munkalap change_eseményébe ágyazva.
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.Darabteli( Range("A1:A10"),Target.Value)>0 Then
Msgbox "Már van ilyen érték: " & Target.Value
'vagy Msgbox helyett:
Target.Offset(0,1).Value="Ilyen érték már van!'"
'akár ki is törölheted:
Target.Value=""
End If
End Sub
Természetesen az A1:A10 helyére az adott területet írd.
Ha az adott cella oszlopában kell nézni, akkor
Columns(target.column) a Range('A1:A10") helyett. Ebben az esetben nem >0, hanem >1 a kritérium, hiszen az adott cella is benne van az oszlopban.Üdv.
[ Szerkesztve ]
-
Delila_1
veterán
Csinálj egy darabtelis cellaformázást, majd szűrj a színre. Jelöld ki a mellette lévő oszlopot, az aktív cellába írd be a NOK szót, Ctrl+Enterrel vidd be egyszerre a kijelölt tartományba.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
-
Olyat találtam hOGY:
=HOZAM.LESZÁM("2019.09.05";"2022.09.05";1000;1500)
eZ A 0,166667-et adja eredményül, nem biztos h ez a legoptimálisabb de én csak ezt tudom :/
Az első dátum a vétel, a második a lejárat, harmadik szám a vételi ár, a negyedik az eladási és ebből kalkulálja az éves kamatot. Annyi h mivel állampapírra van 100ft-os a legkisebb címlet benne ha jól tudom.
[ Szerkesztve ]
Gépelés nem az erősségemasdsdk
-
Fferi50
Topikgazda
Szia!
Az eseménykezelés nincs a helyén. Ha az elején letiltottuk, akkor máshol nem kell vele foglalkozni, csak a végén engedélyezni. Ezen kívül az ASH változót is be kell állítani.Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'Munkalap aktiválásakor mengnézzük, hogy az új munkalap a védendő-e:
If Sh Is Worksheets("Output") Then
'Ha a védendő, akkor jelszót kérünk:
Application.EnableEvents = False
Sh.Visible = xlSheetHidden 'elrejtjük
Set ASH = ActiveSheet 'az előző munkalap az aktív, ezt tesszük be a változóba
If InputBox("Jelszó:") = "MusterMaster" Then
'Ha jó a jelszó, engedjük az aktívvá tételt,
'és elmentjük új aktívként
Sh.Visible = xlSheetVisible ' láthatóvá tesszük
'Application.EnableEvents = False 'letiltjuk az eseménykezelést
Sh.Activate 'aktíváljuk
Set ASH = ActiveSheet
'Application.EnableEvents = True 'visszaállítjuk az eseménykezelést
Else
'Ha rossz, akkor:
MsgBox "Rossz jelszó!."
'Visszaállítjuk az előző munkalapot aktívnak:
Sheets("Output").Visible = xlSheetVisible 'láthatóvá tesszük, hogy kiválasztható legyen a lapfül
ThisWorkbook.ASH.Activate
End If
Application.EnableEvents = True
End If
End Sub
Üdv. -
Fferi50
Topikgazda
Még valami:
1.Minthogy az árfolyamtábládban a HUF is szerepel 1-es szorzóval, elég az FKERES függvényt használni.=HA(INPUT!$D5="";"";HA(ÉS($B$206=INPUT!$D5;INPUT!E5<>"");FKERES(INPUT!$C5;DATA!$A$1:$B$4;2;HAMIS)*INPUT!E5))
2.Mivel a Pénznem számformátum automatikusan beírja a Ft-ot vagy a HUF-t választásod szerint a szám mögé, továbbá annyi tizedest mutat, amennyit szeretnél, nem látom értelmét saját hasonló egyedi számformátum kreálásának.
Így elkerülhetők a képletedben levő hibák is.Üdv.
[ Szerkesztve ]
-
Fferi50
Topikgazda
Szia!
Nem véletlen az a random hiba, hanem a pénznemtől függő ...
A képleted a C206 cellában ez:=HA(INPUT!$D5="";"";HA(ÉS($B$206=INPUT!$D5;INPUT!E5<>"");HA(INPUT!C5="HUF";INPUT!E5&" "&INPUT!$C5;FKERES(INPUT!$C5;DATA!$A$1:$B$4;2;HAMIS)*INPUT!E5);""))
Ebben a részben:HA(INPUT!C5="HUF";INPUT!E5&" "&INPUT!$C5;
a HUF pénznemű dolgokhoz még hozzáteszed szövegként a " HUF'" -ot, ettől szöveggé válik az egész.
A nem HUF-nál viszont szorzod az összeget az árfolyammal és nem teszed hozzá a HUF végződést, mert nem is kell.
Miután a cellaformátumban beállítottad, hogy minden HUF-ban legyen - hozzátetted a " HUF" toldalékot - ezért ezek a számok "természetesen" számok maradnak.Tehát az "& " " &INPUT!$C5 rész törlendő a képletből!
Üdv.
[ Szerkesztve ]
-
Delila_1
veterán
A sok feltételt tartalmazó képlet utolsó, hamis ágában magad állítod szöveges típusra az értéket a "" megadásával. Nézd végig az egészet, és üres string helyett 0 értéket adj 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
veterán
Jobb híján szorzással rendbe teheted. Beírsz egy 1-est egy üres cellába, és másolod (Ctrl+c). Kijelölöd a képletet tartalmazó oszlopot, Irányított beillesztés, a Műveletnél Szorzás. Az 1-est törölheted.
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
Topikgazda
Szia!
Ez nem hekkelés, ez normális automatizálási lehetőség!
Első körben egyszer beírod a képleteket a cellákba. Megjegyzed, hogy mit kell kicserélni. Aztán kiderül, hogy mire. Ez 1 azaz egy db makró sor!!!
Szóval semmi esetre sem kell kicseréltetni az elérési utat kézzel.
Nem tudom, hogyan derül ki, melyik fájlból kell az adatokat beszívni, de arra is vannak jó módszerek.
Üdv.
(Privi is ment.) -
Fferi50
Topikgazda
Szia!
"Esély nincs arra, hogy ezt-azt ne kelljen futtatgatni manuálisan, amikor változik a cella?"
Erre való az eseménykezelés:Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("K1")) Is Nothing then
Application.EnableEvents = False
Range("A1").Formula="='c:\abc\def\[termeles" & Range("K1").Value & ".xls]" & Range("K1").Value & "'!A10"
Application.EnableEvents = True
End If
End Sub
Ezt annak a munkalapnak a kódlapjára kell bemásolni, ahol változtatni szeretnéd az adatokat.
Természetesen a többi cellára is meg kell ezt csinálni.
Ha felteszel valahova egy mintát, akkor megnézem, hogyan lehetne egyszerűbben, mert ha ugyanazok a fájlok változnak, akkor egy Csere - képletben makróval is meg lehet tenni a változtatást, ha előtte már megvannak a képletek normálisan. Csak azt kell tudni, hogy mit - mire kell változtatni.Üdv.
-
Fferi50
Topikgazda
Szia!
Makróval direktbe beleírod a képletet abba a cellába, ahol szükséges:
pl.Range("A1").Formula="='c:\abc\def\[termeles" & Range("K1").Value & ".xls]" & Range("K1").Value & "'!A10"
Amikor a K1 cella értéke változik, akkor megismétled a képlet beírást - pl. a Worksheet_Change eseménykezelő segítségével.
Üdv. -
Louro
őstag
Szia,
ha jól értem itt annyiról lenne szó, hogy adott egy "fájlom.xlsx" állomány, aminek van egy "2019" nevű munkalapja és onnan az egyik - példa kedvéért A1 - cella tartalmát akarod behivatkozni.
Erre vagy azt szokták csinálni, hogy megnyitják a két állományt és a célfájlban kiválasztják a célcellát, majd = és utána átmennek a forrásállományba, ahol rákattintanak a forráscellára.
Ha pötyögős vagy, mint én, akkor =[fájlom.xlsx]2019!A1
Ha változóval akarod megoldani a hivatkozott munkalapot, akkor szerintem(!) a makró elkerülhetetlen.
Mess with the best / Die like the rest
-
urobee
tag
Szia!
@Pakliman első kódja kicsit átalakítva szerintem megoldás lehet:
Ez ugye a thisworkbook-ba kerül:
Private Sub Workbook_Open()
'A munkafüzet megnyitásakor elmentjük az éppen aktuális munkalapot:
Set ASH = ActiveSheet
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Error Resume Next
'Munkalap aktiválásakor mengnézzük, hogy az új munkalap a védendő-e:
If Sh Is Worksheets("rejtett") Then
'Ha a védendő, akkor jelszót kérünk:
If InputBox("Jelszó:") = "jelszo" Then
'Ha jó a jelszó, engedjük az aktívvá tételt,
'és elmentjük új aktívként
Set ASH = ActiveSheet
'elrejti az összes oszlopot és sort
Columns.EntireColumn.Hidden = False
Rows.EntireRow.Hidden = False
Else
'Ha rossz, akkor:
MsgBox "Ehhez a laphoz Neked semmi közöd!!"
'Visszaállítjuk az előző munkalapot aktívnak:
ASH.Activate
End If
End If
End SubEz pedig az elrejteni kívánt lapra:
Private Sub Worksheet_Activate()
'megjeleníti az összes oszlopot és sort
Columns.EntireColumn.Hidden = True
Rows.EntireRow.Hidden = True
End SubEz csak akkor lehet problémás, ha vannak rejtett sorok/oszlopok a munkalapon.
[ Szerkesztve ]
-
Fferi50
Topikgazda
Szia!
Akkor próbáld meg ezt:Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'Munkalap aktiválásakor mengnézzük, hogy az új munkalap a védendő-e:
If Sh Is Worksheets("Output") Then
'Ha a védendő, akkor jelszót kérünk:
Sh.Visible = xlSheetHidden 'elrejtjük
If InputBox("Jelszó:") = "blbla" Then
'Ha jó a jelszó, engedjük az aktívvá tételt,
'és elmentjük új aktívként
Sh.Visible = xlSheetVisible ' láthatóvá tesszük
Application.EnableEvents = False 'letiltjuk az eseménykezelést
Sh.Activate 'aktíváljuk
Set ASH = ActiveSheet
Application.EnableEvents = True 'visszaállítjuk az eseménykezelést
Else
'Ha rossz, akkor:
MsgBox "Ehhez a laphoz Neked semmi közöd!!"
'Visszaállítjuk az előző munkalapot aktívnak:
ThisWorkbook.ASH.Activate
Sheets("Output").Visible = xlSheetVisible 'láthatóvá tesszük, hogy kiválasztható legyen a lapfül
End If
End If
End Sub
[ Szerkesztve ]
-
Fferi50
Topikgazda
Szia!
Egy icipici módosítás kell (amire én sem gondoltam először).Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Sh.Name <> "Output" Then Set ThisWorkbook.ASH = ActiveSheet
End Sub
helyett:Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Sh.Name <> "Output" Then Set ThisWorkbook.ASH =sh
End Sub
-
Fferi50
Topikgazda
Szia!
Az ASH változót definiáld publikusnak a Thisworkbook kódlap elején. (
Public ASH As WorkSheet
)
Ezután hivatkozhatsz rá úgy, hogySet Thisworkbook.ASH = Activesheet
Szerintem érdemes lenne még a Workbook_Sheet_Deactivate eseménybe beletenni a következőt:Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Sh.Name<>"Output" Then Set ThisWorkbook.ASH=ActiveSheet
End Sub
(ez szintén a ThisWorkbook kódlapján van).
Így minden munkalap elhagyáskor az ASH változód "emlékezni" fog rá, honnan kerültél az aktív munkalapra.
A helytelen jelszó megadása esetén pedigThisWorkbook.ASH.Activate
kell az Msgbox után.Üdv.
[ Szerkesztve ]
-
Louro
őstag
-
Pakliman
tag
Egy lehetséges megoldás (csak a totál kezdő Excel felhasználók ellen jó ):
Egy normál modulban létrehozol egy változót, ez fogja tárolni a mindenkori aktuális munkalapot:
Public ASH As Worksheet
A Thisworkbook modulban ez (illetve hasonló) legyen:
Private Sub Workbook_Open()
'A munkafüzet megnyitásakor elmentjük az éppen aktuális munkalapot:
Set ASH = ActiveSheet
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'Munkalap aktiválásakor mengnézzük, hogy az új munkalap a védendő-e:
If Sh Is Worksheets("Munka2") Then
'Ha a védendő, akkor jelszót kérünk:
If InputBox("Jelszó:") = "jelszo" Then
'Ha jó a jelszó, engedjük az aktívvá tételt,
'és elmentjük új aktívként
Set ASH = ActiveSheet
Else
'Ha rossz, akkor:
MsgBox "Ehhez a laphoz Neked semmi közöd!!"
'Visszaállítjuk az előző munkalapot aktívnak:
ASH.Activate
End If
End If
End Sub -
Mutt
senior tag
Szia,
Ha évente változik, akkor nem küzdenék vele hanem közvetlenül hivatkoznék a másik fájl cellájára.
Esetleg egy változóhoz rendelném azt a másik cellát és akkor évente 1x csak a névkezelőben kellene a hivatkozást javítani.Makróval az tudod megcsinálni, hogy a Workbook Open eseményével megnyitod a másik fájlt is, majd a Close eseményével zárod.
üdv
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
Mutt
senior tag
Szia,
...Google sheetben próbálkozott már valaki makróval? Ahogy elnéztem mégiscsak létezik, én úgy tudtam ahhoz a GS buta...
Ez az első Apps Script-em, de szerintem hozza ami neked kell. Eszközök/Tools -> Szkriptszerkesztő/Script editor alá másold be a lenti dolgot, aztán majd kérni fog engedélyeket.
function onEdit(e){
// get range info of edited cell.
var target = e.range;
if (target.getSheet().getSheetName() == "Munka1"
// if edited cell is in range B3:M3 then update cell A1
if (target.getRow() == 3 && target.getColumn() >= 2 && target.getColumn() <= 14)
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var cell = sheet.getRange("A1");
// if edited cell is non-blank and A1 is blank then set TODAY
if (target.getValue() != "" && cell.getValue() == "")
{
cell.setValue(new Date());
cell.setNumberFormat("YYYY.MM.DD");
}
else
{
// clear A1 if nothing is in range B3:M3
if (sheet.getRange("B3").getValue() == "" && sheet.getRange("C3").getValue() == "" && sheet.getRange("D3").getValue() == "" &&
sheet.getRange("E3").getValue() == "" && sheet.getRange("F3").getValue() == "" && sheet.getRange("G3").getValue() == "" &&
sheet.getRange("H3").getValue() == "" && sheet.getRange("I3").getValue() == "" && sheet.getRange("J3").getValue() == "" &&
sheet.getRange("K3").getValue() == "" && sheet.getRange("L3").getValue() == "" && sheet.getRange("M3").getValue() == "")
{
cell.clearContent()
}
}
}
}üdv
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
Mutt
senior tag
Szia,
Makró nélkül nincs jó megoldás de próbáld ki az alábbit:
1. Egy félreeső cellába írasd ki az aktuális dátumot a MA() függvénnyel.
2. Névkezelőben adj nevet ennek a cellának (pl. aktualis)
3. Ahol az eredeti képleted van onnan töröld a képletet és adatérvényesítést tegyél rá, ami listat tartalmazhat és az értéke a fenti pontban megadott név.
4. Ezen cella mellé/főlé (ahol van helyed) jöhet vmi hasonló képlet:=HA(VAGY(B3<>"";C3<>"";D3<>"";E3<>"";F3<>"";G3<>"";H3<>"";I3<>"";J3<>"";K3<>"";L3<>"";M3<>"";N3<>"");"Válassz dátumot!";"")
Amit ezzel elértünk, hogy nem kerül be automatikusan a cellába egy dátum, de kapsz egy értesítést hogy válasszd ki dátumot a cellában legördülő listából. A lista mindig a mai dátumot fogja mutatni, de a cella értéke nem fog automatikusan frissülni.
üdv
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
ny.janos
tag
B101 cella képlete:
=SZUMHA(A1:A100;"B";B1:B100)
Magyarázat:
A kritériumtartomány: A oszlop. Ebben az oszlopban keresed azokat az értékeket, amelyek megfelelnek az általad megadott feltételeknek. A Feltételnek megfelelő sorokban található értékeket adja majd össze a függvény.
Kritérium: amely értéknek meg kell felelnie az A oszlop adatainak, esetedben: B. Természetesen idézőjelben, mert szövegre keresünk.
Összeg tartomány: amely adatoknak az összegét meg szeretnéd kapni, ha a feltétel teljesül. Esetedben B1:B100[ Szerkesztve ]
-
ny.janos
tag
Pedig az írtak alapján a SZUMHA függvény pont arra való, amit szeretnél. Vagy rosszul fogalmaztad meg, hogy mit szeretnél. Vagy én nem értem.
Szemléltesd szerintem egy példával, hogy mit tartalmaz a táblázatod, és mit szeretnél elérni. Úgy egyszerűbb lesz megtalálni, hogy hol van a hiba. -
Delila_1
veterán
Ne legyen rögzített a méretarány. Mikor beszúrtad a képet, a megjegyzés méretét ne a párbeszéd ablakban állítsd be, hanem a sarkain látható látható kis "fogantyúk" segítségével, azok húzásával igazítsd arányosra.
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
veterán
Mikor kijelölöd a megjegyzést, bal klikk. 2 féle jelölés van. Egyiknél ritka, vonalakból álló sraffozás-, a másiknál sűrű, pontokból álló keret veszi körül a megjegyzést. Ha ritka, akkor újabb klikk kell a sűrűhöz. Ekkor jön elő a több lapot tartalmazó párbeszéd ablak.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
Új hozzászólás Aktív témák
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- Indiana Jones and the Great Circle - Digital Premium Edition - beváltás: 2025.1.30 - RTX 40XX
- Eredeti Microsoft termékek - MEGA Akciók! Windows, Office Pro Plus, Project Pro, Visio Pro stb.
- EREDETI JÁTÉK KULCSOK - STEAM, EA, UBISOFT, EPIC GAMES - LEGJOBB ÁRON
- Bitdefender Total Security 3év/3eszköz! - Tökéletes védelem, Most kedvező áron!