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.