Excel: Jak zamienić dwa wymiary pionowe na wymiar pionowy i poziomy


1

Mam stół, który z grubsza wygląda tak:

  col1 col2  col3                        table1
---------------
01| 1   A  value1A
02| 1   B  value1B
03| 1   Z  value1Z
04| 2   Z  value2Z
05| 3   A  value3A
06| 3   B  value3B
07| 3   Z  value3Z
08| 4   A  value4A
09| 4   B  value4B
10| 4   Z  value4Z
11| 5   Z  value5Z

I chciałbym uzyskać coś takiego:

      A       B       Z                  table2
 -------------------------
1| value1A value1B value1Z
2|                 value2Z
3| value3A value3B value3Z
4| value4A value4B value4Z
5|                 value5Z

Gdzie formuła w komórce A1 z tabeli 2 oblicza wartość A1 na podstawie wartości znajdujących się w komórkach A1 i B1 z tabeli 1 i gdzie druga kolumna w tabeli 1 jest czasami wypełniona tylko jedną wartością (zawsze w tym przypadku Z). Jeśli nie zostanie wypełniona jedną pojedynczą wartością, zawsze będą to 3 wartości (A, B i Z).

Jak dotąd nie znalazłem nic wygodnego.

EDYCJA: jak wspomniano w poniższych komentarzach, powinieneś także wiedzieć, że wartość1Z jest tak naprawdę sumą wartości1A i wartości1B.

EDYCJA 2: Wolałbym nie używać tabeli przestawnej. W moim bardzo szczególnym przypadku nie jest to odpowiednie.


Czy sekwencja 31 w kolumnie, a następnie 3 2 w dole itd., A także czy masz ciąg ABC powtarzający się w następnej kolumnie, stały?
— patkim

To dobre pytanie, a odpowiedź brzmi niestety nie. Okazuje się, że tak naprawdę uprościłem mój problem. Zaktualizuję mój post, aby wszystko było bardziej przejrzyste.
— Guillaume

W tabeli 1 kolumna C 1. wartość to „wartość1A”, ale w tabeli wyników pokazano ją jako „wartośćA1”. Czy chcesz tego (zamień dwa ostatnie znaki), czy to tylko błąd literowy?
— patkim

Literówka. Właśnie to poprawiłem, dodając więcej szczegółów na temat mojego problemu.
— Guillaume

Czy zgadzasz się z odstępami pomiędzy, jak pokazano w tabeli 2, czy spodziewasz się, że każda kolumna będzie miała ciągły zakres?
— patkim

Odpowiedzi:


2

Wypróbuj to krótkie makro:

Sub MAIN2()
    Dim r As Range, v, numb, letr
    Dim i As Long, j As Long

    Columns(1).SpecialCells(2).Copy Cells(2, 4)
    Columns(4).RemoveDuplicates Columns:=1, Header:=xlNo
    Columns(2).SpecialCells(2).Copy Cells(2, 5)
    Columns(5).RemoveDuplicates Columns:=1, Header:=xlNo

    Set r = Columns(5).SpecialCells(2)
    r.Copy
    Cells(1, 5).PasteSpecial Transpose:=True
    r.Clear

    For Each r In Columns(3).SpecialCells(2)
        v = r.Value
        numb = r.Offset(0, -2).Value
        lett = r.Offset(0, -1).Value

        For i = 2 To Rows.Count
            If Cells(i, 4) = numb Then Exit For
        Next i
        For j = 5 To Columns.Count
            If Cells(1, j) = lett Then Exit For
        Next j

        Cells(i, j) = v
    Next r

End Sub

wprowadź opis zdjęcia tutaj

Makra są bardzo łatwe w instalacji i obsłudze:

  1. ALT-F11 wyświetla okno VBE
  2. ALT-I ALT-M otwiera nowy moduł
  3. wklej i zamknij okno VBE

Jeśli zapiszesz skoroszyt, makro zostanie z nim zapisane. Jeśli używasz wersji Excela późniejszej niż 2003, musisz zapisać plik jako .xlsm zamiast .xlsx

Aby usunąć makro:

  1. wywołać okno VBE jak wyżej
  2. wyczyść kod
  3. zamknij okno VBE

Aby użyć makra z Excela:

  1. ALT-F8
  2. Wybierz makro
  3. Dotknij URUCHOM

Aby dowiedzieć się więcej o makrach, zobacz:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

i

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

Makra muszą być włączone, aby to działało!


Cześć. Dziękuję za odpowiedź! Obawiam się, że użyłeś poprzedniej wersji mojego problemu, gdy wciąż była w nim literówka: w kolumnie B nie ma litery C, powinna to być litera Z. Czy możesz odpowiednio zmodyfikować kod?
— Guillaume

@Guillaume Kod będzie taki sam ............... ale zaktualizuję obraz.
— Student Gary'ego

@Guillaume Aktualizacja obrazu zakończona
— Gary's Student

1

Możesz po prostu użyć tabeli przestawnej.

Edycja: oto sprawdzony przykład. Nie wiesz, dlaczego to nie spełnia Twoich wymagań? https://excel.solutions/wp-content/uploads/2017/11/Guillaume.xlsx

Możesz łatwo zmienić kolejność kolumn w tabelach przestawnych, ręcznie dostosowując lub używając niestandardowych list.


proszę rozwinąć to bardziej, obecnie bardziej przypomina komentarz, a nie odpowiedź. Gdyby OP był zaznajomiony z tabelami przestawnymi, nie zadałby tego pytania.
— Máté Juhász

To rzeczywiście możliwe rozwiązanie, ale w moim przypadku nie jest wygodne. Na przykład nie mogę uporządkować kolumn według własnych upodobań, korzystając z tabel przestawnych (może się mylę, ale nie sądzę). Wolałbym bardziej elastyczne rozwiązanie z formułami w każdej komórce.
— Guillaume

1
@Guillaume Możesz zamówić kolumny i wiersze w tabeli przestawnej, po prostu przeciągając i upuszczając (patrz „ustawianie niestandardowych opcji sortowania” tutaj ). Nie jest to również wymagane w twoim pytaniu. Edytuj swoje pytanie i dołącz wszystko, co istotne, w przeciwnym razie ludzie będą marnować czas na sugerowanie rozwiązań, które są dla ciebie „niewygodne”.
— Máté Juhász

Dzięki, stary. Zredagowałem moje pytanie. Problem w tym, że czasami po otrzymaniu odpowiedzi zdajesz sobie sprawę, jak „nieprecyzyjne” jest twoje pytanie :)
— Guillaume,

Dodałem przykładowe rozwiązanie przestawne. Nie wiesz, dlaczego to nie spełnia Twoich wymagań?
— Olly,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.