Excel - O macrocomandă care combină rândurile selectate

Problema

Am date sursă în Excel arătând astfel:

Numărul de vânzări pentru vânzător

 12345 Jan 150 12345 Mar 100 12345 Apr 200 56789 Jan 800 56789 Mai 10 78945 Nov 20 44444 Jan 1000 .... 

Combinația dintre CustomerID și SalesMonth este unică.

Și aș dori să combină datele sursă într-o altă fila Excel într-o formă ca aceasta:

Numărul de identificare a clientului 1-a 1-a prima sumă 2-a 2-a a 3-a a 3-a

 12345 Jan 150 Mar 100 Apr 200 56789 Jan 800 10 mai 78945 Nov 20 44444 Jan 1000 

În total, pot exista până la 10 luni diferite pentru un client (unele au doar 1 sau 2). Important este că în niciunul dintre rândurile de ieșire nu există "goluri", de exemplu dacă un client are vânzări numai în noiembrie, atunci celula "1stMonth" ar trebui să citească "Nov" pentru acel client.

Soluţie

Încercați această macrocomandă și consultați fișa 2 (copiați datele din foaia 1 în foaia 3 ca precauție de siguranță)

 Sub test () Dim client ca Range, ddata () As Range, custunq As Range, cunq As Range, filtru As Range Dim dest As Range, j As Long, k Atat timp cu foi de lucru ("sheet1" .Range ("A1"), .Range ("A1") Sfarsit (xlDown)) Set custunq = .Range ("A1")., True Set custunq = Intervalul (custunq.Offset (1, 0), custunq.End (xlDown)) Pentru fiecare custunq În custunq .Range ("A1") Field CurrentRegion.AutoFilter: = 1, Criteria1: = custunq.Value Setați filtrul = .Range ("A1"). CurrentRegion.Offset (1, 0) .Resize (Rows.Count - 1, Columns.Count). _SutilCells (xlCellTypeVisible) j = Foaia de lucruFunction.CountA (filtru.Columns (1)) 'MsgBox j ReDim ddata Cu foile de lucru ("sheet2") Set dest = .Cells (Rows.Count, "A"). Sfârșitul (xlUp) .Offset (1, 0) dest = filtru (1, 1) Sfârșit cu Pentru k = 1 Pentru j Setați ddata (k) = .Range (filtru k, ddata (k). Copiați cu foile de lucru ("foaia2") .Cells (dest.Row, Columns.Count) .End (xlToLeft) .Offset (0, 1) .PasteSpecial End cu Next k .Range ("A1"). CurrentRegion.AutoFilter Următoarea grilă custunq (.Range ("a1") .Se încheie (xlDown) .Offset (1, 0), .Cells (Rows.Count, "A") End (xlUp) End Sub Sub undo () Fișe de lucru ("foaie2"). Cells.Clear End Sub 

Mulțumită lui Venkat1926 pentru acest sfat.

Articolul Precedent Articolul Următor

Cele Mai Importante Sfaturi