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!
ÄKKIÄ APUA, onko enää mitää tehtävissä?
xerox
7845
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
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
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
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.
Ei tule ikäjärjestykseen tuolla.
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)))