ÄKKIÄ APUA, onko enää mitää tehtävissä?

Tein erään rekisterin ja nyt haluan ihmiset ikäjärjestykseen. SE EI ONNISTU sotun perusteella! Mitä pitää tehdä? Miksi se ei tajua sitä, vaan listaa ne päivän mukaan eikä huomioi koko sotua. En jaksais millään rupee tekeen uutta saraketta pelkälle vuosiluvulle, koska nimiä on tuhansia. Sotu pitää näkyä ja vuosilukusarake ois aivan turha. Mutta ikäjärjestys ois pakko saada :( AUTTAKAA!
7845
Äänestä

Muut lukivat myös

Vastaukset 7

Vanhimmat

Oletuksena, että sotut ovat sarakkeessa A ja lajitellaan nousevasti. Jos haluat laskevaan järjestykseen, muuta koodissa hipsujen paikkaa seuraavasti
If A(Laskuri) < A(Laskuri 1) Then 'laskeva
'If (A(Laskuri) > A(Laskuri 1)) Then 'nouseva


Sub Lajittele()
Dim Vika As Integer
Dim A As Variant
Dim Laskuri As Long
Dim Temppi As Variant
Dim Muutos As Boolean
Vika = Range("A65536").End(xlUp).Row
A = Application.WorksheetFunction.Transpose(Range("A1:A" & Vika))
For Laskuri = LBound(A) To UBound(A)
A(Laskuri) = Mid(A(Laskuri), 5, 2) & Mid(A(Laskuri), _
3, 2) & Mid(A(Laskuri), 1, 2) & Mid(A(Laskuri), 7)
Next
Do
Muutos = False
For Laskuri = LBound(A) To UBound(A) - 1
'If A(Laskuri) < A(Laskuri 1) Then 'laskeva
If (A(Laskuri) > A(Laskuri 1)) Then 'nouseva
Temppi = A(Laskuri)
A(Laskuri) = A(Laskuri 1)
A(Laskuri 1) = Temppi
Muutos = True
End If
Next Laskuri
Loop Until Not Muutos
For Laskuri = LBound(A) To UBound(A)
A(Laskuri) = Mid(A(Laskuri), 5, 2) & Mid(A(Laskuri), _
3, 2) & Mid(A(Laskuri), 1, 2) & Mid(A(Laskuri), 7)
Next
Range("A1:A" & Vika) = Application.WorksheetFunction.Transpose(A)
End Sub

Äänestä
  • Näin äkkiä katsoen koodisi ei ota huomioon 1800-luvulla tai 2000-luvulla syntyneitä!

    Jos sotussa esiintyy sekä 1800-luvulla syntyneitä ja 2000- syntyneitä on koodisi mukaan 4-vuotias vanhempi kuin 106-vuotias!

    Äänestä

  • Excelisti kirjoitti:

    Näin äkkiä katsoen koodisi ei ota huomioon 1800-luvulla tai 2000-luvulla syntyneitä!

    Jos sotussa esiintyy sekä 1800-luvulla syntyneitä ja 2000- syntyneitä on koodisi mukaan 4-vuotias vanhempi kuin 106-vuotias!

    nyt mummo on vanhempi kuin lapsi

    Sub Lajittele()
    Dim Vika As Integer
    Dim A As Variant
    Dim Laskuri As Long
    Dim Temppi As Variant
    Dim Muutos As Boolean
    Dim Vuosisata As Integer
    Vika = Range("A65536").End(xlUp).Row
    A = Application.WorksheetFunction.Transpose(Range("A1:A" & Vika))
    For Laskuri = LBound(A) To UBound(A)
    Select Case Mid(A(Laskuri), 7, 1)
    Case " "
    Vuosisata = 18
    Case "-"
    Vuosisata = 19
    Case "A"
    Vuosisata = 20
    Case Else
    End Select
    A(Laskuri) = Vuosisata & Mid(A(Laskuri), 5, 2) & Mid(A(Laskuri), _
    3, 2) & Mid(A(Laskuri), 1, 2) & Mid(A(Laskuri), 7)
    Next
    Do
    Muutos = False
    For Laskuri = LBound(A) To UBound(A) - 1
    'If A(Laskuri) < A(Laskuri 1) Then 'laskeva
    If (A(Laskuri) > A(Laskuri 1)) Then 'nouseva
    Temppi = A(Laskuri)
    A(Laskuri) = A(Laskuri 1)
    A(Laskuri 1) = Temppi
    Muutos = True
    End If
    Next Laskuri
    Loop Until Not Muutos
    For Laskuri = LBound(A) To UBound(A)
    A(Laskuri) = Mid(A(Laskuri), 7, 2) & Mid(A(Laskuri), _
    5, 2) & Mid(A(Laskuri), 3, 2) & Mid(A(Laskuri), 9)
    Next
    Range("A1:A" & Vika) = Application.WorksheetFunction.Transpose(A)
    End Sub

    Äänestä

Ilman VBA:ta. Luo uusi sarake (oletan että sinulla sotu on sarakkeilla {enemmän informaatiota,kiitos}). Luotuun sarakkeeseen funktio: =VASEN(sotu;6). Sotu tarkoittaa solua jossa sotu sijaitsee. Sitten lajittelu ensisijaisesti tämän sarakkeen mukaan. Kun lajittelu on valmis, voit hävittää ko. sarakkeen.

Tämä pätee vain jos kaikki on 1900-luvulla syntyneitä!

Jos rekisterissä on myös 1800-luvulla tai 2000-luvulla syntyneitä, on funktio kertaluokkaa vaikeampi mutta ei siihen välttämättä VBA:ta tarvita.

Äänestä
  • Ei tule ikäjärjestykseen tuolla.

    Äänestä

  • Olen Epäilijän kanssa samaa mieltä.
    Tuolla sinun funktiolla alkukuusta syntyneet ovat nuorimpia ja loppukuusta syntyneet vanhimpia.
    Jos sotut ovat D-sarakkeessa ja tekee apusarakkeen kaavalla:
    =POIMI.TEKSTI(D1;5;2)&POIMI.TEKSTI(D1;3;2)&POIMI.TEKSTI(D1;1;2)
    Ja lajittelee koko alueen tämän sarakkeen mukaan, tulevat henkilöt ikäjärjestykseen.
    Toimii vain jos kaikki ovat syntyneet 1900-2000.

    Äänestä

  • paavali kirjoitti:

    Olen Epäilijän kanssa samaa mieltä.
    Tuolla sinun funktiolla alkukuusta syntyneet ovat nuorimpia ja loppukuusta syntyneet vanhimpia.
    Jos sotut ovat D-sarakkeessa ja tekee apusarakkeen kaavalla:
    =POIMI.TEKSTI(D1;5;2)&POIMI.TEKSTI(D1;3;2)&POIMI.TEKSTI(D1;1;2)
    Ja lajittelee koko alueen tämän sarakkeen mukaan, tulevat henkilöt ikäjärjestykseen.
    Toimii vain jos kaikki ovat syntyneet 1900-2000.

    =JOS(POIMI.TEKSTI(A1;7;1)=" ";18&POIMI.TEKSTI(A1;5;2)&POIMI.TEKSTI(A1;3;2)&POIMI.TEKSTI(A1;1;2)&POIMI.TEKSTI(A1;7;5);JOS(POIMI.TEKSTI(A1;7;1)="-";19&POIMI.TEKSTI(A1;5;2)&POIMI.TEKSTI(A1;3;2)&POIMI.TEKSTI(A1;1;2)&POIMI.TEKSTI(A1;7;5);20&POIMI.TEKSTI(A1;5;2)&POIMI.TEKSTI(A1;3;2)&POIMI.TEKSTI(A1;1;2)&POIMI.TEKSTI(A1;7;5)))

    Äänestä

Kommentoi aloitusta


xerox kirjoitti:

Tein erään rekisterin ja nyt haluan ihmiset ikäjärjestykseen. SE EI ONNISTU sotun perusteella! Mitä pitää tehdä? Miksi se ei tajua sitä, vaan listaa ne päivän mukaan eikä huomioi koko sotua. En jaksais millään rupee tekeen uutta saraketta pelkälle vuosiluvulle, koska nimiä on tuhansia. Sotu pitää näkyä ja vuosilukusarake ois aivan turha. Mutta ikäjärjestys ois pakko saada :( AUTTAKAA!

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu