Permalänk
Medlem

Avancerad sortering i Excel

Jag sitter med ett Excel dokument som ser ut på följande vis.

Arbetsblad1 innehåller följande kolumner :

"datum" "Ansvarig1" "Ansvarig2" "Ansvarig3" "Pelle" 2013-05-01 | | | | | | | | 2013-05-02 | | | | | | | | 2013-05-03 | | | | | | | | 2013-05-04 | | | | | | | |

Arbetsblad2:

"event" "startdatum" "slutdatum" "personal" "ansvarig" Event01 2013-05-02 2013-05-04 1,2,8,9,32 Pelle

Nu vill jag hämta informationen ifrån Arbetsblad2 till Arbetsblad1 och fylla i cellerna med informationen.
Så det ser ut något i denna stilen

"datum" "Ansvarig1" "Ansvarig2" "Ansvarig3" "Pelle" 2013-05-01 | | | | | | | | 2013-05-02 | | | | | | |Event01 1,2,8,9,32| 2013-05-03 | | | | | | |Event01| 2013-05-04 | | | | | | |Event01|

Ber om ursäkt om det blir krångligt att förstå.
Anledningen till att jag sitter med Excel är för att personen som sköter "planeringen" idag inte kan hantera något annat.

Vad jag försöker uppnå är alltså att man i ett arbetsblad fyller i startdatum, slutdatum , personalID, AnsvarigID för att sedan automatiskt fylla ett schema med informationen i ett mer lättöverskådligt format

Visa signatur

CPU: Intel i7 6700K @4,7GHz GPU: 2X GeForce GTX 980Ti SLI RAM: 32GB Corsair Vengeance LPX 2400Mhz Moderkort: Asus z170 PRO Gaming Systemdisk: Samsung 950 PRO 512GB Gamingdisk:Samsung 850 500GB Lagring: 4TB WD Red Mus: SteelSeries Rival Tangentbord: Corsair k70 Headset: Kingston HyperX Cloud http://www.it-schill.com

Permalänk
Medlem

Släng iväg en googling på "pivot-tabell", det låter som att detta kan hjälpa dig.

Visa signatur

Speldator :[I] AMD 5600X - 16GB fläskigt ram - AMD 580RX - AOC 32" Wide
HTPC : i5 3450S - 8GB G.Skill - Streacom F8

Permalänk
Medlem

Har pillat lite med PivotTabeller men jag kan inte presentera datan på något snyggt vis liknande en kalender.

Visa signatur

CPU: Intel i7 6700K @4,7GHz GPU: 2X GeForce GTX 980Ti SLI RAM: 32GB Corsair Vengeance LPX 2400Mhz Moderkort: Asus z170 PRO Gaming Systemdisk: Samsung 950 PRO 512GB Gamingdisk:Samsung 850 500GB Lagring: 4TB WD Red Mus: SteelSeries Rival Tangentbord: Corsair k70 Headset: Kingston HyperX Cloud http://www.it-schill.com

Permalänk
Medlem

Den enda möjligheten som jag ser är att skapa ett macro då PIVOT bara kan hantera faktiska värden i listan.

Alternativet är att ändra

"event" "startdatum" "slutdatum" "personal" "ansvarig" Event01 2013-05-02 2013-05-04 1,2,8,9,32 Pelle

till

"(Dold rad)" "event" "Datum" "personal" "ansvarig" =SAMMANFOGA(E2;C2) Event01 2013-05-02 1,2,8,9,32 Pelle =SAMMANFOGA(E3;C3) Event01 2013-05-03 1,2,8,9,32 Pelle =SAMMANFOGA(E4;C4) Event01 2013-05-04 1,2,8,9,32 Pelle

Så du har en rad per datum och en kolumn som slår ihop datum och ansvarig som LETARAD kollar emot.

Lösningen kan se ut som något liknande:

=SAMMANFOGA(LETARAD(SAMMANFOGA($E$1;A2);Event!$A$2:$E$4;2;FALSKT);" ";LETARAD(SAMMANFOGA($E$1;A2);Event!$A$2:$E$4;4;FALSKT))

Om ni inte kan ändra strukturen i filen så är det Macro som gäller.

Permalänk
Medlem

Jag är inne på samma linje med Makro just nu, jag har noll koll på vart jag ska börja leta för att kunna skriva funktionen jag behöver :/

Visa signatur

CPU: Intel i7 6700K @4,7GHz GPU: 2X GeForce GTX 980Ti SLI RAM: 32GB Corsair Vengeance LPX 2400Mhz Moderkort: Asus z170 PRO Gaming Systemdisk: Samsung 950 PRO 512GB Gamingdisk:Samsung 850 500GB Lagring: 4TB WD Red Mus: SteelSeries Rival Tangentbord: Corsair k70 Headset: Kingston HyperX Cloud http://www.it-schill.com

Permalänk
Medlem

Här har du ett VBA script som bör göra det du vill.

Public calendarSheet As String Public eventSheet As String Public number As Integer Sub generateCalendar() calendarSheet = "Blad1" eventSheet = "Blad2" Dim row As Integer Dim con As Boolean Dim responsibles() As String con = True row = 2 responsibles = SetResponsibles Do While con = True value = Sheets(eventSheet).Cells(row, 1).value If value <> "" Then number = row title = Sheets(eventSheet).Cells(number, 1).value startDate = DateValue(Sheets(eventSheet).Cells(number, 2).value) endDate = DateValue(Sheets(eventSheet).Cells(number, 3).value) persons = Sheets(eventSheet).Cells(number, 4).value resonsible = Sheets(eventSheet).Cells(number, 5).value Do While startDate <= endDate DueDate = Format(startDate, "yyyy-mm-dd") respPos = Application.Match(resonsible, responsibles, False) asd = insertInfo(DueDate, respPos, title, persons) startDate = DateAdd("d", 1, startDate) Loop Else con = False End If row = row + 1 Loop End Sub Function SetResponsibles() As String() Dim con As Boolean con = True Dim number As Integer number = 1 Dim value As String Dim responsibles() As String Do While con = True value = Sheets(calendarSheet).Cells(1, number + 1).value If value <> "" Then ReDim Preserve responsibles(number) As String responsibles(number - 1) = value Else con = False End If number = number + 1 Loop SetResponsibles = responsibles End Function Function insertInfo(eventDate, responsible, title, persons) Dim row As Integer Dim con As Boolean con = True row = 2 Do While con = True value = CStr(Sheets(calendarSheet).Cells(row, 1).value) If eventDate = value Then con = False Sheets(calendarSheet).Cells(row, responsible + 1) = title + " " + persons ElseIf value = "" Then con = False End If row = row + 1 Loop insertInfo = "" End Function

Permalänk
Medlem

Tusen tack för koden, med lite modifikationer fick jag det precis som jag ville ha det.

Visa signatur

CPU: Intel i7 6700K @4,7GHz GPU: 2X GeForce GTX 980Ti SLI RAM: 32GB Corsair Vengeance LPX 2400Mhz Moderkort: Asus z170 PRO Gaming Systemdisk: Samsung 950 PRO 512GB Gamingdisk:Samsung 850 500GB Lagring: 4TB WD Red Mus: SteelSeries Rival Tangentbord: Corsair k70 Headset: Kingston HyperX Cloud http://www.it-schill.com

Permalänk
Medlem

Kul att den fungerade