Hirdetés
-
LOGOUT.hu
A Microsoft Excel topic célja segítséget kérni és nyújtani Excellel kapcsolatos problémákra.
Kérdés felvetése előtt olvasd el, ha még nem tetted.
Új hozzászólás Aktív témák
-
-
csferke
senior tag
Delila!
Csak a napokban volt időm foglalkozni a #15814-es válaszoddal. Köszönöm.Volna azonban még kérdésem. Angol Excel 2007
1.
Lap1A1 cellában, legördülőből kiválasztok egy céget. Egy gombhoz (CommandButton) szeretném rendelni a következőt. Klikk a gombra. A Lap1A1 alapján megkeresi a Lap2B oszlopban a megfelelőt és ennek a sorában a Lap2L oszlopban lecseréli a dátumot a mai dátumra.2.
Lap1B27:B38-ig lehetnek adatok, nincs mindig kitöltve minden cella. Szintén gomb (CommandButton) klikk.
Ha nem üres a B27 akkor Lap2A oszlopában keresse meg a Lap1B27 adatot és a Lap2F oszlopban az adott sorban növelje a számot a Lap1F27-ben lévő számmal.
És ez így minden nem üres Lap1B27:B38 cella alapján.Remélem sikerült érthetően megfogalmaznom óhajomat.
köszönettel
[ Szerkesztve ]
-
D5
aktív tag
Hali!
Miért van az, hogy egyszer hibátlanul lefut a makró, máskor meg a "Run-time error '1004': Method 'Range' of object'_Global' failed" üzenetet kapom? -
D5
aktív tag
válasz sztanozs #15954 üzenetére
Sheets("Alap").Range("G9").Copy
bevétel = Sheets("Munka2").Range("E4")Range(bevétel).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=FalseA Debugger a "Range(bevétel).Select" résznél írja a hibát.
Nem értem, hogy miért. -
sztanozs
veterán
Miért kell Range(bevétel)? A bevétel-nek már magában is Range típusúnak kell legyen...
Hogy definiálod a bevétel változót?
Csináld inkább ezt:
Sheets("Alap").Range("G9").Copy
Dim bevétel as Range
Set bevétel = Sheets("Munka2").Range("E4")
bevétel.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=FalseVagy még egyszerűbben:
Sheets("Alap").Range("G9").Copy
Sheets("Munka2").Range("E4").Select
Selection.PasteSpecial Paste:=xlPasteValuesAmúgy nem árt leellenőrizni, hogy mi az aktív workbook, ha nem az, amire számítasz (nincsenek ilyen Worksheet-ek rajta), azon is simán elhasal - vagy mást csinál, mint amit szeretnél...
[ Szerkesztve ]
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...
-
Delila_1
veterán
válasz csferke #15952 üzenetére
Sub Datum_L_be()
Dim sor As Integer
sor = Application.WorksheetFunction.Match([A1], Sheets(2).Columns(2), 0)
Sheets(2).Cells(sor, "L") = Date
End SubSub Novel_F_et()
Dim sor As Integer, CV As Object
For Each CV In [B27:B38]
If CV <> "" And IsNumeric(CV) Then
On Error GoTo Kov
sor = Application.WorksheetFunction.Match(CV, Sheets(2).Columns(1), 0)
Sheets(2).Cells(sor, "F") = Sheets(2).Cells(sor, "F") + Cells(CV.Row, "F")
End If
Kov:
Next
End SubProgramozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
kymco
veterán
Sziasztok!
Ha visual basic-ből módosítani szeretnék egy zárolt cellát, hogyan tehetem meg? Jelenleg, ha zárolom, akkor hibaüzenetet kapok a visual basic-es módosításkor, viszont nem szeretném, hogy a felhasználó maga írogasson be abba a cellába, ergo zárolnom kellene.www.refujvaros.hu
-
Delila_1
veterán
-
Excelbarat
tag
válasz Delila_1 #15963 üzenetére
Esetleg egy másik megoldás bár ez nem biztos h a te problémádra megoldás de másnak jól jöhet ha védett lapon indít makrót:
makró elején:
Sheets("munkalap").Unprotect Password:="jelszó"
makró végén újra "lekódoljuk"
Sheets("munkalap").Protect Password:="jelszó"de tudni kell h a jelszó szerepel a kódban tehát célszerű (igaz mezei júser nem fog VBA-ban turkálni, de hozzáteszem hogy a felhasználó mindenre képes ) a makróprogramot is levédetni ezt pedig a következőképpen tudod megcsinálni:
Visual Basic Tools menü - VBAProject Properties felső fülnél Protection, kipipál és jelszót beír.
bár kódolt makrókkal és munkalappal idegesítő dolgozni mert ha bütykölni kell valamit akkor fel kell oldani először -
Delila_1
veterán
válasz poffsoft #15967 üzenetére
Ott az volt a hiba, hogy a terület értékadása elejéről lemaradt a Set.
bevétel = Sheets("Munka2").Range("E4") helyesen
Set bevétel = Sheets("Munka2").Range("E4"), ahogy a válaszában Sztanozs is írta.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
D5
aktív tag
Köszi szépen!
Jó érzés, hogy bármikor fordulhatok ide segítségért (ami mostanában eléggé elkél... ) -
sztanozs
veterán
válasz poffsoft #15972 üzenetére
A set nélküli értékadás azért fut le (ha nincs egzaktul definiálva a változó), mert ha nem sikerül objektumként átadnia, akkor a hívás vissza tudja adni a range értékét is (mint a default Value property értéke - ami ráadásul nem a range címe, hanem a range első elemének a tartalma) és ezt egy későbbi Range hívásban (mint ahogy csináltad is) fel lehet használni. A probléma az , hogy nem biztos, hogy jó (sőt szinte biztos, hogy nem jól felhasználható) értéket ad vissza a Range a default property-n... Azt viszont nem tudja felhasználni a Range függvény, ami ezt a hibát adja vissza...
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...
-
csferke
senior tag
válasz Delila_1 #15958 üzenetére
Delila!
Köszi a gyors választ/megoldást.
Sub Novel_F_et()
Dim sor As Integer, CV As Object
For Each CV In [B27:B38]
If CV <> "" And IsNumeric(CV) Then
On Error GoTo Kov
sor = Application.WorksheetFunction.Match(CV, Sheets(2).Columns(1), 0)
Sheets(2).Cells(sor, "F") = Sheets(2).Cells(sor, "F") + Cells(CV.Row, "F")
End If
Kov:
Next
End SubMivel a B27:B38-ban nem szám van hanem egy-egy termékhez tartozó kód (betűkből és számokból) sz.tem az if ágban nem kell az IsNumeric(CV).??
Nem értem, hogy mi szükség van az On Error GoTo Kov és a Kov: sorokra[ Szerkesztve ]
-
lacid90
csendes tag
Sziasztok!
Hogyan lehet egy cella értékét eltárolni úgy, hogy lenullázás után is valahol megmaradjon az értéke. -
Excelbarat
tag
válasz lacid90 #15975 üzenetére
Makróval oldható meg bár ebben nem vagyok otthon, de valami olyasmi a megoldás hogy ha módosul a cella akkor azt kigyűjti (értsd átmásolja ) egy másik cellába v. munkalapra. (célszerűbb munkalapra gyűjteni és lekódolni) esetleg egy gomb hozzáadása ami megcsinálja, (de ha minden igaz létezik olyan hogyha módosul a cella akkor lefut x makró gondolom könnyű szerrel megírható)
poffsoft és Delila_1 biztosan tud segíteni ebben, sztem csak idő kérdése és elő is jönnek egy megoldással
valami ilyesmi:
Sub nullázó()
Sheets("munkalapnév").Select
If (Cells("A5").Value = "0") Then
Range("A5").Select
Selection.Copy
Range("F5").Select
ActiveSheet.Paste
End If
End Sub[ Szerkesztve ]
-
Excelbarat
tag
válasz Excelbarat #15977 üzenetére
hopsz ez értelmetlen mert akkor a nullát másolja át
-
sztanozs
veterán
válasz poffsoft #15976 üzenetére
Őőőő, de
Sőt nem is neked akartam válaszolni; vagyis pontosabban első olvasatra azt hittem kérdés, és csak később visszaolvasva jöttem rá, hogy magyarázatMondjuk azt sem értem, hogy hogy tudott az eredeti programja "egyszer működni, egyszer meg nem működni"...
[ Szerkesztve ]
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...
-
Mutt
senior tag
válasz lacid90 #15975 üzenetére
Hello,
Hogyan lehet egy cella értékét eltárolni úgy, hogy lenullázás után is valahol megmaradjon az értéke.
A munkalap SelectionChange és Change eseményére kell tenned makrókat.
A Change csak akkor fut le amikor a cella értéke már megváltozott, itt a korábbi értéket már nem látod, ezért érdemes amikor a cellát kiválasztod (ez a SelctionChange) megjegyezni a korábbi értéket.Feltöltöttem egy lehetséges megoldást ide
http://www.filedropper.com/15975backupPróbáltam több logikát is beépíteni, amit a kommentek alapján akár te is ki tudsz ütni.
1. Nyit egy új munkalapot (Backup névvel) és oda menti az eredeti értéket, vmint a módosult cella címét.
2. Csak akkor ment, ha a cella tényleg megváltozik, ha ugyanaz kerül be akkor nem ment. Ha erre nem tartasz igényt akkor töröld ezt a részt:
vEredeti <> Target.Resize(1, 1).Value
3. Nem ment akkor sem, ha üres cella volt eredetileg. Ha ez sem kell, akkor ezt vedd ki:
And vEredeti <> ""
4. Ha egy cellában egy képlet van, akkor a képletet másolja és nem az eredményét. Ha ezzel nem akarsz élni, akkor a SelectionChange-ben csak ez legyen:
vEredeti = Target.Resize(1, 1).Value
bFuggvenytTartalmaz = FalseHátrányok:
1. Érvényesítést (Data Validation-t) használó celláknál nem megy.
2. Több cella egyidejű módosításakor csak a tartomány bal felső sarkában lévő cellára megy (ennek kikerülésére a második lapon próbáltam egy másik megoldást is csinálni, de az sem 100%-os).
3. Nem teszteltem túl, ezért lehet benne hiba.Itt a kód, ha a fájl már nem lenne letölthető:
Option Explicit
Public vEredeti 'ez tartalmazza majd az eredeti értéket
Public bFuggvenytTartalmaz As Boolean 'ez akkor lehet hasznos ha függvényből jön a cella érték
Private Sub Worksheet_Change(ByVal Target As Range)
Const vBackupSheet As String = "Backup"
Dim vLastRow
Dim wsNew As Worksheet
Dim wsCurrent As String
'ha az eredeti és az új érték eltér és eredetileg nem üres volt a cella akkor módosítunk
If vEredeti <> Target.Resize(1, 1).Value And vEredeti <> "" Then
'megnézzük hogy létezik-e a munkalap ahova a korábbi értékeket mentjük
On Error Resume Next
Set wsNew = Worksheets(vBackupSheet)
If Err Then
wsCurrent = ActiveSheet.Name
Set wsNew = Sheets.Add
With wsNew
.Name = vBackupSheet
'ha akarod akkor a lenti sorral rejtetté tudod tenni a lapot
'.Visible = xlSheetHidden
End With
Sheets(wsCurrent).Activate
End If
'megnézzük hogy melyik az utolsó sor a backup munkalapon (a B oszlopban mindig lesz érték)
vLastRow = Application.WorksheetFunction.CountA(ThisWorkbook.Sheets(vBackupSheet).Range("B:B")) + 1
'ha már nincs a munkalapon több üres sor akkor leállunk a naplózással
If vLastRow > ThisWorkbook.Sheets(vBackupSheet).Rows.Count Then
MsgBox "Nincs több hely a mentésre!", vbOKOnly, "Hiba"
Exit Sub
End If
'adunk egy fejlécet a backup munkalapnak
If vLastRow = 1 Then
ThisWorkbook.Sheets(vBackupSheet).Range("A" & vLastRow) = "Eredeti érték"
ThisWorkbook.Sheets(vBackupSheet).Range("B" & vLastRow) = "Módosított cella"
vLastRow = vLastRow + 1
End If
'mentjük az eredeti értéket és hogy melyik cellából jött
If bFuggvenytTartalmaz Then
ThisWorkbook.Sheets(vBackupSheet).Range("A" & vLastRow) = "'" & vEredeti
Else
ThisWorkbook.Sheets(vBackupSheet).Range("A" & vLastRow) = vEredeti
End If
ThisWorkbook.Sheets(vBackupSheet).Range("B" & vLastRow) = Target.Resize(1, 1).Address
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'ha függvényt tartalmaz a cella, akkor a függvényt másoljuk, különben az értékét
If Range(Target.Address).Resize(1, 1).HasFormula Then
vEredeti = Target.Resize(1, 1).Formula
bFuggvenytTartalmaz = True
Else
vEredeti = Target.Resize(1, 1).Value
bFuggvenytTartalmaz = False
End If
End Subüdv.
[ Szerkesztve ]
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
lacid90
csendes tag
Hát nem gondoltam volna, hogy ez ilyen komoly makróval oldható meg (amit még nem próbáltam ki). Leírom pontosan, hogy mit szeretnék csinálni. Adott három cella (A1,B1,C1). Az A1-ben változó érték, amiből a B1-ben mindig kiszámol egy értéket (pl.%), egészen addig, amíg a C1 értéke 0, vagy üres. Ha a C1-be bekerül valami érték, akkor kellene a B1 utolsó értékét elmenteni további számolás céljára, mivel a C1-ben lévő érték kivonódik az A1-ből, és ezért a B1 értéke is automatikusan megváltozik. Nekem az ez előtti B1 értékre lenne szükségem, és ha lehet makró nélkül.
A segítségre előre is köszönöm. -
sztanozs
veterán
válasz lacid90 #15981 üzenetére
Vagy makróv al végigszámolod ciklusban, vagy pedig lehúzod a képletet (második sort) - valahogy így:
A | B | C
1 A1 | fn1(A1) | fn2(B1)
2 A1-C1 | fn1(A2) | fn2(B2)
3 ...[ Szerkesztve ]
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...
-
Delila_1
veterán
válasz csferke #15974 üzenetére
Ha nem számok vannak a tartományban, akkor valóban felesleges az isnumeric.
A hibakezelést azért tettem be, mert előfordulhat, hogy a Lap1 B oszlopában szereplő valamelyik tétel nem található meg a Lap2 B oszlopában, akár elírás miatt.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
csferke
senior tag
-
-Mike-
addikt
Sziasztok
Megtudná valaki csinálni nekem, szerintem annyira nem bonyolult csak én nem vagyok képes rá, ha nehéz akkor mea culpa.
Adott az 5-ös lottó nyerő számai [link]
Kellene 5 üres cella, amiben ha beírnék 1-90-ig 5 számot, ahogy a lottóban is szokás, kiadná, hogy melyik héten hány találatom lett volna azzal az 5 számmal.Tud segíteni valaki?
-
Delila_1
veterán
válasz -Mike- #15986 üzenetére
Az 5 számot az N1:R1 tartományba írva a képlet Q2-től lefelé
=DARABTELI(L2:P2;$N$1)+DARABTELI(L2:P2;$O$1)+DARABTELI(L2:P2;$P$1)+DARABTELI(L2:P2;$Q$1)+DARABTELI(L2:P2;$R$1)
Szerk.: Feltételes formázást is adhatsz az L2:Psok tartományra. A képlet
=VAGY(L2=$N$1;L2=$O$1;L2=$P$1;L2=$Q$1;L2=$R$1)
[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
veterán
-
-Mike-
addikt
válasz Delila_1 #15989 üzenetére
Nagyon szépen köszönöm!
Nem akarok telhetetlennek tűnni, de ha ilyen egyszerűen megy neked, ha lennél olyan kedves és ugyanezen elgondolás útján megtudnád csinálni még a 6-os, 7-es, joker és a keno-t is?
6osnál 45ből 6ot
7esnél 35ből 7et kell eltalálni.
Joker az más, az utolsó kettő találat számít, majd az utolsó 3 és így előrébb, utolsó 4, utolsó 5 majd mind a 6 szám telibe.
Keno 20 húzott számból 10et kell eltalálni.[ Szerkesztve ]
-
Excelbarat
tag
válasz -Mike- #15992 üzenetére
Ha jól értettem így gondoltad:
[lottók]
érdekes ha beírsz egy egy telitalálatot pl jokernál elég sokszor kijön a telitalálat, látszik h gép keveri
jó játszadozást
mindez nem jöhetett volna létre Delila_1 ötletei nélkül
(a találataid számát gyakorisággal határoztam meg ezt lehet máshogy is nekem ez a megoldás tetszett, de ha van egy könnyebb, gyorsabb megoldás rá várom az ötleteket)Ui: azt hiszem a héten még játszok is egy már nyerő kombóval az ötösön ha minden igaz célértékkereséssel meg is oldható hogy melyik az a kombó ami a legtöbbet nyert
[ Szerkesztve ]
-
Excelbarat
tag
válasz Excelbarat #15993 üzenetére
Célérték nem jó, tévedtem de solverral "elvileg" meg lehet csinálni de ahogy nézem nem akaródzik..... hiába állítom be hogy különböző legyenek a számok
-
lappy
őstag
válasz Excelbarat #15993 üzenetére
Szia!
Ha visszaolvasol akkor rájössz, hogy a joker nem úgy működik!
Mindig hátulról kell előre haladni és ha 2,3,4, 5, 6 egyezik az adott joker számmal akkor van nyeremény!Bámulatos hol tart már a tudomány!
-
Excelbarat
tag
akartam is írni, hogy ezekkel nem játszok úgyhogy lehetséges hogy hiba van a számításba mert nem tudom a játék szabályait a joker-en kívül a többi játéknál csak egyeznie kell a számoknak mint pl. 5-ösnél?
Csodáltam is hogy ennyi nyertes szelvény lenne egy egy számkombinációval[ Szerkesztve ]
-
lappy
őstag
válasz Excelbarat #15996 üzenetére
A jokeresnél ez jó! Csak előtte össze kell fűzni a számokat és egy cellába kell írni a feltett számot!
=ÖSSZEFŰZ(N2;O2;P2;Q2;R2;S2)
=HA(AZONOS($T2;$O$1);6;HA(JOBB($T2;5)=JOBB($O$1;5);5;HA(JOBB($T2;4)=JOBB($O$1;4);4;HA(JOBB($T2;3)=JOBB($O$1;3);3;HA(JOBB($T2;2)=JOBB($O$1;2);2;0)))))Bámulatos hol tart már a tudomány!
-
-Mike-
addikt
válasz Excelbarat #15993 üzenetére
Skandinál (7esnél) is van egy kis gáz mert azt kétszer húzzák így a kihúzott számok egy sorban kétszer szerepelnek, 2*7 azaz 14. Ezt és a Jokert kijavítva valaki feltöltené újból a táblázatot? Az eddigieket köszönöm, nagyon jó.
[ Szerkesztve ]
-
Excelbarat
tag
válasz -Mike- #15998 üzenetére
Gyors megnéztem a skandit a táblázatban és úgy érzem még magyarázatra szorul.
"Skandinál (7esnél) is van egy kis gáz mert azt kétszer húzzák így a kihúzott számok egy sorban kétszer szerepelnek, 2*7 azaz 14.". A 14 számból tényleg van ami 2x szerepel de van olyan is ami 1x! akkor most hogyan is működik? a legegyszerűbb az ha elmondod hány számot kell tippelni és az hogyan viszonyul a kihúzott számokhoz (magyarán mikor lesz egyes, kettes vagy nem tudom itt mik vannak, de mikor nyersz....) remélem érhető volt, hogy mik a kívánalmak
én ma már nem tudom befejezni, holnap szövegértés vizsga utána majd nekiugrok ha senki nem oldja meg addig[ Szerkesztve ]
-
-Mike-
addikt
válasz Excelbarat #15999 üzenetére
35 számból 7et kell eltalálni. De egyszer húznak kézzel hetet, majd egy másik gömből húznak géppel még hetet de itt is mind a 35 számból. A táblázatban úgy a legegyszerűbb, ha az I és J oszlop közé beszúrsz egy üreset és akkor látod hogy kétszer 7.
Új hozzászólás Aktív témák
Hirdetés
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - 2990 Ft-tól!
- Star Wars Outlaws GeForce RTX 40 Bundle - lepd meg magad!
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- Eredeti Microsoft termékek - MEGA Akciók! Windows, Office Pro Plus, Project Pro, Visio Pro stb.
- Vírusirtó, Antivirus, VPN kulcsok
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: HC Pointer Kft.
Város: Pécs