webForumDet fria alternativet

Excellistor - sammanställa 2 listor

7 svar · 2 109 visningar · startad av dirigenten

dirigentenMedlem sedan okt. 20068 inlägg
#1

Hej
Skulle vilja få ihop två listor i excel till en enligt beskrivningen nedan, kanske inte jättetydlig, men förhoppningsvis tillräckligt för att få tips

LISTA ETT LISTA TVÅ
Nr Namn FK Pers Oms Nr Namn FK Pers Ant
101 AB S ASON 50 101 AB S ASON 1
102 BB M XSON 25 104 DB V BSON 2
103 CB Ö YSON 75 104 DB V CSON 3
104 DB V BSON 50 105 EB N DSON 1
105 EB N DSON 25 105 EB N ESON 2
106 FB S ZSON 70 107 GB M FSON 5
107 GB M FSON 25 107 GB M GSON 2
108 HB Ö ISON 70 107 GB M HSON 5
109 IB V ÅSON 25 108 HB Ö ISON 3
110 JB N 70 108 HB Ö JSON 1
110 JB N KSON 2

Vill jag få ihop till….									
LISTA TRE… Som alltså matchar värden i de två listorna och sedan ger en fin sammanställning									
I Lista ett finns varje "Nr" bara en gång, i Lista två kan "Nr" finnas flera ggr och med olika "Pers" och "Ant" Alla "Nr" finns inte i lista två. I lista tre, som exemplet visar skall alltså "NR" finnas för varje förekomst i lista ett och flera ggr om det finns flera i lista två. "OMS" skall hämtas från lista 1, en gång. Finns samma "Nr" fler ggr, skall "OMS" vara tom på alla under den första. "Pers" hämtas om det finns från lista två annars från lista ett, namnet kan vara olika på samma nr, se lista ett. Antal hämtas från lista två om det finns annars tomt, alternativt "0".   "NAMN" är kopplat till "NR". "FK" hämtas på samma sätt som "PERS" 									
NR	NAMN	FK	OMS	PERS	ANT	OK			
101	AB	S	50	ASON	1	JA			
102	BB	M	25	XSON		NEJ			
103	CB	Ö	75	YSON		NEJ			
104	DB	V	50	BSON	2	JA			
104	DB	V		CSON	3	JA			
105	EB	N	25	DSON	1	JA			
105	EB	N		ESON	2	JA			
106	FB	S	70	ZSON		NEJ			
107	GB	M	25	FSON	5	JA			
107	GB	M		GSON	2	JA			
107	GB	M		HSON	5	JA			
108	HB	Ö	70	ISON	3	JA			
108	HB	Ö		JSON	1	JA			
109	IB	V	25	ÅSON		NEJ			
110	JB	N	70	KSON	2	JA
iHouseMedlem sedan sep. 20104 inlägg
#2

Det är lite rörigt att försöka läsa det där, bättre om du bifogar en fil så att man kan labba lite :)

LimeSMedlem sedan maj 201036 inlägg
#3

Jag har samma fråga, fast enklare beskriven!

Jag vill slå ihop två kolumner och att datan från de båda slås ihop i den nya kolumnen.

före:

FÖRNAMN ı EFTERNAMN
Sara ı JÖNSSON
Erik ı ANDERSSON
STIG ı LARSSON

efter:

NAMN
SARA JÖNSSON
ERIK ANDERSSON
STIG LARSSON

Hur gör man det?

LaspMedlem sedan juli 200012 980 inlägg
#4

Kanske moderator lägger LimeS fråga i en ny tråd!
Ja det är enkelt, skapa en ny kolumn, välj sammanfoga kolumn a1 + " " + B2.
Göm sedan ursprungskolumnerna.

aronMedlem sedan mars 2004485 inlägg
#5

@dirigenten

Detta löses väll enklast med ett litet macro (VBA-script). Jag har ett liggandes nånstans som borde funka efter lite modifiering.

Edit: Bra att man sparat allt som Excelfiler och inte kan öppna dem utan Excel, nån som vet om man kan se macron med Excel Viewer?

LimeSMedlem sedan maj 201036 inlägg
#6

Sweet att det är enkelt! Varför klarar jag det än inte? :D
Okej, jag har skapat en ny kolumn. Ska jag ha denna markerad? Var väljer jag "sammanfoga"?
Det är kolumn B + C som ska bli D!

LaspMedlem sedan juli 200012 980 inlägg
#7

>LimeS Markera D kolumnen Välj formler Text sammanfoga.
Sitter i denna maskin med Engelsk Off 2007 så jag kan inte ge dig exakt hur.
Men det borde räcka
Sedan ville du ha allt versalt, det gör du med Upper vad det nu heter på svaenska och det gör du på B och C innan sammanslagning, notera att du skall slå ihop tre fält B1 +" " + C1

aronMedlem sedan mars 2004485 inlägg
#8

Ok here we go, har du lite programmerings erfarenhet ska detta inte vara några problems :D Börjar med lite grundläggande om macron om du inte redan kan det.

Skriva Macro-script (steg 4 kan hoppas över)

Create a macro using Microsoft Visual Basic

1. On the Tools menu in Microsoft Excel, point to Macro, and then click Visual Basic Editor.
2. On the Insert menu, click Module.
3. Type or copy your code into the code window of the module.
4. If you want to run the macro from the module window, press F5.
5. When you're finished writing your macro, click Close and Return to Microsoft Excel on the File menu.
http://office.microsoft.com/en-au/excel-help/create-a-macro-HP005204711.aspx

För att köra macrot senare så väljer man det i menyn Tools->Macro->Macros

Förbered Excel Filen

Gör 3 flikar, lägg lista 1 i första fliken och lista 2 i andra fliken. Döp flikarna till List1, List2, List3 (om du ska använda mitt macro) Ha Nr i column A och börja på rad 1 i varje flik.

The Codes

Helt otestat, och jag har inte lagt in alla kolumner, men en start för dig om du kan förstå koden. Se de båda *** i koden, raden ovanför är exempel på hur vi skriver nummret till list3. Du lägga till flera liknande rader och anpassa dessa beroende på om du hämtar värden från lista1 eller lista2 och ändra "A" till den kolumn som det ska skrivas till.

Vi går igenom lista 1 rad för rad, för varje rad går vi igenom hela lista 2 och lägger in resultat i lista 3.

Sub List3macro()
      Dim list1 As Worksheet
      Dim list2 As Worksheet
      Dim list3 As Worksheet

      Set list1 = ThisWorkbook.Worksheets("List1")
      Set list2 = ThisWorkbook.Worksheets("List2")
      Set list3 = ThisWorkbook.Worksheets("List3")

      ' Note: Use double if to may rows for Integer.
      ' Row counters used to keep track of witch row 
      ' we are currently reading or writing to.
      Dim list1row As Integer
      Dim list2row As Integer
      Dim list3row As Integer

      list1row = 1
      list2row = 1
      list3row = 1

      ' Maybe use a bool instead!
      Dim isInList2 As String 
      isInList2 = "False"

      ' While column A in sheet list1 has content
      While Len(list1.Range("A" & CStr(list1row)).Value) > 0

            ' While column A in sheet list2 has content
            While Len(list2.Range("A" & CStr(list2row)).Value) > 0
                  ' Add row to list3 when there is a row with same number in list 2
                  If list1.Range("A" & CStr(list1row)).Value = list2.Range("A" & CStr(list2row)).Value Then
                        isInList2 = "True"
                        list3.Range("A" & CStr(list3row)).Value = list1.Range("A" & CStr(list1row)).Value
                        ' *** Lägg till övriga kolumner som ska vara med
                        
                        list3row = list3row + 1
                  End If
                  list2row = list2row + 1
            Wend

            ' Add row to list3 when there is no row with same number in list2 
            if isInList2 = "False" Then
                  list3.Range("A" & CStr(list3row)).Value = list1.Range("A" & CStr(list1row)).Value
                  ' *** Lägg till övriga kolumner som ska vara med
                  list3row = list3row + 1
            End If

            list2row = 1
            isInList2 = "False"
            list1row = list1row + 1
      Wend
End Sub

Går att göra effektivare men våra snabba datorer gör så att det inte spelar så stor roll.

138 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)