Przekształć poziomy układ tabeli w stół pionowy

0

Następujący arkusz Excela musi zostać zmieniony

z

ID  Name1  Name2  Name3

1   Alf    Bert   Fritz

2   Curt

3   Otto   Mike

4   Sue    Zack 

do

ID  Name

1   Alf

1   Bert

1   Fritz

2   Curt

3   Otto

3   Mike

4   Sue

4   Zack

Brakuje mi odpowiedniego terminu, zgaduję, że jest dość powszechne, ale nie mogę go właściwie opisać.

Michael
źródło

Odpowiedzi:

0

Wypróbuj ten kod. Jest oczywiste, że działa krok po kroku. Twoje dane wejściowe zaczynają się od A1, a twoje wyjście zaczyna się od A8. Można to zmienić.

Krótszy kod jest oczywiście możliwy i myślę, że formuła tablicowa może być również złożona.

Sub single_col()
    Dim icell As Integer
    Dim irow As Integer, icol As Integer
    Dim nrows As Integer, ncols As Integer
    Dim rng_all As Range, rng_curr As Range, rng_trg As Range
    Set rng_all = Range("A2:D5")
    Set rng_trg = Range("A8")
    nrows = rng_all.Rows.Count
    icell = 0
    For irow = 1 To nrows
      Set rng_curr = rng_all.Rows(irow)
      ncols = WorksheetFunction.CountA(rng_curr)
      For icol = 2 To ncols
        icell = icell + 1
        Dim name As String
        name = rng_curr.Cells(1, icol).Text
        rng_trg.Value = rng_curr.Cells(1, 1).Text
        rng_trg.Offset(0, 1).Value = name
        Set rng_trg = rng_trg.Offset(1, 0)
      Next icol
    Next irow
End Sub

PS: powyższy kod zawiera już modyfikację sugerowaną w komentarzu.

sancho.s
źródło
Wielkie dzięki. To jest dokładnie to, o co prosiłem. Chciałbym zmodyfikować 3 rzeczy: 1.) col A jest unikalnym ciągiem, a nie liczbą całkowitą, 2.) Jak mogę uzyskać rng_all, przeciągając myszą po polach, które chcę? 3.) Jak mogę ustawić rng_trg klikając ponownie myszką?
Michael
1
1) Wymień rng_trg.Value = irow przez rng_trg.Value = rng_curr.Cells(1, 1).Text. 2) po przeciągnięciu, aby wybrać, użyj Set rng_all = Selection. 3) I wyszukałem hasło „vba pause sub, aby umożliwić wybór zakresu” i wydaje się, że podaje odpowiednie informacje; ponieważ jest to kwestia sama w sobie, a inni czytelnicy SU mogą być nią zainteresowani, proponuję zamieścić ją osobno (z odpowiednim tytułem i opisem), zapewni to społeczności większe korzyści.
sancho.s
0

Masz układ tabeli przestawnej, który chcesz „cofnąć”. To artykuł Jon Walkenbach pokazuje, co można zrobić za pomocą kilku naciśnięć klawiszy i nie jest potrzebny kod VBA.

Dla twojej konkretnej sytuacji oto, co bym zrobił.

1. Otwórz „stare” menu tabeli przestawnej, używając Alt + D, P. Pojawi się okno dialogowe, jak to pokazano poniżej. Wybierz opcję „Wiele zakresów konsolidacji” i kliknij „Dalej”.

enter image description here

2. W następnym kroku wybierz „Utworzę pola strony”; Kliknij Następny".

enter image description here

3. Podświetl zakres komórek, tak aby był zdefiniowany w górnej części okna dialogowego, a następnie kliknij przycisk „Dodaj”, aby skopiować ten zakres do listy „Wszystkie zakresy”. Kliknij Następny".

enter image description here

4. Wybierz komórkę z dala od danych. Tutaj widzisz, że wybrałem F3 na tym samym arkuszu. (Jeśli chcesz, możesz wybrać inny arkusz). Kliknij „Zakończ”.

enter image description here

5. Otrzymasz taki stół przestawny. W oknie dialogowym usuń zaznaczenie pól wyboru „Wiersz” i „Kolumna”.

enter image description here

6. To daje jednokomórkową tabelę przestawną.

enter image description here

7. Następnie klikniesz dwukrotnie jedną komórkę, a na nowym arkuszu otrzymasz dane „nieobrócone” jako nową tabelę:

enter image description here

Dzięki tym danym tabeli możesz teraz filtrować kolumnę C, aby wyświetlić puste pola, i możesz usunąć kolumnę B, a otrzymasz żądany układ.

F106dart
źródło