-
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
the radish
#28799
üzenetére
Szia!
Mégis az Application.Wait lett a nyerő.
A UserForm1 tartalmaz egy Label1 cimkét - itt fut az idő visszafelé, Commandbutton1 parancsgomb a művelet végrehajtására, Commandbutton2 parancsgomb a megszakításra.
A UserForm1 kódlapja így néz ki:
Option Explicit
Dim xx As Integer
Sub mutato()
UserForm1.Show False
For xx = 11 To 0 Step -1
UserForm1.Label1.Caption = xx
Application.Wait Now + TimeSerial(0, 0, 1)
DoEvents 'figyeli, hogy volt-e gombnyomás, ha igen, végrehajtja
Next
If xx = -1 Then UserForm1.CommandButton1_Click ' ha lefutott az idő, végrehajtjuk a műveletet, ha már megvolt, nem történt semmi
End Sub
Public Sub CommandButton1_Click()
MsgBox "Kilépek"
xx = -2
Me.Hide
End Sub
Private Sub CommandButton2_Click()
MsgBox "Cancel"
xx = -2
Me.Hide
End Sub
Private Sub UserForm_Terminate()
xx = -2
End SubHa kérdésed lenne, kérlek írj!
Üdv.
-
Fferi50
Topikgazda
válasz
the radish
#28799
üzenetére
Szia!
A userformnak van egy modal paramétere, ami
vagy 1 (ha nem adod meg, ez a default), ebben az esetben addig nem megy tovább a program, amíg a form látszik
vagy 0 ill. False lehet, ezt mindig meg kell adni. Ilyenkor a form nem állítja meg a program futását. Ezért is írtam, hogy a False paramétert is állítsd be a show meghívásakor.Az application.wait valóban megállítja a program futását, bocs erre nem voltam figyelemmel, más módon kell a 10 mp - visszaszámlálást megoldani.
Még agyalok rajta egy kicsit, lehet az időzítő funkciót kell használni.Üdv.
-
Fferi50
Topikgazda
válasz
the radish
#28797
üzenetére
Szia!
Szerintem ez saját alkotású UserForm-mal oldható meg. Egy cimke az üzenettel, két parancsgomb + egy cimke a timernek.
Amikor megmutatod a formot, beállítod az üzenetet és a timert - megjelenítés userform.show false paraméterrel, hogy a program fusson tovább, de a programba beteszed a 10 mp várakozási időt is (Application.Wait) a megjelenítő sor után - ha lejárt az idő, végrehajtod a műveletet és eltünteted a formot.
Ha Mégse gombot nyomnak, akkor is el kell tüntetned a formot, mielőtt tovább mész.Üdv.
-
Fferi50
Topikgazda
Szia!
Ha a képen levő értékek számok (azaz cellaformázással van a " m" hozzáadva), akkor a GYAKORISÁG függvénynek működnie kell (Ha F2 után, illetve a szerkesztősorban csak a szám jelenik meg).
A "titok", hogy poffsoft képletét tömbképletként kell megadni annyi sort kijelölve, ahány gyakorisági osztályt tartalmaz a második paraméter, jelen esetben 4 sort, ha bővíted az osztályok számát akkor annak megfelelő sort kell kijelölnöd a cél oszlopban.Ha viszont a 2655 m érték szövegként van beírva (azaz 2655 m a cella értéke, ha F2-t nyomsz rá), akkor nem használható a gyakoriság függvény, mert nem számként értelmezi.
Egyébként mit jelent a sajna nem működik? 0 értéket ír ki vagy hibát, ha hibát akkor melyiket? Adj több információt, hogy segíthessünk.
Üdv.
-
Fferi50
Topikgazda
válasz
the radish
#28750
üzenetére
Szia!
Workbooks.Open Filename:= "C:\A.xls"
Range(cells(2,2),cells(2,2).End(xlDown)).Copy destination:=Workbooks("B.xls").Sheets("munka1"). Range("A2")Üdv.
-
Fferi50
Topikgazda
válasz
boomkat88
#28713
üzenetére
Szia!
Sajnos, úgy tűnik ez nem műxik a sor/oszlop cimkéknél. Viszont ha jobb egérgombbal rákattintasz egy sorcimkére és kiválasztod a rendezést, ott van olyan lehetőség, hogy kézi húzással. Ekkor tetszés szerinti sorrendbe rakhatod az adott cimke értékeit (ez persze akár sok munka is lehet). Másik trükk esetleg, hogy számokat vagy betűket raksz a cimkék első betűjébe a kívánt sorrend szerint.
Üdv.
-
Fferi50
Topikgazda
válasz
poffsoft
#28710
üzenetére
Szia!
Látom, közben megtaláltad a jó (jobb) megoldást. De most leírt esetben is működik a dolog. Mivel a Thisworkbook modul u.n. osztálymodul, ezért az ott deklarált Public változók úgy érhetők el, ha "teljes névvel", a modul nevével is hivatkozunk rá: Thisworkbook.változónév. Ebben az esetben látható az értéke más modulokból is.
Ez az eljárás minden osztálymodulnál működik (tehát pl. egy munkalaphoz tartozó kódban is deklarálható Public változó és a kódmodulneve.változónév formában lehet rá hivatkozni más modulokban).Üdv.
-
Fferi50
Topikgazda
válasz
poffsoft
#28708
üzenetére
Szia!
Akkor deklaráld a tömbödet Public-nak, vagy Global-nak. Egy külön eljárásban töltsd fel a tömböt, mielőtt meghívnád a "számoló" rutint. Ha a külön eljárásod lefut, megnézheted, hogy benne maradnak az értékek a tömbben (ez biztos, de ellenőrizd egyszer). Idézet a 2010-es VBA helpből: "You can also use the Public statement with empty parentheses to declare a dynamic array. After declaring a dynamic array, use the ReDim statement within a procedure to define the number of dimensions and elements in the array"
A többszöri meghíváskor már nem kell feltölteni a tömböt, mert az már megtörtént külön. Az értékük addig él, amíg ki nem lépsz a főprogramból.Üdv.
-
Fferi50
Topikgazda
válasz
poffsoft
#28706
üzenetére
Szia!
Mivel a makródnak tudnia kell, hogy mivel számoljon, egyszer mindenképpen meg kell adnod valahol a programban ezeket az értékeket. Mivel a ciklust vezérlő változóid érteke valószínűleg nem állandó, hiszen ellenkező esetben a konkrét számokat adtad volna meg a select case-ben ezért a tömb értékeid sem lesznek valódi konstansok!
Ha tényleges értékeket tudsz, akkor megoldás lehet pl. az, hogy egy munkalapon beírod ezeket az értékeket mondjuk az A1-B8 tartományba, majd a tombvaltozó=range("A1:B8").value utasítással egy lépésben bekerül a tömb értékébe mind. A tömböt dinamikusnak kell deklarálni.
Beteheted az értékeket egy szövegfájlba és akkor onnan is be lehet olvasni fájlművelettel.Ha az excel azt mondja, körkörös hivatkozás van, akkor az úgy is van, csak valószínűleg olyan "bonyolult módon", hogy "szabad szemmel" nem látható. Érdemes ilyenkor a képletvizsgálatot bekapcsolni.
A beállítások képletek részénél van olyan, hogy közelítés engedélyezése x lépésben, ha ide beírod az 1 lépést, akkor nem kiabál a körkörös hivatkozás miatt - cserébe viszont nem is számolja át ismét az értékeket, ha változott a bemenő adat, csak kérésre.
Ezért nem ajánlott a "kikapcsolása".Üdv.
-
Fferi50
Topikgazda
válasz
boomkat88
#28690
üzenetére
Szia!
Szerintem nem kell a közbenső táblázat és kézi munka sem nagyon...
Csinálj fejléceket a 3 oszlopnak (én hely, db és kód szöveget adtam meg).Ezután csináltam egy kimutatást az alábbiak szerint:
Menüszalag beszúrás, kimutatás
Oszlopcimkék a kód, sorcimkék a hely és db, értékek a db. Ekkor megkapod a 3. tábla szerinti állapotot - azzal a különbséggel, hogy a "db" mező értéke is látszani fog a "hely" mellett.
A "hely" mező értékére megadhatod, hogy ne összegezzen, így a zavaró összesítő sorok eltűnnek. Az op2 mezőt összecsukhatod és akkor egymás mellett lesz a két érték (és ezt minden olyan sorcimkével megteheted, amelyben egy oszlopcimkéhez egy adat tartozik.
Végül az egész kimutatás sor és oszlop összegzését letilthatod, ha zavarónak találod.
Ráadásul a db sorcimkét tartalmzó oszlopot el is rejtheted.
Úgy gondolom ez gyorsan megoldja a gondjaidat.Üdv.
-
Fferi50
Topikgazda
válasz
the radish
#28551
üzenetére
Szia!
Úgy gondolom, az a probléma, hogy a meghívott makróból nem ugyanabba a helyzetbe térsz vissza, ahonnan meghívtad:
Rows(tol & ":" & ig).copy WSM.Range("A2") Ezzel átmásolod a sorokat a forrás munkalapról a cél munkalapra
proba
Itt a másolandó munkafüzet innen nevű munkalapja az aktív.
Itt viszont:
Sub proba()
Range("A1:E3693").Select ' még mindig a másolandó munkafüzet aktív, annak az A:E oszlopát másolod
Selection.copy
Windows("B.xls").Activate 'átváltasz a cél munkafüzetre
Sheets("Munka2").Select 'abban is a Munka2 munkalapra
Range("A1").Select 'és ide másolod be a kijelölt részeket
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A1").Select
Sheets("ide").Select ' itt pedig a cél munkafüzet ide nevű munkalapját aktíválod - a cél munkafüzet marad az aktív!!! - Pedig a másolandó munkalap volt aktív, amikor a makrót meghívtad!!!
'Azaz ide a Windows("A.xls").Activate sor kellene ezen sor helyett.
MsgBox "Makró"
End SubTovábbá nem egészen értem, miért kell a Select - Copy - Paste és munkafüzet aktíválások sora (amiben el is vesztél szépen
).
A Copy metódusnak van egy Destination paramétere, amivel megadhatod, hogy hova másolja át az adott tartományt. (Ráadásul ezt alkalmazod is a fejléc másolásánál!).
Vagyis a másolás egy sorral megoldható:
Range('A1:E3693").copy destination:=WSM.parent.Sheets("Munka2").range("A1")
Magyarázat: A WSM.parent eredménye a B munkafüzet, így a másolás egyből annak Munka2 munkalapjára megy át.A rövidebb makród azért "tökéletes", mert abban csak egy üzenet van és nem végzel vele semmilyen egyéb - munkalap, munkafüzet megváltoztatási - feladatot.
A leírtakból az is kiderül, ha nem kell mást csinálnia a meghívott makrónak, csak ezt a másolást, akkor nincs is rá szükség, mert az egy sort be lehet oda is szúrni a meghívás helyére.
Bocsi, hogy egy "lerágott csontot" próbáltam meg egy kicsit kibogozni eléggé elkésve, de csak most volt időm foglalkozni vele.
Üdv.
-
Fferi50
Topikgazda
válasz
the radish
#28568
üzenetére
Szia!
Próbáld ki az alábbi makrót:
Sub csvment()
Dim fileszam As Integer, sor As Range
fileszam = FreeFile()
Open "Minta.csv" For Output As #fileszam
For Each sor In ActiveSheet.Rows
Print #fileszam, Join(Application.Transpose(Application.Transpose(sor.Value)), ";")
Next
Close #fileszam
End SubÜdv.
-
Fferi50
Topikgazda
válasz
Claude Leon
#28565
üzenetére
Szia!
Nézd meg, milyen a cella formátuma, ha szöveg, váltsd át általánosra, utána F2 majd enter.
Azután előfordulhat az is, hogy a képlet elején van egy aposztróf, amitől szövegnek tekinti a kiértékelő (esetleg szóközök vannak az egyenlőségjel előtt...).Üdv.
-
Fferi50
Topikgazda
Szia!
Próbálj ki egy teljesen új munkafüzetet, abban hogyan viselkednek a sorok/oszlopok.
A problémás munkafüzetet pedig feltehetnéd egy helyre, ahol el tudjuk érni, mert így "messziről" nem nagyon van tippem a jelenségre.
Védettség: 2010-es verzióban menüszalagon korrektúra - lapvédelem. Ezt véletlenül is bekapcsolhattad és akkor nem enged sor/oszlop beszúrást/törlést normál esetben.
Üdv.
-
Fferi50
Topikgazda
válasz
Delila_1
#28340
üzenetére
Szia!
Akkor fordítva adom meg a szűrőfeltételt, ugyanannak a lapnak a "következő" oszlopaiba irányítom a szűrést, majd az eredeti oszlopokat - a szűrőfeltétellel együtt - kitörlöm. Megy ez makróval is persze, esetleg formázni kell az új oszlopokat.
(Viszont nem tudom, ha az autoszűrő nem ment, akkor vajon a spec/irányított szűrő megy-e.)Üdv.
-
Fferi50
Topikgazda
válasz
Delila_1
#28337
üzenetére
Szia!
Milyen korlátait tapasztaltad az autodszűrőnek? Mert én még nem találkoztam vele.
Másrészt viszont a speciális szűrés kifejezetten megfelel ennek a célnak is.
Pl. az Eredeti munkalap M1 cellájába Kód, M2 cellájába *J* kerül.
Ezután egyetlen sor:
Sheets("Eredeti").Range("A1:I30").AdvancedFilter Action:=xlFilterCopy, criteriarange:=Sheets("Eredeti").Range("M1:M2"), copytorange:=Sheets("Jó").Range("A1:I1")átmásolja a kívánt értékeket a Jó munkalapra.
De a Jó munkalapra átváltva - az Adatok - Speciális kiválasztása után megjelenő párbeszéd ablakot a fentieknek megfelelően kitöltve makró nélkül is megy a dolog.
Üdv.
-
Fferi50
Topikgazda
válasz
coldfirexx
#28251
üzenetére
Szia!
Miért nem használod ki az Excel beépített lehetőségeit?
Sub Szerződések_törlése()
With Sheets("Alapadatok")
.UsedRange.Autofilter Field:=31, Criteria1:="A szerződés előző évben lejárt"
.UsedRange.Offset(1,0).Specialcells(xlCelltypeVisible).EntireRow.Delete
.AutofilterMode=False
End With
Sheets("Vezérlő").Select
Range("B6").Select
End SubÜdv.
-
Fferi50
Topikgazda
válasz
irodakukac
#28276
üzenetére
Szia!
Ha legalább 2007-es exceled van, akkor adatok - szövegből oszlopok , elválasztójelnek beírod a / jelet, kijelölöd, hogy hova tegye és enter.
Ha ennél korábbi, akkor a bal(A2; szöveg.keres(A2,"/")-1) és a közép(A2,szöveg.keres(A2;"/")+1;20) a két szétválasztó képlet.
Üdv.
-
Fferi50
Topikgazda
válasz
the radish
#28189
üzenetére
Szia!
Legyen egy fejléc az első sor.
Utána autoszűrő az A oszlopra, értéke 1, ami látszik - SpecialCells(xlCellTypeVisible - azt átmásolod - a fejlécet "kiütöd belőle" az új helyen. (Ezt akár makrórögzítő mellett is megteheted).
Ezután szűrő 2 és másolás, kiütés.
Ezt folytatod addig, amíg a szűrés után egyetlen sor marad látható - a fejléc.Vagy: A megkapott adatokat rendezed az A oszlop szerint és utána az egészet átmásolod (szerintem ez az igazán nyerő).
Üdv.
-
Fferi50
Topikgazda
Szia!
Egy kicsit pontatlanul fogalmazol.
"egy oszlopból, hogyan lehet kitörölni azokat a sorokat ami nem tartalmaz adatokat és üresek"
Egy oszlopban csak cellák vannak, amelyek lehetnek üresek is.
Ha egy db cellát törölsz, akkor eldöntheted, hogy a cellától jobbra vagy az alatta levő cella "tolódjon" a helyére, de valamelyik megtörténik, azaz megváltozik az adatszerkezet.
Ha egész sort törölsz, a többi oszlopban levő adat is törlődik.
Autószűrő - az üresek látszanak opció kiválasztása után a megjelenő üres sorokat kijelölés után egy mozdulattal tudod törölni, viszont egy-egy cellát külön nem lehet. (sorok kijelölve - jobb egérgomb, sorok törlése).Üdv.
-
Fferi50
Topikgazda
válasz
Carasc0
#28047
üzenetére
Szia!
1. A makrót én kiegészíteném ezzel az első sorral:
If Target.Cells.Count>1 then exit sub
Ez azt jelenti, ha több cellát jelöltél ki egyszerre, akkor nem vizsgálja, hogy a V3 cellát hagytad-e el.2."Adott egymás alatt 4 cella: A1 : D1 " Ez a négy cella egymás mellett van

A véletlenszám generáláshoz nézd meg a RandBetween munkalapfüggvényt (Worksheetfunction). Itt megadhatod a határokat. Az eredményt kerekítő függvénnyel kerekítheted. Ezután megnézed, van-e már ilyen számod. Ha igen, akkor új generálás és vizsgálat, ha nem, akkor beírod a cellába.Üdv.
-
Fferi50
Topikgazda
válasz
ThaBoss
#28038
üzenetére
Szia!
Próbáld meg ezt a képletet:
=DARABTELI($B$2:$B$300;$B2)=DARABHATÖBB($B$2:$B$300;$B2;$F$2:$F$300;"nem vették fel")
valamelyik következő oszlop második cellájában és húzd az oszlop végéig.
Ezután szűrő az oszlopra - igaz mutatja azokat a sorokat, ahol egész nap nem vették fel a hívást.(A képlet megszámolja, hány hívás volt a nap során és összehasonlítja a fel nem vett hívások számával. Ha a kettő egyforma, akkor nem vettek fel hívást egész nap.)
Annyit még hozzá, hogy egy szám többször is szerepelni fog, ezért a B oszlopra is rá kell tenni a szűrőt, ott fogod látni, hány érték maradt meg.
Üdv.
-
Fferi50
Topikgazda
válasz
alfa20
#28019
üzenetére
Szia!
Egy kis probléma: az ecell és ucell változókat Range típusú objektum változónak kell definiálnod.
dim ecell as Range, ucell as Range
set ecell=Sheets("Munka3").Range("A1")
set ucell=Sheets("Munka3").Range("E1664")
sourcedata:=Range(ecell,ucell).addressAz objektum változóknak set változónév= valami formában kell értéket adni.
Az ecell=Range("A1") értékadásban az A1 cella értékét kapja az ecell változó (vagy hibát kapsz, ha nem variant típusú).
Üdv.
-
Fferi50
Topikgazda
válasz
csongi
#28010
üzenetére
Szia!
Üres sorok elrejtésére szerintem megfelel az adatok - szűrés menüpont, ott kiválasztod a nem üres lehetőséget valamelyik oszlopban és máris elrejti az üres sorokat.
A fájlt mentheted úgy, hogy csak jelszóval lehessen megnyitni "felülmentésre". A mentés máskéntnél van olyan lehetőség, hogy eszközök - beállítások - jelszó betekintéshez - jelszó módosításhoz.
Ha a módosításhoz adsz jelszót, akkor a jelszó nélkül csak olvasásra lehet megnyitni a munkafüzetet, ezért nem lehet felülírni - csak másként menteni. Ha ott nem adsz meg jelszót, akkor a továbbiakban nem fog kérni.
Üdv.
-
Fferi50
Topikgazda
válasz
attilalr2
#28000
üzenetére
Szia!
Próbáld ki ezt a makrót:
Sub cserelo(ByRef rng As Range, ByVal mit As String, ByVal mire As String)
Dim cl As Range, xx As Integer
If Len(mit) <> Len(mire) Then MsgBox "Nem egyforma a két szöveg!", vbInformation: Exit Sub
For Each cl In rng.Cells
If Not IsEmpty(cl) Then
For xx = 1 To Len(mit)
cl.Value = Replace(cl.Value, Mid(mit, xx, 1), Mid(mire, xx, 1))
Next
End If
Next
End SubA VBA nézet immediate ablakából indíthatod, pl. így:
cserelo Sheets("Munka1").Range("A1:C72"),"áéó","aeo" a végén enter.Tehát az első paraméter a tartomány címe (vba-szerint beírva), a második a cserélendő betűk, a harmadik pedig amire cserélni kell. A második és a harmadik paramétert "szinkronban" kell tartani, mert az azonos pozícióban levő betűket cseréli (tehát első betűt az elsőre, második betűt a másodikra és így tovább).
Üdv.
-
Fferi50
Topikgazda
válasz
enginev3.0
#27992
üzenetére
Szia!
Szerintem úgy, hogy kijelölöd a táblát, másolás, majd ugyanide (azaz nem változtatva a kijelölést) irányított beillesztés - értéket. Utána Esc, hogy megszűnjön a másolás mód.
Üdv.
-
Fferi50
Topikgazda
válasz
Mittu88
#27961
üzenetére
Szia!
Az alábbi makró elvileg átmásolja, amit szeretnél.
Sub masolo()
Dim ws1 As Worksheet, wb1 As Workbook, usor1 As Integer, usor2 As Integer, fnev As String
fnev = "xxxxxxx"
Set ws1 = Workbooks(1).Worksheets(1) ' ahonnan másolunk
usor1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row 'az A oszlop utolsó nem üres cellájának a sora
Set wb1 = Workbooks(2).Open(Filename:=fnev) 'megnyitjuk a másik fájlt
usor2 = wb1.Worksheets(2).Cells(Rows.Count, 1).End(xlUp).Row + 1 ' megkeressük a worksheets(2) A oszlopának első üres cellájának sorát
ws1.Range("A1:L" & usor1).Copy Destination:=wb1.Worksheets(2).Cells(usor2, 1) ' a worksheets(1) megfelelő tartományát átmásoljuk a worksheets(2) A oszlopának végére
Workbooks(2).Save
Workbooks(2).Close
End SubÜdv.
-
Fferi50
Topikgazda
válasz
Mittu88
#27961
üzenetére
Szia!
Kicsit nézegettem még a makródat. Ha jól gondolom, az a feladat, hogy a Workbooks(1).Worksheets(1) munkalapjának az adatait szeretnéd a Workbooks(2).Worksheets(2) munkalapjának végére átmásolni.
Az utolsó teleírt sort így találhatod meg egyszerűen, nem kell hozzá ciklus:
usor=Cells(rows.count,1).End(xlUp).RowTartomány kijelölés többféle módon lehet: Pl:
Range("A" & i) => az A oszlop i-edik cellája
Range("A1" & ":L" & i) =>az A1:Li terület.
Cells(i,j) => az j oszlop i-edik sora (i és j szám)
és még számtalan változata van.A makródat még kicsit szabom.
Üdv.
-
Fferi50
Topikgazda
válasz
Mittu88
#27959
üzenetére
Szia!
Valóban abban a sorban van egy hiba:
Vagy Range(Range("A1"),Cells(i,12)), vagy Range(Cells(1,1),Cells(i,12))Másrészt viszont nem értem a két ciklust. Szerintem ezzel csak a legutolsó cellát fogod tudni átmásolni.
Még nézem a makródat, mert más gondot is látok benne.
Üdv.
-
Fferi50
Topikgazda
válasz
#75654912
#27939
üzenetére
Szia!
Az ilyen szerkezetű táblában az INDEX HOL.VAN függvény páros a "nyerő":
=INDEX($G$13:$I$16;HOL.VAN($B5;$G$13:$G$16;0);HOL.VAN($C5&"*";$G$13:$I$13;0))A SZUMHATÖBB akkor működik, ha a termék és a gép egymás melletti oszlopokban van és mellé van írva a norma, ahogyan az első mintában a lenti táblában volt.
Üdv.
-
Fferi50
Topikgazda
válasz
#75654912
#27937
üzenetére
Szia!
Megpróbálhatnád a SZUMHATÖBB függvényt.
=SZUMHATÖBB($D$10:$D$20;$B$10:$B$20;$B5;$C$10:$C$20;$C5)
Mivel a termék - gép kombináció egyedi, ezért az adott gép - termék kombináció eredménye kerül a cellába.(Természetesen a tartományokat saját magadra adaptáld - az összegtartomány az, ahol az elvárt teljesítmények vannak, az egyik feltételtartomány az ehhez tartozó termék oszlop, a másik a gépek oszlopa.)
Üdv.
-
Fferi50
Topikgazda
válasz
Carasc0
#27795
üzenetére
Szia!
A cellákban levő szöveg betűszínét változtasd meg a háttérszínnek megfelelően - akkor nem fog látszani, mi van bele írva. Amikor megmutatod, akkor visszaváltod a színt. (Range("A1").font.color=vbwhite fehér színű betűk, Range("A1").font.color=vbblack fekete színű betűk.)
Üdv.
-
Fferi50
Topikgazda
válasz
Carasc0
#27787
üzenetére
Szia!
A munkalap activate eseménykezelőjébe kell betenned a makró meghívását.
Munkalapfülön jobb egérgomb - kód megjelenítése - bal oldalon a lenyílóban Worksheet kiválasztása, utána jobb oldali lenyílóban activate kiválasztása. A megjelenő sub end sub sorok közé beírod a makród nevét.Ezek után minden olyan alkalommal, amikor aktívvá teszed a lapot (másik lapról ide átjössz), lefut a makród.
A másik kérdésedre igen a válasz.
Üdv.
-
Fferi50
Topikgazda
Szia!
A válasz IGEN, meg lehet csinálni.
Bővebben: A rajzszámot tartalmazó cellát kijelölöd, jobb egérgomb, hivatkozás - kiválasztod a megfelelő fájlt, kitöltöd a szükséges mezőket, majd ok.
Ezt az egészet makrórögzítővel felveszed, majd "paraméterezed" és lefuttatod minden cellára nézve.
Ha a makrót rögzítetted és ide felteszed, segítünk a paraméterezésben.Üdv.
-
Fferi50
Topikgazda
válasz
sedyke
#27761
üzenetére
Szia!
Úgy gondolom, megszületett a kielégítő megoldás:
A makró:
Sub termeklistas()
Dim sh As Worksheet, ws As Worksheet, xx As Integer, yy As Integer
Set ws = Sheets("Munka1")
yy = 1
For Each sh In Worksheets
xx = 1
If sh.Name <> ws.Name Then
Do While True
If sh.Cells(xx, "B").Value = "" Then Exit Do
ws.Cells(yy, "N").Value = sh.Cells(xx, "B").Value
ws.Cells(yy, "O").Value = sh.Name & "!"
ws.Cells(yy, "P").Value = xx - 1
xx = xx + 51
yy = yy + 1
Loop
End If
Next
End SubA makró az N oszlopba beírja a termékkódot, az O oszlopba a munkalap nevét, felkiáltójellel kiegészítve, a P oszlopba pedig az adott termék hol kezdődik a munkalapon -1.
Hibaellenőrzés (mármint, hogy valóban termékkód van-e minden 51. cellában, nincs benne, azt a listából láthatod, ha átnézed).
Ezek után a képletek:
R1 cella (M)[/=FKERES($B$1;$N$1:$P$10;2;0)M]
S1 cella (M)=FKERES($B$1;$N$1:$P$10;3;0)(/M)
B3 cella (M)=INDIREKT($R$1 & "B" & $S$1+SOR())(/M)
C3 cella (M)=INDIREKT($R$1 & "C" & $S$1+SOR())(/M)Az első sor tovább értelemszerűen változtatva csak a B,ill. C helyére írva az aktuális oszlopot.
Ezután lefelé másolhatod a képleteket.A B1 cella érvényesítése: lista - forrás N1:P10
Ezután a listából kiválasztod a termékkódot, a lap pedig automatikusan kitöltődik.
A $P$10-ben a 10 helyett az utolsó "tele" cella sorszámát kell írni. (Minden másra ott a MasterCard
)A makróra a lefuttatás után, amennyiben jónak találod az eredményt, nincs szükséged. Ha meg szeretnéd tartani, akkor makróbarátként kell elmenteni a munkafüzetet.
Remélem, sikerülni fog.
Üdv.
-
Fferi50
Topikgazda
válasz
sedyke
#27758
üzenetére
Szia!
A munkalapokon való elhelyezkedés mennyire "szabályos", azaz mindig egymás alatt vannak és soha nem egymás mellett a termékek?
Ez így egy kicsit bonyolítja a helyzetet, de nem megoldhatatlan. Természetesen a makró így nem azt csinálja, amit szeretnénk.
Mondjuk a 4 termékes munkalap képét feltehetnéd, hogy látni lehessen az elhelyezkedés logikáját.
Üdv.
-
Fferi50
Topikgazda
válasz
sedyke
#27756
üzenetére
Szia!
A Q1 cellában a képlet: =Fkeres($B$1;$N$1:$O$21;2;0) Természetesen a sorok száma a ténylegesen kitöltött soroké legyen.
B3 cella képlete: =INDIREKT($Q$1 & "!B" & SOR())
A C3 - F3 - H3 - J3 cellák képlete ugyanaz, csak a B helyére a megfelelő oszlopot írod.Ha a cellákba ezt a képleted írod, akkor megtalálja. A Q1 cellában az Fkeres eredménye annak a munkalapnak a neve lesz, ahol a B1 cellába beírt termékkód van.
Üdv.
-
Fferi50
Topikgazda
válasz
sedyke
#27746
üzenetére
Szia!
Ha jól emlékszem, azt írtad a legelején, hogy minden terméknek külön terméklapja van. Ez azt jelenti, hogy már 800-nál több munkalapot tartalmaz a munkafüzeted.
Nincs mese, egyszer végig kell menni rajta és megnézni, melyik termék melyik lapon van - különben nem tudod ezt a "behívósdit" megcsinálni.
Erre itt egy makró:
Sub vegigkeres()
Dim sh As Worksheet, ws As Worksheet, xx As Integer
Set ws = Sheets("Főlap") ' ide a Főlap helyére annak a munkalapnak a nevét írod, amelyre a kigyűjtést szeretnéd.
xx = 2
For Each sh In Worksheets
If sh.Name <> ws.Name Then
ws.Cells(xx, "N").Value = sh.Cells(1, "B").Value
ws.Cells(xx, "O").Value = sh.Name
xx = xx + 1
End If
Next
End SubEzt akár egy általános modulba, akár a "Főlap" kódlapjára bemásolhatod - ez utóbbi: jobb egérgomb a lapnéven alul, kód megjelenítése, bemásolás.
Egyszer lefuttatod, akkor az N-O oszlopba beírja a munkafüzetben talált termékkódokat (a munkalapok B1 cellájában levő értéket, mellé pedig annak a munkalapnak a nevét, amelyen találta). Vigyázat, nem ellenőrzi, ha esetleg duplikált termékkód fordul elő.
Ezután a Főlapod B1 cellájának érvényesítésére megadhatod az N oszlopban levő értékeket.Ha mindez megvan, a makróra már nincs is szükséged, mentheted makrómentesen a füzetet.
Üdv.
-
-
Fferi50
Topikgazda
válasz
sedyke
#27740
üzenetére
Szia!
A sheetlistát ki kell egészíteni a termék kódokkal, beszúrsz még egy oszlopot az N elé és oda beírod azt a temékkódot, amelyik a mellette levő sheet-en van. Tehát a sheetlistád az N:O oszlopokban lesz.
A Q1 cellát kinevezhetjük "munkacellának". Ebben a képlet: =Fkeres($B$1;$N$1:$O$21;2;0) Természetesen a sorok száma a ténylegesen kitöltött soroké legyen.B3 cella képlete: =INDIREKT($Q$1 & "!B" & SOR())
A C3 - F3 - H3 - J3 cellák képlete ugyanaz, csak a B helyére a megfelelő oszlopot írod.A B1
1 cellánál gondolom érvényesítéssel listából lehet választani.Ezután már tudod másolni a képletet lefelé irányba.
Remélem, sikerül.
Üdv.
-
Fferi50
Topikgazda
válasz
sedyke
#27731
üzenetére
Szia!
Igen, hiszen csak úgy tudod az adatokat átvenni az adott terméklapról.
Viszont ha ügyesen írod be, akkor lehet húzni a függvényt.
A "munkacella" (amit S1-nek adtam meg) az mindig ugyanaz, tehát annak $S$1 módon kell megadni a címét. A tartalmát pedig Fkeres képlettel adod meg. (=Fkeres(temék;terméklapoklistája;1;0)).Az oldalrovatokat és a fejrovatokat természetesen nem kell képlettel megadni.
Üdv.
-
Fferi50
Topikgazda
válasz
sedyke
#27729
üzenetére
Szia!
Egy tartományba beírod a termék munkalapok nevét.
Fkeressel megkeresed az adott termékhez kapcsolódó munkalapot egy munkacellába.
Majd az indirekt függvényt használva megkapod az adott táblából az adatot.
A munkacella (S1) tartalma Termék1Az A5 cellában a képlet =indirekt(S1 & "!A5")
Üdv.
-
Fferi50
Topikgazda
válasz
poffsoft
#27720
üzenetére
Szia!
Szerintem ezt több lépésben tudod csak megnézni.
1. Selection.Cells.Count=1 akkor biztosan nincs összevonva, mert az összevont cellákat nem tudod egyedüliként kijelölni.
2. Selection.Cells.Count>1, akkor meg kell nézni a Selection.MergeCells tulajdonságot (értékeit írtam korábban).Üdv.
-
Fferi50
Topikgazda
válasz
poffsoft
#27711
üzenetére
Szia!
Bocs, de én úgy gondolom, hogy a B1:B3 selection az nem egyenlő összevont cellákból álló tartománnyal, hanem csak 3 cellával. Ez igaz a C1:C3 tartományra is, Illetve, mindkét tartományban ettől függetlenül lehetnek összevont cellák!!
Ezért mindenképpen meg kell nézni a MergeCells tulajdonságot.
Ez úgy viselkedik, ha a kijelölt tartomány összevont, akkor True, ha vegyes, akkor Null, ha nincs benne összevont cella, akkor False az értéke.Azt, hogy összefüggő-e a kijelölés, az Areas tulajdonsággal tudod megnézni. Ha Selection.Areas.Count<>1, akkor a kijelölés nem összefüggő. A Count megmondja, hány részből áll a kijelölés, ezeken külön-külön kell végigmenni.
Az Activecell.Mergearea.Cells.Count pedig csak azt az egy cellát nézi, amit éppen kijelöltél - többszörös kijelölésnél is! - tehát félrevezető eredményt ad.
Üdv.
-
Fferi50
Topikgazda
válasz
Kal-El
#27688
üzenetére
Szia!
Bocs, de a csatolt képen azt láttam, hogy a 10. sorban ott vannak az értékek, azok a számok, amiket világoszöldre váltasz. Lehet rosszul gondolom, de azok nem cellákban vannak?
Másrészt, lehet a skálázást az oszlopok értékéhez is viszonyítani, akkor két képlet kell.
10-ig =OSZLOP()/2<=$B$5
10-től=OSZLOP()-10<=$B$5Ha nem az A oszloptól indul a skála, akkor annyi oszlopot még ki kell belőle vonni, hogy helyes eredményt kapj (ezt ki tudod kísérletezni).
Üdv.
-
Fferi50
Topikgazda
válasz
Hege1234
#27681
üzenetére
Szia!
A K oszlopban képlet =HA(HA(C2="long";F2-E2;E2-F2)>0;HA(C2="long";F2-E2;E2-F2)*10000;"")
Az L oszlopban képlet =HA(HA(C2="long";F2-E2;E2-F2)<0;HA(C2="long";F2-E2;E2-F2)*-10000;"")A K oszlopban a feltételes formázás - adott tartalmú cellák formázása, ha a cellaérték nagyobb mint 0 - kitöltés világoszöld - betűszín sötétzöld.
Az L oszlopban a feltételes formázás - adott tartalmú cellák formázása, ha a cellaérték kisebb mint 0 - kitöltés rózsaszín - betűszín piros.Üdv.
-
Fferi50
Topikgazda
válasz
Kal-El
#27683
üzenetére
Szia!
Ha B5 cellában van az érték és a 8. sorban van a "státuszjelző", a 10.sorban pedig a "skála", akkor a feltételes formázás képlete a 8. sorra (érvényesség =$A$8:$DF$8)
=A$10<=$B$5
Ebben az esetben a feles értékeket is be kell írnod a 10.sorban levő skálába.Ha nem az első oszlopban kezdődik a jelző, akkor A$10 helyett a megfelelő oszlop betűjelét írd be és attól az oszloptól indul a feltételes formázás érvényessége is.
Üdv.
-
Fferi50
Topikgazda
válasz
Hege1234
#27675
üzenetére
Szia!
Pár kérdés:
A mintában a profit oszlop milyen számítással jön ki? Az árfolyam különbségen kívül mit kell még levonni? Milyen devizában van a profit?
A comission mindig $5, akármiben van az üzlet kötve? Ha igen, milyen árfolyamon számoljuk át a profit devizanemére?Az első sort rögzítheted a nézet - ablaktábla rögzítése menüpontban, előzetesen állj rá az A2 cellára.
Üdv.
-
Fferi50
Topikgazda
válasz
Kal-El
#27676
üzenetére
Szia!
Azért tisztázni kellene még egy-két dolgot:
A több cella azonos sorban vagy azonos oszlopban van, esetleg "összevissza"?
A különbség minden esetben +1 a cellaszínezés feltételében?
Az A1 (azaz az induló cella) is szineződjön?Ha egy sorban vannak, kijelölöd a cellákat A2-től végig, a feltétel képlet pedig így néz ki: B1>A1+1 és ez érvényes a kijelölés egészére. Ha az A1 cellát is szeretnéd színezni, arra külön feltétel kell, A1>1 ezt lehet képlettel, vagy adott tartalmú cellák formázása pontból.
Üdv.
-
Fferi50
Topikgazda
Szia!
Ez a jelenség az Excel számtárolási sajátosságaiból adódik, a lebegőpontos tárolás miatt a "sokadik" tizedesjegyekben eltérés lehetséges.
Bővebben is olvashatsz erről több helyen is (bocsi, de most nem tudok linket csatolni).
Egyébként gondolom tudod, hogy az Excel 15 értékes számjegyet tud tárolni, ha ezen túlnyúlik a szám, akkor a többi mind 0 lesz, függetlenül attól, hogy éppen mennyit írtál arra a helyre (természetesen szöveg formátummal ez nem így van).Üdv.
-
Fferi50
Topikgazda
válasz
sedyke
#27622
üzenetére
Szia!
Bocs, rosszul fogalmaztam - az egyedi értékekre gondoltam, amikor a sorokról/oszlopokról beszéltem:
pl. van 1,9,21,30,100 érték. Akkor itt elvileg 100 sornak kellene lennie, amiből 5 sorban van érték. Igazából az a kérdés, hogy hány olyan tétel van, amihez nem tartozik a táblában érték, de meg kellene jeleníteni, mint lehetséges értéket.
Milyen típusú az a tételsor, amihez a teljes megjelenítést szeretnéd hozzárendelni?Üdv.
-
Fferi50
Topikgazda
válasz
scott_free
#27616
üzenetére
Szia!
Ha csak ez az egy sor van, akkor szerintem nem érdemes vele foglalkozni, mert copy-paste módszerrel gyorsan át tudod írni.
Ha több sor is van, csinálni kell egy külön makrót és azt kell minden egyes textboxnál meghívni.
Üdv.
-
Fferi50
Topikgazda
-
Fferi50
Topikgazda
válasz
scott_free
#27612
üzenetére
Szia!
Egyrészt nem értem, miért használsz Like operátort, ha nincs benne jóker karakter, én úgy látom, itt pontos egyezéseket szeretnél ellenőrizni, amihez az = operátor használható.
Másrészt az if feltételeket összekapcsolhatod az or operátorral:
if ccontrol.tag like/= "L1" or ccontrol.tag like/= "ED" or .....
Harmadrészt select case-sel
Select case ccontrol.tag
case "L1","ED","EDK",....end select
Továbbá használhatnád a With rövidítést is még:
with ccontrol.font
.size=11
.name="Arial"
end withÜdv.
-
Fferi50
Topikgazda
válasz
Okoska2
#27589
üzenetére
Szia!
Megpróbálkoztam az ajánlott tömbös módszerrel, de nem nagyon akar engedelmeskedni.
Áthidaló megoldásként a következőt javaslom:
Gondolom, a kódok a "leltár munkalap" A oszlopában vannak. Ide az első sorba beírnám a munkalapok neveit.
Ezután a B2 cella képlete:
=FKERES($A2;INDIREKT("'" & B$1 & "'!A500:B500");2;0)A tartományt persze aktualizálnod kell. Ezt a képletet húzhatod lefelé és jobbra is. Az utolsó oszlopba pedig beteszel egy szum függvényt, amivel összesíted a sor értékeit.
Ha a munkalapokon nem a B oszlopban vannak a cikkszámok összesítendő adatai, akkor az fkeres tartományát annak megfelelően kell módosítani - beleértve az oszlop számot (harmadik paraméter) is.
Szerintem ez időben sem igényel túl sokat és az eredmény viszont biztosan helyes.
Üdv.
-
Fferi50
Topikgazda
Szia!
Szerintem rendben van ez így: A képlet első része a napi 3000 Ft-ot számolja, a második része pedig a törtnapra jutó órákat árazza, az óradíjas szorzat és a maximális 3000 Ft minimumát veszi (min függvény!).
Nyilván, ha több napig tartott a kölcsönzés, akkor a napi 3000 Ft minden napra fizetendő.Üdv.
-
Fferi50
Topikgazda
válasz
Okoska2
#27579
üzenetére
Szia!
A függvényes keresés csak egy-egy munkalapon működik, azaz ugyanezt a képletet annyiszor kell beírnod a megfelelő munkalapra hivatkozással egy sor celláiba, ahány munkalapon keresni szeretnél - és ezt még húzni sem lehet
. Az általad írt hivatkozás munkalapokra nem működik.Viszont a keresés funkciónál megadhatod a hatókört - munkalap vagy teljes munkafüzet -, továbbá kérhetsz listát és abban szépen oda tudsz ugrani a megfelelő cellára.
Vagy makrót kell a keresésre írni, ami végigmegy az összes munkalapon.
Üdv.
-
Fferi50
Topikgazda
válasz
kacsaesokos
#27568
üzenetére
Szia!
Azt gondolom, az lehet a probléma, hogy az adott fájlban még nincs "segédtábla" nevű munkalap, ezért szeretné az "eredeti" forrást látni, ami akkorra már nyilván be van zárva.
Szerintem érdemes lenne a forráslapot átmásolni, mielőtt az érvényesítéssel rendelkező cellákat átmásolod.
Ha még ezután is az "eredeti" forrrást látja, akkor az adatok, kapcsolatok között látod ezt a fájlt, megszakítod a kapcsolatot és akkor visszatérhet a "saját" munkalapjára.
Vagy keres-cserél funkcióval megkeresed a [valami.xls] hivatkozást tartalmazó cellákat és bennük kicseréled ezt üres szövegre - összes cseréje funkcióval.Üdv.
-
Fferi50
Topikgazda
válasz
kacsaesokos
#27564
üzenetére
Szia!
Milyen módon adtad meg a választék listát? Elképzelhető, hogy nem tud hivatkozni a "forrás" munkafüzetre, ezért nem jelenik meg.
Üdv.
-
Fferi50
Topikgazda
Szia!
Ha az összesítés nem megy valami miatt (ami könnyen előfordulhat), akkor 2 megoldást látok:
1.) A képletet úgy állítod össze, hogy összeadod az egyes munkalapok sumif eredményeit:
=sumif(sheet1!A:A,Sheet1!A1,Sheet1!B:B)+sumif(sheet2!A:A,Sheet1!A1,Sheet2!B:B)+..így tovább minden munkalapra hivatkozva (a példádban B1 van kritériumnak megadva, de az akkor nyilván egy másik munkalapon van, hiszen itt az összegzendő értékek vannak).
2.) Csinálsz egy új munkalapot (segédnek), erre a munkalapra átmásolod valamennyi munkalap A:B oszlopát, majd kiadod rá a sumif képletet.Üdv.
-
Fferi50
Topikgazda
válasz
sedyke
#27554
üzenetére
Szia!
A Pivottábla tulajdonságai között van ilyen:
a háttérbeni frissítés engedélyezése illetve
adatfrissítés a fájl megnyitásakor, ehhez kapcsolódik a külső adatok eltávolítása a munkalapról bezárás előtt.
Ez utóbbi csökkenti a méretet, de lassítja a megnyitást.Próbáld ezeket a beállításokat variálni.
Úgy gondolom, gyorsítaná a működést, ha csak az első pivottábla kapcsolódna közvetlenül az adatforráshoz, a többi pedig ezt az első pivottáblát használná forrásként (ugyanis abban is látszik az eredeti forrás minden adata rejtetten).
Üdv.
-
Fferi50
Topikgazda
válasz
ElemiKoczka
#27547
üzenetére
Szia!
Ehhez azért látni kellene a receptek "tárolási" struktúráját. A recept száma alapján az FKERES függvénnyel dolgozhatsz, minden munkalapra külön-külön megadva - nyilván külön-külön cellában.
A másik megoldás a makró.Üdv.
-
Fferi50
Topikgazda
válasz
swoody
#27543
üzenetére
Szia!
A Ha és az Fkeres függvények többszörös egymásba ágyazása szükséges, az eredmény attól függ, hogy van-e már előtte levő cellában érték, illetve meg van-e jelölve (1) az adott cella.
Szerintem próbálj végigmenni egy - egy képlet alkotó részein és bizonyára meg fogod érteni.Mást (többet) most ilyen "időtávból" nem tudok gyorsan mondani. Ha konkrét kérdésed lenne, azért írd meg bátran.
Üdv.
-
Fferi50
Topikgazda
válasz
slashing
#27542
üzenetére
Szia!
Itt egy link, aminek az ötletét korábban én is használtam.
A trükk abban áll, hogy a képet át kell másolni egy chartra (diagram) és a chart már menthető képfájlként!Üdv.
Új hozzászólás Aktív témák
- Formula-1
- Gamepad
- Xiaomi 15 - kicsi telefon nagy energiával
- Forza sorozat (Horizon/Motorsport)
- Székesfehérvár és környéke adok-veszek-beszélgetek
- Rezsicsökkentés, spórolás (fűtés, szigetelés, stb.)
- Apple MacBook
- Fotók, videók mobillal
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Elektromos (hálózati és akkus) kéziszerszámok, tapasztalatok/vásárlás
- További aktív témák...
- GYÖNYÖRŰ iPhone 12 Mini 128GB Black-1 ÉV GARANCIA -Kártyafüggetlen, MS4203, 94% Akksi
- PS Plus előfizetések kedvező áron
- Apple iPhone 16 Pro Max 256GB Black Titanium használt, szép állapot 96% akku (247 ciklus) 6 hó
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7600X 32/64GB RAM RTX 5060 Ti 8GB GAMER PC termékbeszámítással
- BESZÁMÍTÁS! GIGABYTE RTX 3080 Gaming OC videokártya garanciával hibátlan működéssel
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
).

)
1 cellánál gondolom érvényesítéssel listából lehet választani.
. Az általad írt hivatkozás munkalapokra nem működik.
Fferi50