Hei Gurut!
Minulla olisi tarve saada eräänlainen priorisointijärjestelmä, jossa riveillä olevat numerot ( esim. 1-100) voisivat esiintyä sarakkeessaan vain kertaalleen. Käytännön esimerkkinä olisi loppukäyttäjä, joka haluaa priorisoida tehtävät, mutta ei voisi laittaa jokaista ykköseksi, vaan hän joutuisi valitsemaan prioirisointtijärjestyksen.
Miten saisi solualueeseen rajoituksen, että sama numero ei voi esiintyä kuin kerran (priorisointi)
9
423
Vastaukset
- Anonyymi
Helpoin tapa taitaa olla "Ehdollinen muotoilu". Valitse solualue johon ehdot tulevat.
Aloitus-välilehdellä on "Ehdollinen muotoilu". Valitse siitä "Solujen korostussäännöt" ja sieltä "Arvojen kaksoiskappaleet". Avautuvassa ikkunassa valitse "Monista" (on oletuksena) ja anna sitten muotoilu. Oletuksena on hyvä "vaalean punainen täyttö ja tummanpunainen teksti. Nyt jos käyttäjä antaa jo olemassaolevan numeron, ehto täyttyy ja muotoilu tulee voimaan. Kun vaihtaa tilalle uuden, käyttämättömän numeron, poistuu muotoilu. Lets leikitään asiaa valaisevalla esimerkillä. Tee perässä ja ymmärrät idean jota voit soveltaa omaan taulukkoosi.
Vallataan tässä leikissä vaikkapa kymmenen solun kokoinen alue D2:D11.
Tarve on yksinkertainen: alueen soluihin voi syöttää vain numeroita ja kutakin numeroa vain yhden kerran.
* maalaa alue D2:D11
* komenna Tiedot/Tietojen kelpoisuuden tarkistaminen
* Asetukset -välilehdelle määritetään seuraavaa:
-> Hyväksy: Oma ehto
-> Ruksi kohtaan Ohita tyhjät
-> Tiedot: on välillä
-> Kaava: =JA(ONLUKU(D2);LASKE.JOS(D$2:D11;D2)=1)
* Virhesanoma -välilehdelle määritetään seuraavaa:
-> Ruksi kohtaan Näytä virhesanoma, jos kirjoitetut tiedot eivät täytä ehtoja
-> Tyyli: Lopetus
-> Otsikko: VIRHE: tupla-arvo tai ei numero
-> Virhesanoma: Et voi syöttää kahta kertaa samaa arvoa. Vain numerot on sallittuja.
Testaa! Huomaat ettei numeroista poikkeavaa syöttöä hyväksytä eikä samaa numeroakaan toistamiseen.edelliset postaukset eivät huomioi sitä , että jos esim. ne 100 lukua , niin hankalaa muistaa mitä lukuja on jo käyttänyt , koska luvut eivät poistu luettelosta.
Lisähaasteena tossa vielä sekin, että jos haluaa muuttaa jo solussa olevaa lukua vanha luku pitää palauttaa ja poistaa uusi luku listasta...
no tossa koodi...
nyt kelpoisuusehto H1:H100 ja luvut Ki:K100 , muuta sopivaksi
ko taulukon moduuliin...
Dim Vanhasolu As Variant
Dim Uusisolu As Variant
Public TyhjäSolu As Boolean
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Range("H1:H10"), Target) Is Nothing Then
If Target.Count = 1 Then
If Target = "" Then
TyhjäSolu = True
Else
TyhjäSolu = False
End If
End If
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Application.EnableEvents = False
Application.ScreenUpdating = False
If Not Intersect(Range("H1:H10"), Target) Is Nothing And TyhjäSolu Then
PoistaLuettelosta Target
ActiveWorkbook.Names("Lista").Delete
vika = Range("K1").End(xlDown).Row
If Not Range("K1") = "" Then
ActiveWorkbook.Names.Add Name:="Lista", RefersTo:=Range("K1:K" & vika)
Else
Range("H1:H100").Validation.Delete
End If
Else
If Not Intersect(Range("H1:H10"), Target) Is Nothing And Not TyhjäSolu Then
Uusisolu = Target.Value
Application.Undo
Vanhasolu = Target.Value
ActiveWorkbook.Names("Lista").Delete
vika = Range("K1").End(xlDown).Row
Range("K" & vika 1) = Vanhasolu
ActiveWorkbook.Names.Add Name:="Lista", RefersTo:=Range("K1:K" & vika 1)
Worksheets("Sheet1").Sort.SortFields.Clear
Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("K1:K" & vika 1), Order:=xlAscending
With Worksheets("Sheet1").Sort
.SetRange Range("K1:K" & vika 1)
.Apply
End With
Target = Uusisolu
Vanhasolu = Uusisolu
PoistaLuettelosta Uusisolu
End If
End If
TyhjäSolu = False
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
tavalliseen moduuliin...
Sub resetoi()
Application.EnableEvents = True
Application.ScreenUpdating = True
TyhjäSolu = False
ActiveWorkbook.Names.Add Name:="Lista", RefersTo:=Range("K1:K100")
Range("K1") = 1
Range("K2") = 2
Range("K1:K2").AutoFill Destination:=Range("K1:K100"), Type:=xlFillDefault
Range("H1:H100") = ""
With Range("H1:H100").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=$K$1:$K$100"
End With
End Sub
Sub PoistaLuettelosta(Hakuehto As Variant)
Worksheets("Sheet1").Activate
Dim solu As Range
With Range("K1:K10")
Set solu = .Find( _
What:=Hakuehto, _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False)
If Not solu Is Nothing Then
solu.Delete shift:=xlUp
End If
End With
Worksheets("Sheet1").Sort.SortFields.Clear
Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("K1:K10"), Order:=xlAscending
With Worksheets("Sheet1").Sort
.SetRange Range("K1:K10")
.Apply
End With
End Sub
Keep EXCELing
@Kundelipsahti ekaksi fiksaamaton koodi tässä oikea...
edelliset postaukset eivät huomioi sitä , että jos esim. ne 100 lukua , niin hankalaa muistaa mitä lukuja on jo käyttänyt , koska luvut eivät poistu luettelosta.
Lisähaasteena tossa vielä sekin, että jos haluaa muuttaa jo solussa olevaa lukua vanha luku pitää palauttaa ja poistaa uusi luku listasta...
no tossa koodi...
nyt kelpoisuusehto H1:H100 ja luvut Ki:K100 , muuta sopivaksi
ko taulukon moduuliin...
Dim Vanhasolu As Variant
Dim Uusisolu As Variant
Public TyhjäSolu As Boolean
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Range("H1:H100"), Target) Is Nothing Then
If Target.Count = 1 Then
If Target = "" Then
TyhjäSolu = True
Else
TyhjäSolu = False
End If
End If
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Application.EnableEvents = False
Application.ScreenUpdating = False
If Not Intersect(Range("H1:H100"), Target) Is Nothing And TyhjäSolu Then
PoistaLuettelosta Target
ActiveWorkbook.Names("Lista").Delete
vika = Range("K1").End(xlDown).Row
If Not Range("K1") = "" Then
ActiveWorkbook.Names.Add Name:="Lista", RefersTo:=Range("K1:K" & vika)
Else
Range("H1:H100").Validation.Delete
End If
Else
If Not Intersect(Range("H1:H100"), Target) Is Nothing And Not TyhjäSolu Then
Uusisolu = Target.Value
Application.Undo
Vanhasolu = Target.Value
ActiveWorkbook.Names("Lista").Delete
vika = Range("K1").End(xlDown).Row
Range("K" & vika 1) = Vanhasolu
ActiveWorkbook.Names.Add Name:="Lista", RefersTo:=Range("K1:K" & vika 1)
Worksheets("Sheet1").Sort.SortFields.Clear
Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("K1:K" & vika 1), Order:=xlAscending
With Worksheets("Sheet1").Sort
.SetRange Range("K1:K" & vika 1)
.Apply
End With
Target = Uusisolu
Vanhasolu = Uusisolu
PoistaLuettelosta Uusisolu
End If
End If
TyhjäSolu = False
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
tavalliseen moduuliin...
Sub resetoi()
Application.EnableEvents = True
Application.ScreenUpdating = True
TyhjäSolu = False
ActiveWorkbook.Names.Add Name:="Lista", RefersTo:=Range("K1:K100")
Range("K1") = 1
Range("K2") = 2
Range("K1:K2").AutoFill Destination:=Range("K1:K100"), Type:=xlFillDefault
Range("H1:H100") = ""
With Range("H1:H100").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=$K$1:$K$100"
End With
End Sub
Sub PoistaLuettelosta(Hakuehto As Variant)
Worksheets("Sheet1").Activate
Dim solu As Range
With Range("K1:K100")
Set solu = .Find( _
What:=Hakuehto, _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False)
If Not solu Is Nothing Then
solu.Delete shift:=xlUp
End If
End With
Worksheets("Sheet1").Sort.SortFields.Clear
Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("K1:K100"), Order:=xlAscending
With Worksheets("Sheet1").Sort
.SetRange Range("K1:K100")
.Apply
End With
End Sub
Keep EXCELing
@Kunde- Anonyymi
Missä työssä joutuu priorisoimaan 100 tehtävää?
- Anonyymi
Halukkaita siihen hommaan tuskin kovin helposti löytyy :D
Tuntematta aloittajan ajatusmaailmaa oletan että eiköhän tuossa tarpeena ole valita muutama (TOP3, TOP5, TOP10 korkeintaan).
Olisi kiva tietysti nähdä esimerkki siitä kun vaikkapa nyt sata vaihtoehtoa pitäisi laittaa johonkin omaan ranking-järjestykseen. Siinä voi helposti tulla tilanteita missä tämän päivän ranking poikkeaisi aika paljonkin huomenna saman ihmisen tekemästä rankingista. - Anonyymi
Niin jos joutuisi rankingia laittamaan tarkasti harkiten 100 potilaan hoitojärjestykselle niin kuluisikohan lääkäriltä sen verran aikaa tässä että osa potilaista ehtisi kupsahtaa jonoon.
" Siinä voi helposti tulla tilanteita missä tämän päivän ranking poikkeaisi aika paljonkin huomenna saman ihmisen tekemästä rankingista."
Siksipä mä tommosen koodin rustasin, että voi tehdä muutoksia ja lista elää tilanteen mukaan... ;-)- Anonyymi
Eikös tuo viimeksi mainittu koodi-versio vaadi sitä että käyttäjän on rohkaistava mielensä ja ohitettava suojausvaroitus antamalla makroille lupa toimia?
Ketjusta on poistettu 1 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Jens Ihlen (ex Kukka) poika todistaa oikeudessa
10:49 "Välit ovat olemattomat" Minkälainen isäsi ja sinun välinen suhde on tällä hetkellä? "Minulla ei ole minkäännäkö28110391K-kaupassa on mukava käydä, kun ei tarvitse katsella köyhiä
vasemmistolaisia, joista monet myös varastavat. Mielellään maksaa vähän enemmän tuotteista K-kaupassa, jotka ovat paljon2456036Suomeen ei kuulu ihmiset jotka ei halua kätellä toisia ihmisiä, koska tämä on vääräuskoinen
Nainen joka ei halunnut kätellä Stubbia on selvästi ääripään muslimi, eli sitä sakkia josta niitä ongelmia koituu. Ulos1735454PS:n Purra teki -JÄTTI-VELAT
* * PS:n Purra teki -JÄTTI-VELAT - ! ja jätti MaksuHuolet -Kansan Maksettavaksi -! *1125119Vain vasemmistolaiset rakennemuutokset pelastavat Suomen
Kansaa on ankeutettu viimeiset 30+ vuotta porvarillisella minäminä-talouspolitiikalla, jossa tavalliselta kansalta on ot193335Persut huutaa taas: "kato! muslimi!"
Persut on lyhyessä ajassa ajaneet läpi kaksi työntekijöiden oikeuksien heikennystä, joita se on aiemmin vastustanut. Pe92744- 2142652
Nainen, sanotaan että totuus tekee kipeää
Ehkä mutta se voi olla myös se kaikkein kamalin asia kohdata. Kuplassa on turvallista, kun tietää vähemmän on helpompi.202499- 282354
Valtio lopettaa pienituloisten perheiden kylpylälomien tukemisen
Pienituloiset suomalaiset ovat voineet vuosikymmenten ajan hakea tuettuja lomia terveydellisin, sosiaalisin ja taloudell3822257