Miten saisi solualueeseen rajoituksen, että sama numero ei voi esiintyä kuin kerran (priorisointi)

Anonyymi

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.

9

407

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • 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
      @Kunde

    • lipsahti 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

    1. Sanna Marin teki sen, mihin muut eivät pystyneet - sote kerralla maaliin

      Yli 15 vuotta Suomessa vatvottu sote-uudistus meni lopulta läpi Sanna Marinin hallituksen aikana. Edeltävät hallitukset
      Maailman menoa
      87
      10566
    2. Pikkupersu osoitti olevansa hieman yksinkertainen

      "Heikosti älykkyystesteissä pärjänneistä lapsista tulee muita todennäköisemmin ennakkoluuloisia ja konservatiivisia", uu
      Maailman menoa
      141
      8824
    3. Marinin hallitus hyväksyi soten (105-77) vuonna 2021

      vastaan äänesti Kok, persut, KD, Liike Nyt. Nyt on sitten käynyt niin kuin on käynyt. Pääkirjoitus: Sanna Marin jätti
      Maailman menoa
      90
      6087
    4. Jos on heikkolahjainen ja laiska koulupudokas, niin silloin äänestää vasemmistopuolueita

      näin tämä on käytännössä aina mennyt. Jos ei älyä ole paljon suotu, niin ei silloin inssiksi opiskella, vaan päädytään
      Maailman menoa
      62
      4317
    5. Enää viisi yötä Sannan kirjaan

      Ihan täpinöissään tässä odotellaan. Vaikea pysytellä aloillaan, kun koko ajan tekisi mieli jo kirjakauppaan rynnätä, mut
      Maailman menoa
      60
      4253
    6. Kannattaako suomalaisen duunarin enää äänestää vasemmistopuolueita

      sillä eivät ne tunnu kovasti ajavan suomi-duunarin etuja. Jos katsotaan Vasemmistoliittoa, niin sehän on ihan feministi
      Maailman menoa
      81
      4093
    7. Sanna-kulttilaiset hehkuttaa edelleen Marinia, vaikka esim. Sote oli susi jo syntyessään

      mutta kulttilaiset eivät ole järjen jättiläisiä, ja sanoihin Lasse Lehtinenkin, että Suomessa on pohjoismaiden tyhmimmät
      Maailman menoa
      50
      3729
    8. Professori: Maahanmuuttajien rikollisuutta hyssytellään - hävytöntä

      Kriminologi Jukka Savolaisen mukaan ikä ja vaikeat olosuhteet eivät riitä selitykseksi. – Tutkitun tiedon valossa sanoi
      Maailman menoa
      69
      3220
    9. Marin teki sen mihin muut eivät pystyneet, vei susi-Soten maaliin

      ja sitten hävittyjen vaalien jälkeen lähtikin vastuuta pakoon...... "Professori: sote-uudistus on täysi susi. Sosiaali
      Maailman menoa
      7
      3127
    10. IL - 100 000 potentiaalista sotilasta pakeni Ukrainasta!

      "Ukrainasta nuorten miesten joukkopako Liki 100 000 asevelvollisuusikäistä miestä on poistunut Ukrainasta parin viime k
      Maailman menoa
      70
      2985
    Aihe