Tietojen lajittelu - identtiset samalle riville

Tällainen pulma. On lista A, jossa on kaikki mahdolliset tietueet. SItten tulee lista B, C jne. joissa on samoja tietueita kuin A:ssa, mutta vain osa niistä kussakin. Nämä pitäisi saada rinnakkain niin, että on samat arvot samalla rivillä rinnakkain.

Esim.

Lista A Lista B Lista C
MIKA MARKO AILA
MARKO TIMO MARKO
PENTTI PENTTI
AILA
TIMO
JUHA

Sorttauksen tulos
MIKA
MARKO MARKO MARKO
PENTTI PENTTI
AILA AILA
TIMO TIMO
JUHA

Jollain funktiollako tuo onnistuu, vai sorttauskomennolla?
4270
Äänestä

Muut lukivat myös

Vastaukset 4

Vanhimmat

Koetin löytää netistä koodia tuohon ongelmaan (varmaan helpoin tapa ratkaista ongelma), muttei oikein löytynyt. Omat taidot heikossa hapessa.
Kaavalla onnistuisi näin. Lisää A ja B-sarakkeiden väliin 2 uutta saraketta.
B1=JOSVIRHE(INDEKSI($D$1:$D$6;VASTINE(A1;$D$1:$D$6;0));"")
C1=JOSVIRHE(INDEKSI($E$1:$E$6;VASTINE(A1;$E$1:$E$6;0));"")
Muuta solualueet sinulle oikeiksi.
Vedä kaavat niin alas kuin tarvitsee. "Uusille" B ja C-sarakkeille jää A-saraketta vastaava nimi jos sellainen löytyy "vanhasta", muuten jää tyhjäksi.
Kopioi B ja C-sarakkeet ja Liitä Määräten (vain arvot) samoille paikoille takaisin ja tyhjennä/poista D ja E-sarakkeet.

Äänestä

tavalliseen moduuliin...

Sub Kopioi()
Dim Dict As Object
Dim a As Variant
Dim b As Variant
Dim c As Variant
Dim solu As Variant
Set Dict = CreateObject("scripting.dictionary")
'muuta listojen solualue sopivaksi
a = Range("A1:C100").Value
For Each solu In a
If Not solu = "" Then
If Dict.Exists(solu) Then
Dict.Item(solu) = Dict.Item(solu) 1
Else
Dict.Add solu, 1
End If
End If
Next
b = Dict.Items
c = Dict.Keys
'muuta tulostusalue sopivaksi
Range("K1:M100") = ""
Range("K1").Select
For i = 0 To UBound(b)
ActiveCell.Resize(1, b(i)) = c(i)
ActiveCell.Offset(1, 0).Select
Next
ActiveSheet.Sort.SortFields.Clear
' muuta listojen alimman rivin rivinumero tähän
ActiveSheet.Sort.SortFields.Add Key:=Range("K1:K100"), Order:=xlAscending
With ActiveSheet.Sort
'muuta lajiteltava solualue sopiaksi
.SetRange Range("K1:M100")
.Apply
End With
End Sub

Keep EXCELing
@Kunde

Äänestä

Tarkkaan ottaen tämä ei järjestä, mutta lopputulos on sama.

Sub järjestä()
   v = Cells(65536, "A").End(xlUp).Row
   Alue2 = Range("B1:C" & v).Value
   Range("B1:C" & v).Clear
   r = 1
   Do Until Cells(r, "A") = ""
      i = 0
      For Each solu In Alue2
         If solu = Cells(r, "A") Then
            i = i 1
         End If
      Next
      For c = 1 To i
         Cells(r, 1 c) = Cells(r, "A")
      Next c
      r = r 1
   Loop
End Sub

Äänestä

niin lopputulos sama ilman lajittelua, mutta toinen alkaa hyytyyn nopeastikin kun rivien ja sarakkeiden määrä kasvaa ... ;-)

Keep EXCEling
@Kunde

Äänestä

Kommentoi aloitusta


Mika-A kirjoitti:

Tällainen pulma. On lista A, jossa on kaikki mahdolliset tietueet. SItten tulee lista B, C jne. joissa on samoja tietueita kuin A:ssa, mutta vain osa niistä kussakin. Nämä pitäisi saada rinnakkain niin, että on samat arvot samalla rivillä rinnakkain.

Esim.

Lista A Lista B Lista C
MIKA MARKO AILA
MARKO TIMO MARKO
PENTTI PENTTI
AILA
TIMO
JUHA

Sorttauksen tulos
MIKA
MARKO MARKO MARKO
PENTTI PENTTI
AILA AILA
TIMO TIMO
JUHA

Jollain funktiollako tuo onnistuu, vai sorttauskomennolla?

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