Jak scalić zduplikowane komórki Col A, jednocześnie sumując ich wartości w Col C, jednocześnie wyciągając ich identyfikatory w Col B Excel 2013 przy użyciu VBA [zamknięte]


1

To jest to czego chcę.

To jest to czego chcę

Scal duplikaty z kolumny A
Przeciągnij identyfikatory z kolumny B
Sumuj wartości z kolumny C

Sub SkuSorter()

Dim x As Long, y As Long
Dim rng As Range
Dim wSrc As Worksheet: Set wSrc = Sheets("AR Received SKU's List 1")

With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
End With

With wSrc
    x = .Range("A" & .Rows.Count).End(xlUp).Row
    Set rng = .Range("A1:A" & x)
    y = .Cells(1, .Columns.Count).End(xlToLeft).Column + 2
    rng.AdvancedFilter Action:=xlFilterCopy, copytoRange:=.Cells(1, y), unique:=True
    Z = .Cells(.Rows.Count, y).End(xlUp).Row
    y = y + 1
    .Cells(1, y).Value = "Total"
    .Range(.Cells(2, y), .Cells(Z, y)).Formula = _
        "=SUMIF(" & rng.Address & "," & .Cells(2, y - 1).Address(False, False) & "," & rng.Offset(, 1).Address & ")"
End With

With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
End With

End Sub

1
Witamy w Super User. Aby lepiej Ci pomóc, potrzebujemy więcej informacji. Przeczytaj Jak zapytać , a następnie edytuj swój post, aby zawierał szczegółowe informacje o przeprowadzonych badaniach i próbach rozwiązania tego samodzielnie. Stamtąd możemy Ci pomóc. Jak powiedział Teylyn, nie jest to bezpłatna usługa kodowania.
— CharlieRB,

Udało mi się uruchomić kod VBA, ale udało mi się tylko scalić duplikaty z kolumny A i sumować wartości z kolumny C, mam problem z tym, jak wyciągnąć identyfikatory z kolumny B.
— user517378,

Sub SkuSorter () Dim x As Long, y As Long Dim rng jako zakres As Worksheet Dim wSrc: Ustaw wSrc = Sheets ( "AR odebrane SKU") z zastosowaniem .ScreenUpdating = False .Calculation = xlCalculationManual kończyć
— user517378

Z wSrc x = .Range („A” i .Rows.Count) .End (xlUp) .Row Ustaw rng = .Range („A1: A” i x) y =. Komórki (1, .Columns.Count). Koniec (xlToLeft) .Kolumna + 2 rng. Zaawansowane filtrowanie Działanie: = xlFilterCopy, copytoRange: =. Komórki (1, y), unikalne: = True Z =. Komórki (.Rows.Count, y). End (xlUp) .Row y = y + 1. Komórki (1, y). Wartość = „Razem”. Zakres (. Komórki (2, y),. Komórki (Z, y)). Formuła = _ ”= SUMIF („ & rng.Adres & "," & .Cells (2, y - 1) .Adres (False, False) & "," & rng.Offset (, 1) .Address & ")" Zakończ z aplikacją .ScreenUpdating = Truek .Calculation = xlCalculationAutomatic End With
— user517378

Proszę edytować kwestię włączenia kodu. Nie umieszczaj tego w komentarzach, jest to nieczytelne.
— DavidPostill

Odpowiedzi:


1

Mam nadzieję, że jeszcze raz tu zajrzysz.
Dam odpowiedź, gdzie nie jest potrzebny VBA i postaram się wyjaśnić wszystko.

Korzystając z udostępnionego zdjęcia, utworzyłem własny arkusz: zaczynamy od tego, który element jest najwyższy. Po prostu to zrobi. Nie ma tu wiele do wyjaśnienia.
wprowadź opis zdjęcia tutaj
F2=A2

Co G2przychodzi =IF(LEN(F2),INDEX(B:B,MATCH(F2,A:A,0)),""). Wiedząc, że druga kolumna będzie zawsze taka sama jak w pierwszej kolumnie, po prostu wyszukuje dokładne dopasowanie F2w zakresie A:A( MATCH) i wypisuje wszystko, co jest w B:Btym samym wierszu. (Zatrzymuje się przy pierwszym znalezionym elemencie, chociaż nie ma to znaczenia, ponieważ jest tak samo). LENzapobiega tylko wyświetlaniu go, #NAjeśli łańcuch wyszukiwania jest pusty, a także pomija obliczenia całej tablicy.

Co H2przychodzi co sugested =IF(LEN(F2),SUMIF(A:A,F2,C:C),""). Po prostu sumuje wszystkie wartości w kolumnie, Cktóre mają podaną wyszukiwarkę w kolumnie A. LEN-Part jest taki sam jak ten na G2natomiast nie pokazuje się błąd, to pop 0. Jednak nadal otrzymasz zero, jeśli istnieje termin serch, a suma jest 0.

Chociaż możesz po prostu automatycznie wypełniać G2i H2zmniejszać tyle, ile potrzebujesz, nie zadziała F2. Ale możesz to zrobić za pomocą następującej formuły w F3:

=IF(LEN(F2),IFERROR(INDEX(A:A,MATCH(1,(COUNTIF(F$2:F2,A$2:A$1000)=0)*(A$2:A$1000<>""),0)+1),""),"")

Jest to formuła tablicowa, którą należy potwierdzić za pomocą Ctrl+ Shift+ Enter.

Zaczyna się od COUNTIFtego, że po prostu zwraca tablicę binarną, podczas gdy każdy element otrzymuje a, 1jeśli pasuje do dowolnego ciągu wyszukiwania, wszystkie inne otrzymują 0(wyszukiwanie wszystkich ciągów powyżej siebie F$2:F2). Ponieważ nie chcemy dostać już używanego przedmiotu, obracamy wszystko 0 TRUE( =0). Nie chcemy też emptyprzedmiotu, więc też go sprawdzamy ( A$2:A$1000<>""). Mnożenie 2 tablic boolowskich jest tym samym, co posiadanie ANDdla każdej pary elementów, podczas gdy użycie wartości rzeczywistej ANDsprawdzi, czy wszystkie elementy w tablicach boura mają być TRUE. Jednak ponowne pomnożenie daje nam tablicę binarną zawierającą 1w każdym elemencie, który nie jest pusty i nie jest używany. MATCHteraz sprawdza pierwszy1i zwraca swój numer pozycji (wiersz). Ale począwszy od drugiego rzędu daje nam przesunięcie, które jest zerowane +1. Posiadanie pozycji INDEXdaje nam ciąg, którego potrzebujemy. IFERRORdotyczy tylko pierwszego emptyrozwiązania, które powróci #NA. I po LENprostu pomija obliczenia dla wszystkich komórek po pierwszym pustym.
Korzystanie z kreatora formuł, aby zobaczyć, co tak naprawdę oblicza, pomaga również zrozumieć. Ale zawsze dwukrotnie sprawdź wszystkie $lub automatyczne wypełnianie może się nie powieść.

Jeśli nadal musisz o coś zapytać, po prostu napisz komentarz. :)

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.