Note: The other languages of the website are Google-translated. Back to English

 Jak transponować komórki w jednej kolumnie na podstawie unikatowych wartości w innej kolumnie?

Przypuśćmy, że masz zakres danych zawierający dwie kolumny, teraz chcesz transponować komórki w jednej kolumnie do poziomych wierszy na podstawie unikalnych wartości w innej kolumnie, aby uzyskać następujący wynik. Czy masz jakieś dobre pomysły na rozwiązanie tego problemu w programie Excel?

doc transponuje unikalne wartości 1

Transponuj komórki w jednej kolumnie na podstawie unikatowych wartości za pomocą formuł

Transponuj komórki w jednej kolumnie na podstawie unikalnych wartości z kodem VBA

Transponuj komórki w jednej kolumnie na podstawie unikalnych wartości za pomocą Kutools for Excel


Za pomocą poniższych formuł tablicowych możesz wyodrębnić unikalne wartości i transponować odpowiadające im dane do poziomych wierszy, wykonaj następujące czynności:

1. Wprowadź tę formułę tablicową: = INDEKS (A $ 2: $ 16 $, PODAJ.POZYCJĘ (0, LICZ.JEŻELI (1 $ D1: $ 2 $: $ 16 $), 0)) do pustej komórki, na przykład D2, i naciśnij Shift + Ctrl + Enter klucze razem, aby uzyskać poprawny wynik, patrz zrzut ekranu:

doc transponuje unikalne wartości 2

Uwagi: W powyższym wzorze, A2: A16 to kolumna, z której chcesz wyświetlić unikatowe wartości, i D1 to komórka powyżej tej komórki z formułą.

2. Następnie przeciągnij uchwyt wypełniania w dół do komórek, aby wyodrębnić wszystkie unikalne wartości, patrz zrzut ekranu:

doc transponuje unikalne wartości 3

3. A następnie wprowadź tę formułę do komórki E2: =IFERROR(INDEX($B$2:$B$16, MATCH(0, COUNTIF($D2:D2,$B$2:$B$16)+IF($A$2:$A$16<>$D2, 1, 0), 0)), 0)i pamiętaj, aby nacisnąć Shift + Ctrl + Enter klucze, aby uzyskać wynik, patrz zrzut ekranu:

doc transponuje unikalne wartości 4

Uwagi: W powyższym wzorze: B2: B16 to dane z kolumny, które chcesz przetransponować, A2: A16 to kolumna, na podstawie której chcesz transponować wartości, i D2 zawiera unikatową wartość wyodrębnioną w kroku 1.

4. Następnie przeciągnij uchwyt wypełniania na prawo od komórek, które chcesz wyświetlić transponowane dane, aż wyświetli się 0, patrz zrzut ekranu:

doc transponuje unikalne wartości 5

5. Następnie kontynuuj przeciąganie uchwytu wypełniania w dół do zakresu komórek, aby uzyskać transponowane dane, jak pokazano na poniższym zrzucie ekranu:

doc transponuje unikalne wartości 6


Być może formuły są skomplikowane do zrozumienia, tutaj możesz uruchomić następujący kod VBA, aby uzyskać pożądany wynik.

1. Przytrzymaj ALT + F11 klawisze, aby otworzyć Microsoft Visual Basic for Applications okno.

2, Kliknij wstawka > Modułi wklej następujący kod w Moduł Okno.

Kod VBA: Transponuj komórki w jednej kolumnie na podstawie unikalnych wartości w innej kolumnie:

Sub transposeunique()
'updateby Extendoffice
    Dim xLRow As Long
    Dim i As Long
    Dim xCrit As String
    Dim xCol  As New Collection
    Dim xRg As Range
    Dim xOutRg As Range
    Dim xTxt As String
    Dim xCount As Long
    Dim xVRg As Range
    On Error Resume Next
    xTxt = ActiveWindow.RangeSelection.Address
    Set xRg = Application.InputBox("please select data range(only two columns):", "Kutools for Excel", xTxt, , , , , 8)
    Set xRg = Application.Intersect(xRg, xRg.Worksheet.UsedRange)
    If xRg Is Nothing Then Exit Sub
    If (xRg.Columns.Count <> 2) Or _
       (xRg.Areas.Count > 1) Then
        MsgBox "the used range is only one area with two columns ", , "Kutools for Excel"
        Exit Sub
    End If
    Set xOutRg = Application.InputBox("please select output range(specify one cell):", "Kutools for Excel", xTxt, , , , , 8)
    If xOutRg Is Nothing Then Exit Sub
    Set xOutRg = xOutRg.Range(1)
    xLRow = xRg.Rows.Count
    For i = 2 To xLRow
        xCol.Add xRg.Cells(i, 1).Value, xRg.Cells(i, 1).Value
    Next
    Application.ScreenUpdating = False
    For i = 1 To xCol.Count
        xCrit = xCol.Item(i)
        xOutRg.Offset(i, 0) = xCrit
        xRg.AutoFilter Field:=1, Criteria1:=xCrit
        Set xVRg = xRg.Range("B2:B" & xLRow).SpecialCells(xlCellTypeVisible)
        If xVRg.Count > xCount Then xCount = xVRg.Count
        xRg.Range("B2:B" & xLRow).SpecialCells(xlCellTypeVisible).Copy
        xOutRg.Offset(i, 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
        Application.CutCopyMode = False
    Next
    xOutRg = xRg.Cells(1, 1)
    xOutRg.Offset(0, 1).Resize(1, xCount) = xRg.Cells(1, 2)
    xRg.Rows(1).Copy
    xOutRg.Resize(1, xCount + 1).PasteSpecial Paste:=xlPasteFormats
    xRg.AutoFilter
    Application.ScreenUpdating = True
End Sub

3. Następnie naciśnij F5 klucz do uruchomienia tego kodu, a pojawi się okno zachęty przypominające o wyborze zakresu danych, którego chcesz użyć, patrz zrzut ekranu:

doc transponuje unikalne wartości 7

4. A następnie kliknij OK przycisk, pojawi się kolejne okno zachęty przypominające o wybraniu komórki do umieszczenia wyniku, patrz zrzut ekranu:

doc transponuje unikalne wartości 8

6, Kliknij OK przycisk, a dane w kolumnie B zostały transponowane na podstawie unikalnych wartości w kolumnie A, patrz zrzut ekranu:

doc transponuje unikalne wartości 9


Jeśli masz Kutools dla programu Excel, łącząc Zaawansowane wiersze łączenia i Podział komórki narzędzi, możesz szybko zakończyć to zadanie bez żadnych formuł ani kodu.

Kutools dla programu Excel : z ponad 300 poręcznymi dodatkami Excela, które można wypróbować bez ograniczeń w ciągu 30 dni.

Po zainstalowaniu Kutools dla programu Excelwykonaj następujące czynności:

1. Wybierz zakres danych, którego chcesz użyć. (Jeśli chcesz zachować oryginalne dane, najpierw skopiuj i wklej dane w innej lokalizacji).

2. Następnie kliknij Kutools > Połącz i podziel > Zaawansowane wiersze łączeniazobacz zrzut ekranu:

3, w Połącz wiersze na podstawie kolumny w oknie dialogowym, wykonaj następujące operacje:

(1.) Kliknij nazwę kolumny, na podstawie której chcesz transponować dane, i wybierz Główny klucz;

(2.) Kliknij inną kolumnę, którą chcesz transponować, i kliknij Połączyć następnie wybierz jeden separator, aby oddzielić połączone dane, na przykład spację, przecinek, średnik.

doc transponuje unikalne wartości 11

4. Następnie kliknij Ok przycisk, dane w kolumnie B zostały połączone w jedną komórkę na podstawie kolumny A, patrz zrzut ekranu:

doc transponuje unikalne wartości 12

5. Następnie wybierz połączone komórki i kliknij Kutools > Połącz i podziel > Podział komórkizobacz zrzut ekranu:

6, w Podział komórki okno dialogowe, wybierz Podziel na kolumny pod Typ opcja, a następnie wybierz separator oddzielający połączone dane, patrz zrzut ekranu:

doc transponuje unikalne wartości 14 14

7. Następnie kliknij Ok i wybierz komórkę, aby umieścić wynik podziału w wyskakującym oknie dialogowym, zobacz zrzut ekranu:

doc transponuje unikalne wartości 15

8, Kliknij OK, a otrzymasz taki wynik, jakiego potrzebujesz. Zobacz zrzut ekranu:

doc transponuje unikalne wartości 16

Pobierz i bezpłatną wersję próbną Kutools dla programu Excel teraz!


Kutools dla programu Excel: z ponad 300 poręcznymi dodatkami do programu Excel, które można wypróbować bez ograniczeń w ciągu 30 dni. Pobierz i bezpłatną wersję próbną teraz!

Najlepsze narzędzia biurowe

Kutools dla programu Excel rozwiązuje większość problemów i zwiększa produktywność o 80%

  • Ponowne użycie: Szybko włóż złożone wzory, wykresy i wszystko, czego używałeś wcześniej; Szyfruj komórki z hasłem; Utwórz listę mailingową i wysyłaj e-maile ...
  • Pasek Super Formula (łatwo edytować wiele wierszy tekstu i formuły); Układ do czytania (łatwe odczytywanie i edytowanie dużej liczby komórek); Wklej do filtrowanego zakresu...
  • Scal komórki / wiersze / kolumny bez utraty danych; Podziel zawartość komórek; Połącz zduplikowane wiersze / kolumny... Zapobiegaj zduplikowanym komórkom; Porównaj zakresy...
  • Wybierz Duplikat lub Unikalny Wydziwianie; Wybierz puste wiersze (wszystkie komórki są puste); Super Find i Fuzzy Find w wielu zeszytach ćwiczeń; Losowy wybór ...
  • Dokładna kopia Wiele komórek bez zmiany odwołania do formuły; Automatyczne tworzenie odniesień do wielu arkuszy; Wstaw punktory, Pola wyboru i nie tylko ...
  • Wyodrębnij tekst, Dodaj tekst, Usuń według pozycji, Usuń przestrzeń; Tworzenie i drukowanie podsumowań stronicowania; Konwertuj zawartość komórek i komentarze...
  • Super filtr (zapisz i zastosuj schematy filtrów do innych arkuszy); Zaawansowane sortowanie według miesiąca / tygodnia / dnia, częstotliwości i innych; Specjalny filtr pogrubieniem, kursywą ...
  • Połącz skoroszyty i arkusze robocze; Scal tabele na podstawie kluczowych kolumn; Podziel dane na wiele arkuszy; Konwersja wsadowa xls, xlsx i PDF...
  • Ponad 300 zaawansowanych funkcji. Obsługuje Office / Excel 2007-2021 i 365. Obsługuje wszystkie języki. Łatwe wdrażanie w przedsiębiorstwie lub organizacji. Pełne funkcje 30-dniowa bezpłatna wersja próbna. 60-dniowa gwarancja zwrotu pieniędzy.
karta kte 201905

Karta Office wprowadza interfejs z zakładkami do pakietu Office i znacznie ułatwia pracę

  • Włącz edycję i czytanie na kartach w programach Word, Excel, PowerPoint, Publisher, Access, Visio i Project.
  • Otwieraj i twórz wiele dokumentów w nowych kartach tego samego okna, a nie w nowych oknach.
  • Zwiększa produktywność o 50% i redukuje setki kliknięć myszką każdego dnia!
officetab dół
Sortuj komentarze według
Komentarze (56)
Brak ocen. Oceń jako pierwszy!
Ten komentarz został zminimalizowany przez moderatora na stronie
Jak bym poszedł w przeciwnym kierunku? Z wielu kolumn do jednej kolumny? Z góry dziękuję! Tim
Ten komentarz został zminimalizowany przez moderatora na stronie
To było fantastyczne. Miałem Excela z około 2000 unikalnymi wartościami w wierszu A i nie poradziłbym sobie z tym ćwiczeniem bez Twojej pomocy. Wielkie dzięki.
Ten komentarz został zminimalizowany przez moderatora na stronie
Sam pierwszy krok kończy się niepowodzeniem =INDEX ($A$2:$A$16, MATCH(0,COUNTIF($D$1:$D1,$A$2:$A$16), 0)) daje błąd Wartość niedostępna
Ten komentarz został zminimalizowany przez moderatora na stronie
Po prostu chcę zrobić coś przeciwnego. Jakbym już osiągnął efekt końcowy i chcę osiągnąć pierwszy krok.
Ten komentarz został zminimalizowany przez moderatora na stronie
Szukam tego samego
Ten komentarz został zminimalizowany przez moderatora na stronie
Czy znalazłeś jakieś rozwiązanie dla odwrotnego scenariusza? Dzięki!
Ten komentarz został zminimalizowany przez moderatora na stronie
Ja też chcę zrobić coś przeciwnego. Jakieś rozwiązanie, panowie?
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć chłopaki,
Aby uzyskać odwrotny wynik na przykładzie tego artykułu, możesz zastosować następujący kod VBA: (Uwaga: wybierając zakres danych, który chcesz transponować, pomiń wiersz nagłówka)

Sub TranspozycjaUnique_2()
Dim xLRow, xLCount As Long
Dim xRg jako zakres
Dim xOutRg jako zakres
Dim xObjRRg jako zakres
Dim xTxt jako ciąg
Dim xCount As Long
Dim xVRg jako zakres
On Error Resume Next
xTxt = ActiveWindow.RangeSelection.Adres
Ustaw xRg = Application.InputBox("proszę wybrać zakres danych:", "Kutools for Excel", xTxt, , , , , 8)
Ustaw xRg = Application.Intersect(xRg, xRg.Worksheet.UsedRange)
Jeśli xRg jest niczym, wyjdź z Sub
Jeśli (xRg.Rows.count < 2) Lub _
(xRg.Liczba.obszarów > 1) Wtedy
MsgBox "Nieprawidłowy wybór", , "Kutools for Excel"
Exit Sub
End If
Ustaw xOutRg = Application.InputBox("proszę wybrać zakres wyjściowy (określ jedną komórkę):", "Kutools for Excel", xTxt, , , , , 8)
Jeśli xOutRg jest niczym, wyjdź z Sub
Application.ScreenUpdating = Fałsz
xLCount = xRg.liczba.kolumn
Dla xLRow = 1 To xRg.Rows.count
Ustaw xObjRRg = Range(xRg.Cells(xLRow, 2), xRg.Cells(xLRow, xLCount)).SpecialCells(xlCellTypeConstants)
xObjRRg.Kopiuj
xOutRg.Offset(, 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Application.CutCopyMode = False
Range(Cells(xOutRg.Row, xOutRg.Column), Cells(xOutRg.Row + xObjRRg.count - 1, xOutRg.Column)).Wartość = xRg.Komórki(xLRow, 1).Wartość
Ustaw xOutRg = xOutRg.Offset(RowOffset:=xObjRRg.count)
Dalej
Application.ScreenUpdating = True
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Jak wykonać transpozycję, jeśli kolumna B nie ma unikalnych wartości, ale nadal ich potrzebuje?
KTE 100
KTE 100
Zakładając, że są to dwie różne transakcje
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć, Didin,

Czy możesz przedstawić swój problem jaśniej lub bardziej szczegółowo?
Możesz wstawić przykładowy zrzut ekranu dla swojego problemu.
Dziękuję Ci!
Ten komentarz został zminimalizowany przez moderatora na stronie
Witam,
Czy mógłbyś mi pomóc z poniższymi wymaganiami.
Produkt ----- zamówienie
KTE ------ 100KTE ------ 200KTO ------ 300KTO ------ 300
oczekiwany wynik
Produkt ----- zamówienie ----- zamówienie ------ zamówienie
KTE ------ 100 ------ 200
KTO ------ 300 ------ 300







Ten komentarz został zminimalizowany przez moderatora na stronie
Ja też tego potrzebuję. Chcę wyświetlić 100 dwa razy, jeśli jest w danych
Ten komentarz został zminimalizowany przez moderatora na stronie
Czy możesz zaproponować na to formułę?
Ten komentarz został zminimalizowany przez moderatora na stronie
Czy kiedykolwiek otrzymałeś odpowiedź/rozwiązanie na to wyzwanie? Mam ten sam.
Ten komentarz został zminimalizowany przez moderatora na stronie
Czy można to zrobić w odwrotny sposób? Czyli dane w wierszach o różnej długości, a więc sortowanie na dwie kolumny? Patrz załączony.
Ten komentarz został zminimalizowany przez moderatora na stronie
chcę też transponować zduplikowane wartości (wszystkie wartości - unikalne + duplikaty), a nie tylko unikalne wartości. Czy możesz podać wzór na to.
Ten komentarz został zminimalizowany przez moderatora na stronie
potrzebuję tego samego
Ten komentarz został zminimalizowany przez moderatora na stronie
Czy kiedykolwiek otrzymałeś odpowiedź/rozwiązanie na to wyzwanie? Mam ten sam.
Ten komentarz został zminimalizowany przez moderatora na stronie
Z poniższym wzorem:

=IFERROR(INDEX($B$2:$B$45, MATCH(0, COUNTIF($D2:D2,$B$2:$B$45)+IF($A$2:$A$10<>$D2, 1, 0), 0)), 0)

Jak mogę transponować dane przy użyciu dopasowań przybliżonych? Powiedzmy, że chcę wyodrębnić wszystkie wartości z kolumny B, które pasują do pierwszych 9 znaków / cyfr z kolumny A? Kolumna B ma 11 znaków, a A tylko 9. dziękuję!
Ten komentarz został zminimalizowany przez moderatora na stronie
Muszę zrobić dokładnie odwrotnie. Mam wiele kolumn powiązanych z identyfikatorem wiersza i chcę je wkleić w dwie kolumny
na przykład mam
wiersz, wartość, wartość1, wartość2, wartość3, wartość4, wartość..225
100, Delfin, 255, 9--, Sarah, Jameson, ....
179, router, powódź, jazon, 89, nos



Chcę, żeby tak wyglądało
100, Delfin
100, 255
100, 9--
100, Sara
100, Jameson
179, Router
179, powódź
179, Jazon
179, 89
179, nos
Ten komentarz został zminimalizowany przez moderatora na stronie
Witaj, Dave,
Aby rozwiązać swój problem, użyj poniższego kodu VBA: (Uwaga: Po wybraniu zakresu danych, który chcesz transponować, wyłącz wiersz nagłówka.)

Sub TranspozycjaUnique_2()
Dim xLRow, xLCount As Long
Dim xRg jako zakres
Dim xOutRg jako zakres
Dim xObjRRg jako zakres
Dim xTxt jako ciąg
Dim xCount As Long
Dim xVRg jako zakres
On Error Resume Next
xTxt = ActiveWindow.RangeSelection.Adres
Ustaw xRg = Application.InputBox("proszę wybrać zakres danych:", "Kutools for Excel", xTxt, , , , , 8)
Ustaw xRg = Application.Intersect(xRg, xRg.Worksheet.UsedRange)
Jeśli xRg jest niczym, wyjdź z Sub
Jeśli (xRg.Rows.count < 2) Lub _
(xRg.Liczba.obszarów > 1) Wtedy
MsgBox "Nieprawidłowy wybór", , "Kutools for Excel"
Exit Sub
End If
Ustaw xOutRg = Application.InputBox("proszę wybrać zakres wyjściowy (określ jedną komórkę):", "Kutools for Excel", xTxt, , , , , 8)
Jeśli xOutRg jest niczym, wyjdź z Sub
Application.ScreenUpdating = Fałsz
xLCount = xRg.liczba.kolumn
Dla xLRow = 1 To xRg.Rows.count
Ustaw xObjRRg = Range(xRg.Cells(xLRow, 2), xRg.Cells(xLRow, xLCount)).SpecialCells(xlCellTypeConstants)
xObjRRg.Kopiuj
xOutRg.Offset(, 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Application.CutCopyMode = False
Range(Cells(xOutRg.Row, xOutRg.Column), Cells(xOutRg.Row + xObjRRg.count - 1, xOutRg.Column)).Wartość = xRg.Komórki(xLRow, 1).Wartość
Ustaw xOutRg = xOutRg.Offset(RowOffset:=xObjRRg.count)
Dalej
Application.ScreenUpdating = True
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Dziękuję, działa idealnie, zaoszczędziłeś mi 2 dni! :)
Ten komentarz został zminimalizowany przez moderatora na stronie
Witaj Skyyang,
proszę podać kod dla 3 kolumn. Poniżej przykład:
Chcę dane takie jak: yogesh@gmail.com społeczność 1 tylko wyświetl społeczność 2 tylko wyświetl ...... goyal@gmail.com społeczność 1 wyświetl tylko społeczność 2 tylko wyświetl........

Ten komentarz został zminimalizowany przez moderatora na stronie
Witaj, Ygojal,

Aby rozwiązać problem, zastosuj poniższy kod:

Sub TranspozycjaUnique_2()

Dim xLRow, xLCount As Long

Dim xRg jako zakres

Dim xOutRg jako zakres

Dim xObjRRg jako zakres

Dim xTxt jako ciąg

Dim xCount As Long

Dim xVRg jako zakres

Dim xC, xI, xI1, xI2 jako liczba całkowita

On Error Resume Next

xTxt = ActiveWindow.RangeSelection.Adres

Ustaw xRg = Application.InputBox("proszę wybrać zakres danych:", "Kutools for Excel", xTxt, , , , , 8)

Ustaw xRg = Application.Intersect(xRg, xRg.Worksheet.UsedRange)

Jeśli xRg jest niczym, wyjdź z Sub

Jeśli (xRg.Rows.Count < 2) Lub _

(xRg.Obszary.Count > 1) Wtedy

MsgBox "Nieprawidłowy wybór", , "Kutools for Excel"

Exit Sub

End If

Ustaw xOutRg = Application.InputBox("proszę wybrać zakres wyjściowy (określ jedną komórkę):", "Kutools for Excel", xTxt, , , , , 8)

Jeśli xOutRg jest niczym, wyjdź z Sub

Application.ScreenUpdating = Fałsz

xLCount = xRg.Kolumny.Liczba

Dla xLRow = 1 To xRg.Rows.Count

Ustaw xObjRRg = Range(xRg.Cells(xLRow, 2), xRg.Cells(xLRow, xLCount)).SpecialCells(xlCellTypeConstants)

On Error Resume Next

xC = (xObjRRg.Count Mod 2)

Jeśli xC <> 0 Wtedy

xC = Int(xObjRRg.Liczba / 2) + 1

Więcej

xC = Int(xObjRRg.Liczba / 2)

End If

xI1 = 1

xI2 = 2

Dla xI = 1 do xC

Zakres(xObjRRg.Item(xI1), xObjRRg.Item(xI2)).Kopiuj

xOutRg.Offset(, 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Application.CutCopyMode = False

xOutRg.Wartość = xRg.Komórki(xLRow, 1).Wartość

Ustaw xOutRg = xOutRg.Offset(RowOffset:=1)

xI1 = xI1 + (2)

xI2 = xI2 + (2)

Dalej

Dalej

Application.ScreenUpdating = True

End Sub



Proszę spróbować, mam nadzieję, że może ci to pomóc!
Ten komentarz został zminimalizowany przez moderatora na stronie
Witaj Bro, kod działa odwrotnie. Proszę zapoznać się z załączonym zrzutem ekranu z wymaganiami. Dostępne dane dotyczą wierszy i chcemy je transponować w kolumnach .
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć, ygojal,
Przepraszamy za spóźnioną odpowiedź, proszę zastosować następujący kod, proszę spróbować!

Sub transposeunikalne()

„aktualizacja do” Extendoffice

Dim xLRow tak długo

Przyciemnij i tak długo

Dim xCrit jako ciąg

Dim xCol jako nowa kolekcja

Dim xRg jako zakres

Dim xOutRg jako zakres

Dim xTxt jako ciąg

Dim xCount As Long

Dim xVRg jako zakres

Dim xFRg, xSRg, xCRg jako zakres

On Error Resume Next

xTxt = ActiveWindow.RangeSelection.Adres

Ustaw xRg = Application.InputBox("wybierz zakres danych (tylko 3 kolumny):", "Kutools for Excel", xTxt, , , , , 8)

Ustaw xRg = Application.Intersect(xRg, xRg.Worksheet.UsedRange)

Jeśli xRg jest niczym, wyjdź z Sub

Jeśli (xRg.Columns.Count <> 3) Lub _

(xRg.Obszary.Count > 1) Wtedy

MsgBox "używany zakres to tylko jeden obszar z dwiema kolumnami ", , "Kutools for Excel"

Exit Sub

End If

Ustaw xOutRg = Application.InputBox("proszę wybrać zakres wyjściowy (określ jedną komórkę):", "Kutools for Excel", xTxt, , , , , 8)

Jeśli xOutRg jest niczym, wyjdź z Sub

Ustaw xOutRg = xOutRg.Range(1)

xLRow = xRg.Row.Count

Dla i = 2 do xLRow

xCol.Add xRg.Cells(i, 1)).Value, xRg.Cells(i, 1)).Value

Dalej

Application.ScreenUpdating = Fałsz

Application.ScreenUpdating = Fałsz

Dla i = 1 To xCol.Count

xCrit = xCol.Item(i)

xOutRg.Offset(i, 0) = xKryt

xRg.AutoFilter Pole:=1, Kryterium1:=xCrit

Ustaw xVRg = xRg.Range("B2:B" & xLRow).SpecialCells(xlCellTypeVisible)

Jeśli xVRg.Count > xCount to xCount = xVRg.Count

Ustaw xSRg = xRg.Range("B2:B" & xLRow).SpecialCells(xlCellTypeVisible)

Ustaw xCRg = xOutRg.Offset(i, 1)

Dla każdego xFRg W xSRg

xFRg.Kopiuj

xCRg.PasteSpecial

xRg.Zakres("B1").Kopiuj

xCRg.Offset(-(i), 0).Wklejspecjalnie

xFRg.Offset(0, 1).Kopiuj

Ustaw xCRg = xCRg.Offset(0, 1)

xCRg.PasteSpecial

xRg.Zakres("c1").Kopiuj

xCRg.Offset(-(i), 0).Wklejspecjalnie

Ustaw xCRg = xCRg.Offset(0, 1)

Dalej

Application.CutCopyMode = False

Dalej

xRg.Element(1).Kopiuj

xOutRg.PasteSpecial

xRg.Autofiltr

Application.ScreenUpdating = True

End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Hej Bro Próbowałem użyć tego kodu, ale program Excel zawiesza się, gdy uruchamiam ten kod i nie widzę danych wyjściowych z powyższego kodu. proszę zasugerować, co zrobić w takim przypadku.
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć,
Kod działa dobrze w moim skoroszycie, której wersji programu Excel używasz?
Ten komentarz został zminimalizowany przez moderatora na stronie
MS Excel 2016
Ten komentarz został zminimalizowany przez moderatora na stronie
Kod działa również dobrze w moim Excelu 2016, spróbuj najpierw z danymi o małym zakresie.
Ten komentarz został zminimalizowany przez moderatora na stronie
Testowałem na 160 rekordach, ale w tym wciąż był duplikat.
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć Skyyang, Podoba mi się to, czy jest szansa, że ​​zadziała na czterech kolumnach? znowu po prostu używając pierwszych dwóch jako porównania, czy jeszcze lepiej możliwości wybrania liczby kolumn przed ich wybraniem? Rzuciłem okiem na twój scenariusz, nie mam pojęcia, jak to osiągnąć...
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć Skyyang, Podoba mi się to, czy jest szansa, że ​​zadziała na czterech kolumnach? znowu po prostu używając pierwszych dwóch jako porównania, czy jeszcze lepiej możliwości wybrania liczby kolumn przed ich wybraniem? Rzuciłem okiem na twój scenariusz, nie mam pojęcia, jak to osiągnąć...
Ten komentarz został zminimalizowany przez moderatora na stronie
Bro, pls pomóż w tym.
Ten komentarz został zminimalizowany przez moderatora na stronie
Witaj bracie, wciąż czekam na twoją pomoc
Ten komentarz został zminimalizowany przez moderatora na stronie
Ten komentarz został zminimalizowany przez moderatora na stronie
Tak samo jak Dave, muszę zrobić dokładnie odwrotnie. Tabela 2 do transpozycji do tabeli 1. Tabela danych wejściowych 2, Tabela wyników 1.
Ten komentarz został zminimalizowany przez moderatora na stronie
=INDEKS($A$2:$A$16, MATCH(0,COUNTIF($D$1:$D1,$A$2:$A$16), 0)) pracował dla mnie, aby transponować unikalne wartości kolumny do nowej kolumna ALE... czy istnieje sposób na reklamę w funkcji sortowania, aby nowa utworzona kolumna była transponowana w porządku rosnącym?


Dzięki!
Ten komentarz został zminimalizowany przez moderatora na stronie
Musisz uzyskać to samo wyjście, ale dla predefiniowanych kolumn do wybrania będzie ($A, $B) i potrzebna jest kolumna wyjściowa Pozycja na $D$1.
Jeśli ktoś ma pomysł, to byłaby wielka pomoc!!!!
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć, czy możemy dodać każdy wiersz i dać wynik w jednej kolumnie, z powyższą funkcjonalnością.
Ten komentarz został zminimalizowany przez moderatora na stronie
Więc pracuję dla firmy. Mamy kolumny z informacjami takimi jak nazwisko, imię, ranga, sekcja, numer telefonu, adres. Czy mogę użyć podobnej formuły, aby przetransponować cały wiersz informacji do kolumny według nazw?
Ten komentarz został zminimalizowany przez moderatora na stronie
=INDEKS($A$2:$A$16, MATCH(0,COUNTIF($D$1:$D1,$A$2:$A$16), 0)) pracował dla mnie, aby transponować unikalne wartości kolumny A do nowej kolumna ALE ... czy istnieje sposób, aby wszystkie wartości w kolumnie B zostały przetransponowane, jak podano poniżej:

Zamówienie produktu Data Zamówienie produktu Zamówienie Zamówienie Zamówienie Zamówienie Zamówienie
KTE 100 3 KTE 3 2019 100 100 100 200 100
KTO 150 3 KTO 3 2019 150 100 200 100
KTE 100 3/4/2019 BOT 150 100 200 150 100 200
KTO 100 3/4/2019 COD 200 150 100 150
KTO 200 3
KTE 100 3
BOT 150 3
BOT 100 3
KTO 100 3
KTE 200 3
BOT 200 3
COD 200 3
KTE 100 3
KTO 150 3
BOT 150 3
KTE 150 3
COD 150 3
BOT 100 3
BOT 200 3
COD 100 3
KTO 200 3
COD 150 3
KTE 100 3
Ten komentarz został zminimalizowany przez moderatora na stronie
Makro nie działało. Po prostu skopiował zawartość komórki A1.
Ten komentarz został zminimalizowany przez moderatora na stronie
Mam zestaw danych w kolumnach A (unikalny identyfikator) - E. Każdy wiersz zawiera dane na podstawie identyfikatora #, istnieje wiele wierszy dla każdego identyfikatora #, ale chcę jeden wiersz na identyfikator # ze wszystkimi innymi danymi w kolumnach ( będzie to minimum 5 kolumn i maksimum 25 w zależności od tego, ile ma każdy unikalny identyfikator). Znalazłem kod, ale działa tylko dla dwóch kolumn. Musiałem połączyć cztery kolumny (bez identyfikatora), a następnie rozgraniczyć po uruchomieniu makra (dużo pracy). W przypadku 15,000 XNUMX wierszy danych jest to dodatkowe czasochłonne. Czy istnieje niekończące się makro kolumn, które zadziała? Z góry dziękuję wszystkim za pomoc!
KOD ID ST KOD# DATA
Ten komentarz został zminimalizowany przez moderatora na stronie
Mam zestaw danych, który ma wiele identyfikatorów w kolumnie A i połączyłem dane w kolumnie B. Użyłem powyższej formuły i trochę ją zmieniłem, aby transponować komórki z kolumny B do wiersza opartego na unikalnym identyfikatorze powiązana z nim w kolumnie A. Formuła używana do identyfikacji unikalnych identyfikatorów to: = INDEX ($ A 2: $ A 13409, MATCH (0, COUNTIF ($ D 1: $ D1, $ A 2: $ A 13409), 0)). Formuła użyta do wykonania transpozycji to: = IFERROR (INDEKS ($ B $ 2: $ B $ 13409, MATCH (0, IF ($ A $ 2: $ A $ 13409 <> $ D2, 1, 0) + COUNTIF ($ D2: D2,$B$2:$B$13409), 0)), "Nie dotyczy"). Oba podane w artykule, tylko nieznacznie zmienione.

Problem polega na tym, że mój zestaw danych w kolumnie B ma duplikaty, czasami pojawiające się jeden po drugim, i chcę, aby wszystkie wartości z kolumny były prezentowane w wierszach.

Załączony obraz jest tym, co chciałbym pokazać w tabeli (jest to mały rozmiar próbki, prawdziwy zestaw danych zawiera ponad 13,000 XNUMX wpisów). To, co się teraz dzieje, to sytuacja, w której napotkana zostanie powtarzająca się wartość, nie zostanie ona zliczona.
tj. wiersz 9 dla identyfikatora 11980 pokazuje teraz tylko 0 -31.79 -0.19 -0.74 N/AN/A .... kiedy zamiast tego potrzebuję pokazać 0 0 -31.79 -0.19 -0.74 0 0 N/AN/A . ...

Czy istnieje sposób na obejście tego problemu i rozwiązanie go?

Z góry dziękuję!
Ten komentarz został zminimalizowany przez moderatora na stronie
Czy kiedykolwiek otrzymałeś odpowiedź/rozwiązanie na to wyzwanie? Mam ten sam.
Ten komentarz został zminimalizowany przez moderatora na stronie
Mam zestaw danych, który składa się z 3 kolumn przedstawionych poniżej:



Kolumna A Kolumna B Kolumna C



Kraj1 Rok1 Wartość1

Kraj1 Rok2 Wartość2

Kraj1 Rok3 Wartość3,



Kraj2 Rok1 Wartość1

Kraj2 Rok3 Wartość3,

...........



Muszę połączyć te 3 kolumny w takiej tabeli:

Rok 1 Rok 2 Rok 3 .............................. Rok X



Kraj1 Wartość1 Wartość2 Wartość3

Kraj2 Wartość1 #Brak wartości3

.....
.....
.....

KrajX Wartośćx ..................





Problem, z którym się borykam, polega na tym, że dla niektórych danych w kolumnie A nie mam wartości dla każdego roku, tylko dla niektórych (na przykład kraj 2 ma brakujące wartości dla roku 2)





Czy istnieje sposób na obejście tego problemu i rozwiązanie go?



Z góry dziękuję!
Ten komentarz został zminimalizowany przez moderatora na stronie
czy możesz udostępnić kod, jeśli są 2 kolumny do skopiowania zamiast 1. poniżej znajduje się przykład.
Nie ma tu jeszcze żadnych komentarzy
Pokaż więcej
Zostaw swój komentarz
Publikowanie jako gość
×
Oceń ten post:
0   Postacie
Sugerowane lokalizacje

Bądż na bieżąco

Prawa autorskie © 2009 - www.extendoffice.com. | Wszelkie prawa zastrzeżone. Zasilany przez ExtendOffice, | Mapa strony
Microsoft i logo Office są znakami towarowymi lub zastrzeżonymi znakami towarowymi Microsoft Corporation w Stanach Zjednoczonych i / lub innych krajach.
Chronione przez Sectigo SSL