Grzegorz S.

Grzegorz S. Technik metod
logistycznych,
Ficomirrors

Temat: Transpozycja i czary mary

Witam
Mam dane w poniższej formie:

Chleb Tadeusz
Chleb Monika
Chleb Witold
Piwo Monika
Piwo Romek
Piwo Tadeusz
Ser Romek
Ser Tadeusz

To co chcę uzyskać to następujące wiersze:

Chleb TadeuszMonikaWitold
Piwo MonikaRomekTadeusz

Jak mogę to osiągnąć? Dane pierwotne mają 1400 wierszy

konto usunięte

Temat: Transpozycja i czary mary

Nie doczytałem dokładnie danych wynikowych. W tym przypadku jest nie tyle transpozycja, co grupowanie danych i transpozycja.Paweł K. edytował(a) ten post dnia 05.07.12 o godzinie 11:33
Grzegorz S.

Grzegorz S. Technik metod
logistycznych,
Ficomirrors

Temat: Transpozycja i czary mary

Zrobiłem tak i dało mi to tyle, że produkt miałem jako nagłówek występujący tyle samo razy co wcześniej a poniżej imię osoby. A ja potrzebuję w jednej komórce produkt a w drugiej komórce imiona.

konto usunięte

Temat: Transpozycja i czary mary

jedno z podejść:


Obrazek


[2] tabela przestawna
[3] tabela ukazując czy dana osoba jest przypisana do produktu - funkcją złącz.teksty tworzymy wpis ze wszystkimi osobami
Grzegorz S.

Grzegorz S. Technik metod
logistycznych,
Ficomirrors

Temat: Transpozycja i czary mary

Dzięki wielkie

Wyszło i działa ale..... ;)

Jeżeli osób mamy powiedzmy 200 to jak zrobić złącz teksty dla takiego ciągu który jeszcze by na dodatek nie łączył pustych wierszy?
Maciej G.

Maciej G. zarobiony

Temat: Transpozycja i czary mary

Inne podejście, w temacie obok:
http://www.goldenline.pl/forum/2962074/grupowanie-danym

Temat: Transpozycja i czary mary

A jakby to złacz teksty obudować formułą =USUŃ.ZBĘDNE.ODSTĘPY (ZŁĄCZ.TEKSTY())
Zadziała?
Grzegorz C.

Grzegorz C. Specjalista,
Uniwersytet Śląski

Temat: Transpozycja i czary mary

Spróbuj takiego kodu.

Założenia:
- w arkuszu pierwszym tabela z danymi do grupowania, w tabeli są nagłówki
- wyniki grupowania pojawią się w arkuszu drugim

Sub grupuj()

Dim NoDupes As New Collection
Dim vItem As Variant
Dim lLstRw&
Dim i&, j&

lLstRw = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row

On Error Resume Next
For i = 2 To lLstRw
NoDupes.Add Sheets(1).Cells(i, 1).Value, CStr(Sheets(1).Cells(i, 1).Value)
Next i
Resume

Sheets(2).Cells(1, 1).Value = Sheets(1).Cells(1, 1).Value
Sheets(2).Cells(1, 2).Value = Sheets(1).Cells(1, 2).Value

i = 2

For Each vItem In NoDupes
Sheets(2).Cells(i, 1).Value = vItem
i = i + 1
Next vItem

For i = 1 To NoDupes.Count
For j = 2 To lLstRw
If Sheets(2).Cells(i, 1).Offset(1, 0).Value = Sheets(1).Cells(j, 1).Value Then
Sheets(2).Cells(i, 2).Offset(1, 0).Value = Sheets(2).Cells(i, 2).Offset(1, 0).Value & Sheets(1).Cells(j, 2).Value & " "
End If
Next j
Next i

End Sub
Grzegorz C. edytował(a) ten post dnia 05.07.12 o godzinie 22:05
Grzegorz S.

Grzegorz S. Technik metod
logistycznych,
Ficomirrors

Temat: Transpozycja i czary mary

Elżbieta Marzęda:
A jakby to złacz teksty obudować formułą =USUŃ.ZBĘDNE.ODSTĘPY (ZŁĄCZ.TEKSTY())
Zadziała?


Spróbowałem ale nie zadziałało, chyba funkcja złącz teksty nie działa na zakresach.
Grzegorz S.

Grzegorz S. Technik metod
logistycznych,
Ficomirrors

Temat: Transpozycja i czary mary

Grzegorz C.:
Spróbuj takiego kodu.

Założenia:
- w arkuszu pierwszym tabela z danymi do grupowania, w tabeli są nagłówki
- wyniki grupowania pojawią się w arkuszu drugim

Sub grupuj()

Dim NoDupes As New Collection
Dim vItem As Variant
Dim lLstRw&
Dim i&, j&

lLstRw = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row

On Error Resume Next
For i = 2 To lLstRw
NoDupes.Add Sheets(1).Cells(i, 1).Value, CStr(Sheets(1).Cells(i, 1).Value)
Next i
Resume

Sheets(2).Cells(1, 1).Value = Sheets(1).Cells(1, 1).Value
Sheets(2).Cells(1, 2).Value = Sheets(1).Cells(1, 2).Value

i = 2

For Each vItem In NoDupes
Sheets(2).Cells(i, 1).Value = vItem
i = i + 1
Next vItem

For i = 1 To NoDupes.Count
For j = 2 To lLstRw
If Sheets(2).Cells(i, 1).Offset(1, 0).Value = Sheets(1).Cells(j, 1).Value Then
Sheets(2).Cells(i, 2).Offset(1, 0).Value = Sheets(2).Cells(i, 2).Offset(1, 0).Value & Sheets(1).Cells(j, 2).Value & " "
End If
Next j
Next i

End Sub


Jeszcze poćwiczę ale jak na razie to tylko mi przekopiowało do drugiego arkusza listę z pierwszego
Grzegorz S.

Grzegorz S. Technik metod
logistycznych,
Ficomirrors

Temat: Transpozycja i czary mary

Dziękuję wszystkim za pomoc
Chwilowo poradziłem sobie ręcznie (tylko 40 komórek do złączenia) ale postaram się coś wymyśleć idąc za waszymi pomysłami

Temat: Transpozycja i czary mary

Można to rozwiązać w ten sposób:

Zakres danych przyjąłem od A2 do B5000

W E2 formuła tablicowa:
=JEŻELI(CZY.BŁĄD(INDEKS(PRZESUNIĘCIE($A$1;;;ILE.NIEPUSTYCH($A:$A));PODAJ.POZYCJĘ(0;LICZ.JEŻELI($A$1:AY1;PRZESUNIĘCIE($A$1;;;ILE.NIEPUSTYCH($A:$A)));0)));"";INDEKS(PRZESUNIĘCIE($A$1;;;ILE.NIEPUSTYCH($A:$A));PODAJ.POZYCJĘ(0;LICZ.JEŻELI($A$1:AY1;PRZESUNIĘCIE($A$1;;;ILE.NIEPUSTYCH($A:$A)));0)))

i kopia w dół do żądanej ilości ( formuła tworzy listę produktów bez powtórzeń).

W K2 formuła:
=LICZ.JEŻELI($A2:$A$5000;$A2)&$A2

i kopia w dół do żądanej ilości (liczy ilość produktów z zachowaniem kolejności od max do min).

W L2:
=JEŻELI(CZY.BŁĄD(PRZESUNIĘCIE($K$1;PODAJ.POZYCJĘ(LICZ.JEŻELI($A:$A;$E2)&$E2;$K$2:$K$2000;0);-9));"";PRZESUNIĘCIE($K$1;PODAJ.POZYCJĘ(LICZ.JEŻELI($A:$A;$E2)&$E2;$K$2:$K$2000;0);-9))

i kopia w dół do żądanej ilości. (wyszukuje imię na podstawie max z poprzedniej formuły)

W M2:
=JEŻELI(CZY.BŁĄD(PRZESUNIĘCIE($K$1;PODAJ.POZYCJĘ(LICZ.JEŻELI($A:$A;$E2)-NR.KOLUMNY(A:A)&$E2;$K$2:$K$2000;0);-9));"";PRZESUNIĘCIE($K$1;PODAJ.POZYCJĘ(LICZ.JEŻELI($A:$A;$E2)-NR.KOLUMNY(A:A)&$E2;$K$2:$K$2000;0);-9))

i kopia w dół do żądanej ilości oraz kopia w prawo do żądanej ilości. (wyszukuje kolejne imiona)

W F2:
=L2&M2&N2&O2&P2&Q2&R2&S2&T2&U2&V2&W2&X2&Y2&Z2&AA2&AB2&AC2&AD2&AE2&AF2&AG2&AH2&AI2&AJ2&AK2&AL2&AM2&AN2&AO2&AP2&AQ2&AR2&AS2&AT2&AU2&AV2&AW2&AX2

i kopia w dół do żądanej ilości (ja przyjąłem 40).

Efekt końcowy:
kol. E Kol F
Produkt Imiona
Chleb TadeuszMonikaWitoldAgata
Piwo MonikaRomekTadeuszTomek
Ser RomekTadeusz
Jabłko WiesiekTadeusz
Bułka Tadeusz

Pozdrawiam

Podobne tematy


Następna dyskusja:

Transpozycja




Wyślij zaproszenie do