-
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
-
m.zmrzlina
senior tag
válasz lomajpure #11419 üzenetére
Próbáld ezt:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row >= 3 And Target.Row <= 5 And Target.Column <= 32 And Target.Column >= 3 Then
If ActiveCell.Interior.ColorIndex = 24 Then
Cells(Target.Row, 36).Value = Cells(Target.Row, 36).Value - 8
Target.Interior.ColorIndex = xlNone
Exit Sub
End If
Cells(Target.Row, 36).Value = Cells(Target.Row, 36).Value + 8
Target.Interior.ColorIndex = 24
End If
End Sub[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz lomajpure #11419 üzenetére
Bocs ez nem az eredet színt adja vissza hanem a "Nincs kitöltést". Az eredeti szín már nem lesz ennyire egyszerű.
Valahol mindenképpen tárolni kell az eredeti szín kódját. Az jó lesz ha ezen a munkalapon elrejtjük valahová vagy tegyük másik munkalapra?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz lomajpure #11422 üzenetére
Akciós áron sikerült hozzájutnom több tonna IF..THEN..END IF szerkezethez ezért most mindent azzal akarok megoldani
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row >= 3 And Target.Row <= 5 And Target.Column <= 32 And Target.Column >= 3 Then
If Target.Interior.ColorIndex <> 24 Then ActiveCell.Offset(10, 0).Value = ActiveCell.Interior.ColorIndex
If ActiveCell.Interior.ColorIndex = 24 Then
Cells(Target.Row, 36).Value = Cells(Target.Row, 36).Value - 8
Target.Interior.ColorIndex = ActiveCell.Offset(10, 0).Value
Exit Sub
End If
Cells(Target.Row, 36).Value = Cells(Target.Row, 36).Value + 8
Target.Interior.ColorIndex = 24
End If
End Sub -
m.zmrzlina
senior tag
válasz m.zmrzlina #11426 üzenetére
Illetve hogy legyünk konzekvensek és ne keveredjen a Target.... meg az Activecell....:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row >= 3 And Target.Row <= 5 And Target.Column <= 32 And Target.Column >= 3 Then
If Target.Interior.ColorIndex <> 24 Then Target.Offset(10, 0).Value = Target.Interior.ColorIndex
If Target.Interior.ColorIndex = 24 Then
Cells(Target.Row, 36).Value = Cells(Target.Row, 36).Value - 8
Target.Interior.ColorIndex = Target.Offset(10, 0).Value
Exit Sub
End If
Cells(Target.Row, 36).Value = Cells(Target.Row, 36).Value + 8
Target.Interior.ColorIndex = 24
End If
End Sub[ Szerkesztve ]
-
m.zmrzlina
senior tag
-
m.zmrzlina
senior tag
Csak Select Case szerkezetben kell a páratlan sor helyett a párosból kivonni az 1-et így:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cella As Range
Dim datumoszlop As Integer
Dim maradekos As Integer
maradekos = (Target.Column Mod 2)
Select Case maradekos
Case Is <> 0
datumoszlop = Target.Column
Case Is = 0
datumoszlop = Target.Column - 1
End Select
If Not Application.Intersect(Target, Range(Cells(3, datumoszlop), Cells(18, datumoszlop + 1))) Is Nothing Then
For Each cella In Range(Cells(3, datumoszlop), Cells(18, datumoszlop + 1)).Cells
If Not cella.Address = Target.Address And Target.Value <> "" Then
If cella.Value = Target.Value Then
MsgBox Target.Value & " erre az időpontra nem osztható be!"
Target.Value = ""
Exit Sub
End If
End If
Next
End If
End SubA napokat írhatom a végtelenségig?
Igen, bár ennek a megoldásnak van legalább egy komoly hibája, mégpedig hogy ez a sor:
If Not cella.Address = Target.Address And Target.Value <> "" Then
meg ez:
If cella.Value = Target.Value Then
kiakad, ha nem egyetlen cellán, hanem tartományon szeretnél műveletet végezni. (pl Beszúrás stb..) -
m.zmrzlina
senior tag
válasz m.zmrzlina #11449 üzenetére
Csak Select Case szerkezetben kell a páratlan sor helyett a párosból kivonni az 1-et így:
Természetesen a "páratlan sor" helyesen "páratlan oszlop".
-
m.zmrzlina
senior tag
1, Jelöld ki a teljes adattartományt és rendezd arra az oszlopra amiben az azonosítók vannak!
2, Szúrj be egy segédoszlopot az azonosítók oszlopa mellé!
3, A segédoszlop első cellájának a képlete (ha nincs fejléc és első sortól indul az adat és A-ban vannak az azonosítók) =IF(A1=A2;1;0). Ezt lemásolod az utolsó sorodig a segédoszlopban!
4, Jelöld ki a segédoszlopot és nyomj egy Ctrl+c-t!
5, Ctrl+Shift+v vagy Edit>Paste special. Csak a Numbers-t hagyod kipipálva és rámásolod a vágólapot a segédoszlopra (gyakorlatilag a segédoszlop képleteit felülírod saját értékükkel)
6, Rendezd az adattartományt a segédoszlopra!
7, Töröld az összes sort amiben a segédoszlop cellájának az értéke =1!
8, Töröld a segédoszlopot is!
Nem magamtól vagyok ilyen okos Innen szedtem.
Ja és ki is próbáltam OOo.Calc 3.1.1-ben
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Van egy UserForm-om aminek az Initialize eseményében értéket adok két (a kód elején) ilyen
formában deklarált változónak:Private jovalasz As Integer
Private roszvalasz As IntegerHogyan tudom ezt a változót átadni A UserForm-on lévő TextBox KeyDown eseményének?
A KeyDown esemény azt csinálja, hogy ha a TextBoxba valaki <Enter>-t üt akkor megvizsgálja hogy a TextBox tartalma egyenlő-e valamivel és ha igen akkor a jovalasz-t növeli eggyel hanem akkor a rosszvalaszt és egy Label-en kiírja azt. -
m.zmrzlina
senior tag
válasz ArchElf #11582 üzenetére
Nem az Initialize-n belül deklaráltam ott csak értéket adtam neki. Időközben kiderült, hogy elírtam a változó nevét (rossz egy sz-szel ) mindenhol máshol pedig kettővel.
Ha viszont a Form-on definiálod, akkor a form bármely tagja eléri (nem kell átadni),
Csak rendesen le kell írni.Köszi
-
m.zmrzlina
senior tag
Ötlet kellene.
Csináltam egy szótanuló munkafüzetet amiben a megválaszolandó szavakat véletlenszerűen a =RANDBETWEEN() fv adja. A szavak az A a fordításuk a B oszlopban vannak egymás alatt.
Azt szeretném, ha a munkafüzet valamilyen formában "megtanulná" hogy a válaszoló mely szavakat hibázza el gyakrabban és ezeket nagyobb valószínűséggel hozná fel újra és újra, míg a (többször) helyesen megválaszoltakat pedig ritkábban.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Delila_1 #11602 üzenetére
Abból kellene kiindulni, hogy a munkafüzet valójában úgy működik, hogy userformra (label.Caption) adja ki a RandBetween() a kérdést és textboxban kell bevinni a választ. A keresést fkeres() végzi. Magát a munkalapot a felhasználó úgy látja hogy ha kiválaszt egy munkalapot (lecke szavait) akkor a betűszínt háttér szinére állítom és az kommunikáció a userformon megy. Valahogy így néz ki (az A és B oszlopokban ott vannak a szavak és a megfelelőjük fehér betűszínnel)
A legfelső label.Captiont a köv. sor adja:
lb_kerdes.Caption = Range("A" & Application.WorksheetFunction.RandBetween(1, Range("A1048576").End(xlUp).Row)).Value
Az ellenőrzést a köv sor végzi:
If tb_valasz.Text = Application.WorksheetFunction.VLookup(lb_kerdes.Caption,Range("A:B"), 2, False) ThenEzután pár sor ami jó/rossz válasz esetén csinál bizonyos dolgokat. Ide jöhetne jó válasz esetén a C oszlopba egy eggyel növelt szám, és utána hogyan tovább?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz m.zmrzlina #11604 üzenetére
Ahány lecke annyi munkalap (mindegyiken csak A és B-ben szavak) és amelyiket kiválasztja a felh. a Comboboxban az aktiválódik és válik fehérré a betűszíne.
-
m.zmrzlina
senior tag
válasz Delila_1 #11606 üzenetére
Minden válasz, vagy ellenőrzés után növeld az értéket egy cellában, a tartományt pedig rendezd a hibapontokat tartalmazó oszlop szerin csökkenő sorrendbe.
A szavak számától függően, de pl. 100 db válasz után a Randbetween értékhatárát 1 és X közé állítsd be.Ennek alapján csináltam és kiváló lett. Minden válasz után növelem /csökkentem a szóhoz tartozó mérőszámot és 10 válaszonként erre az oszlopra rendezem a táblát. Aztán csökkentem a Randbetween határát úgy hogy kiessenek azok a szavak amiknek már volt legalább két jó találatuk.
Tök jó lett köszi a segítséget!
-
m.zmrzlina
senior tag
Még mindig a szótanulós munkafüzet.
Szeretnék csinálni egy "Legjobb 10 eredmény" összesítést. Legegyszerűbb lenne az elért százalékok alapján rangsorolni csakhogy egyrészt különböző méretű szókészletek vannak (100 - 700-ig) másrészt kiválasztható, hogy hány kérdést kelljen megválaszolni.
Nyilván nem azonos értékű ha valaki egy százas szókészletből 10 szót válaszol meg hibátlanul azzal ha 700 szóból mindet. Százalék alapján ez egyenlő teljesítmény.
Van tehát 3 változó (szókészlet, megválaszolt kérdések száma, elért eredmény százalékban). Ezeket kellene valami alapján valahogyan súlyozni.
???
-
m.zmrzlina
senior tag
válasz Mythunderboy #11648 üzenetére
Csak ötletelek, a hogyanról fogalmam sincs.
Egymásba ágyazott számlálós ciklusokkal összeadnék minden méretet minden mérettel. Minden egyes összeadást addig folytatnék amíg már nem tudok egyetlen még meglévő méretet sem hozzáadni az eredményhez úgy, hogy az ne haladja meg a 6000-t. Ezeket a kombinációkat megtartanám, a 6000 feletti eredményeket eldobnám.
Aztán felülre rendezném azokat a kombinációkat amelyek értéke leginkább megközelíti a 6000-t (ezeknél legkevesebb a hulladék) és ezekből kiszedném azokat amelyekben pont annyiszor szerepelnek a különböző egyedi méretek ahányszor kellenek.
-
m.zmrzlina
senior tag
Van két UserForm. Az egyiken parancsgomb amivel meg lehet hívni a másikat:
A másikon szintén parancsgomb amivel el lehet tüntetni:Private Sub cb_bezar_Click()
Unload uf_eredmeny
End SubA képen az eredmény:
Ha a következő (szerintem hajánál fogva előrángatott) módon zárom be akkor nincsen ez a hiba szépen eltűnik a meghívott formnak az első formon túllógó része is:
Private Sub cb_bezar_Click()
Application.ScreenUpdating = False
Unload uf_eredmeny
Worksheets(2).Select
Worksheets(1).Select
Application.ScreenUpdating = True
End SubA "Lecke száma" combobox Change eseménye mögött is van olyan művelet ami munkalap váltással jár az is eltünteti a megmaradó részeket.
Nyilván valami képernyőfrissítési probléma van de mi?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #11701 üzenetére
Lehet, hogy nem kellene letiltani a ScreenUpdating-et...
Ebben - ami nem jól működik - nincs tiltás.
Private Sub cb_bezar_Click()
Unload uf_eredmeny
End SubAmiben van tiltás (és engedélyezés) az működik.
???
Vagy az Unload parancs tiltja a frissítést is?
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #11703 üzenetére
Próbáltam a bezárást úgy hogy az Unload-ot csak simán a Screenupdating False-True közé tettem - semmi eredménnyel. A combobox Change-ben is van munkalap váltás és az megoldja a problémát ezután tettem bele azt a két sort.
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #11703 üzenetére
Modal ablak, nem lehet matatni.
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #11706 üzenetére
Akkor nálam valami nagy gáz lehet mert a te megoldásoddal ugyanaz a jelenség mint az enyémmel.
Nálam alapértelmezésben Modal mindkét form.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #11709 üzenetére
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #11712 üzenetére
Mondom, hogy nagy gáz van nálam, mert így viszont rendben működik.
Köszi az eddigieket
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #11712 üzenetére
Na meglett a hiba.
A második form Initialize() eseményében volt egy sor ami rejtett munkalapot akart aktiválni és ez akasztotta meg a programot.Csak azt nem értem, hogy a munkalapról viszont szépen beolvasta a form összes labelére az összes adatot.
Private Sub UserForm_Initialize()
'Dim vissza As String
'vissza = ActiveSheet.Name
Dim hova As String
'Application.ScreenUpdating = False
'Worksheets("eredmenyek").Visible = True
Worksheets("eredmenyek").Activate
For j = 1 To 4
hova = Cells(1 + j, 7).Value
For k = 1 To 10
Controls(hova & k).Caption = Cells(1 + k, 1 + j).Value
Next
Next
'Worksheets("eredmenyek").Visible = False
'Worksheets(vissza).Activate
'Application.ScreenUpdating = True
End SubA kikommentezett sorok kerültek be utólag és így már működik.
Köszi mégegyszer.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
A következő elrendezést és Excel2007-et feltételezve a következő lehet egy megoldás:
A:B tartomány lefelé folytatódik.
És a makró:
Sub minmax()
Dim min As Single
Dim max As Single
Dim tipus As String
Dim i As Integer
For i = 1 To Range("A1048576").End(xlUp).Row
Cells(i, 1).Select
tipus = ActiveCell.Value
min = ActiveCell.Offset(0, 1).Value
min = ActiveCell.Offset(0, 1).Value
If Application.WorksheetFunction.CountIf(Range("D:D"), tipus) = 0 Then
Do While ActiveCell.Value <> ""
If ActiveCell.Value = tipus Then
If ActiveCell.Offset(0, 1).Value <= min Then
min = ActiveCell.Offset(0, 1).Value
If ActiveCell.Offset(0, 1).Value >= max Then
max = ActiveCell.Offset(0, 1).Value
End If
End If
End If
ActiveCell.Offset(1, 0).Select
Loop
Cells(Range("D1048576").End(xlUp).Row + 1, 4).Value = tipus
Cells(Range("E1048576").End(xlUp).Row + 1, 5).Value = min
Cells(Range("F1048576").End(xlUp).Row + 1, 6).Value = max
End If
Next
End Sub -
m.zmrzlina
senior tag
válasz m.zmrzlina #11728 üzenetére
Csak hogy ne maradjon az archívumban hülyeség kijavítatlanul, a makró helyesen:
Sub min_max()
Dim min As Single
Dim max As Single
Dim tipus As String
Dim i As Integer
For i = 1 To Range("A1048576").End(xlUp).Row
Cells(i, 1).Select
tipus = ActiveCell.Value
min = ActiveCell.Offset(0, 1).Value
max = ActiveCell.Offset(0, 1).Value
If Application.WorksheetFunction.CountIf(Range("D:D"), tipus) = 0 Then
Cells(1, 1).Select
Do While ActiveCell.Value <> ""
If ActiveCell.Value = tipus Then
If ActiveCell.Offset(0, 1).Value < min Then
min = ActiveCell.Offset(0, 1).Value
ElseIf ActiveCell.Offset(0, 1).Value > max Then
max = ActiveCell.Offset(0, 1).Value
End If
End If
ActiveCell.Offset(1, 0).Select
Loop
Cells(Range("D1048576").End(xlUp).Row + 1, 4).Value = tipus
Cells(Range("E1048576").End(xlUp).Row + 1, 5).Value = min
Cells(Range("F1048576").End(xlUp).Row + 1, 6).Value = max
End If
Next
End Sub -
m.zmrzlina
senior tag
válasz jerry311 #11849 üzenetére
Excel2007-et feltételezve ( a Randbetween() ) miatt, az A1:A20 tartományt tölti fel a B1:L20 tartományból véletlenszerűen vett adatokkal:
Sub veletlen()
Cells(1, 1).Select
For i = 1 To 20
Cells(i, 1).Value = Cells(WorksheetFunction.RandBetween(1, 20), WorksheetFunction.RandBetween(2, 12)).Value
Next
End Sub[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz jerry311 #11851 üzenetére
Bocs.
Alt+F11-gyel megnyitod a VBA szerkesztőt majd Insert>Module. Az itt kapott szövegszerkesztő szerű mezőbe másolod a kódot, majd F5-tel elindítod. Ha gyakrabban szeretnéd használni akkor lehet hozzá gombot rendelni a Gyorsindítás eszköztárra.
Ha pontosan megadod, hogy milyen tartományból milyen tartományba szeretnél véletlen tartalmat generálni akkor aszerint módosítom.
Csak Excel2007-2010-zel működik a Randbetween() fv miatt.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz bugizozi #11858 üzenetére
Én azt a tartományt amiben a rövidítések vannak (vízszintes sorokban) Másolás>Irányított beillesztés >Transzponálás segítségével függőleges oszlopokká alakítanám és így rendezném A-Z-ig (természetesen nem az eredeti helyén)
Így minden oszlop tetején ott lenne az a rövidítés ami a hozzá tartozó sor elejére kell.
Ha akarod csinálhatod kézzel is, de a tartomány határainak ismeretében makrósítani is lehet a módszert.
-
m.zmrzlina
senior tag
válasz zsotesz81 #11883 üzenetére
sor=selection.row vagy sor=activecell.row
A sor=selection.rows.count azt adja meg,hogy hány sora van a kijelölésednek. Egyetlen cellánál ez értelemszerűen 1
Az activecell.rows.count megint csak mindig egyet fog adni mert aktív cella egy nagyobb tartomány kijelölésekor is csak egy van.
-
m.zmrzlina
senior tag
válasz m.zmrzlina #11889 üzenetére
Pontosabban ezt:
=ÖSSZEFŰZ(B2;"00000";SZÖVEG(C2;"000");SZÖVEG(D2;"00");E2;F2;)
Új hozzászólás Aktív témák
Állásajánlatok
Cég: Alpha Laptopszerviz Kft.
Város: Pécs
Cég: Ozeki Kft.
Város: Debrecen