Excel - makro, ki združuje izbrane vrstice

Težava

Imam izvirne podatke v Excelu, ki so videti takole:

CustomerID SalesMonth SalesAmount

 12345 jan 150 12345 mar 100 12345 apr 200 56789 jan 800 56789 maj 10 78945 nov 20 44444 januar 1000 .... 

Kombinacija CustomerID in SalesMonth je edinstvena.

Želel bi združiti izvorne podatke v drugem zavihku Excel v taki obliki:

CustomerID 1stMonth 1stAmount 2ndMonth 2ndAmount 3rdMonth 3rdAmount

 12345 jan 150 mar 100 apr 200 56789 jan 800 maj 10 78945 nov 20 44444 jan 

Skupaj je lahko do 10 različnih mesecev za stranko (nekateri imajo samo 1 ali 2). Pomembno je, da v nobeni od izhodnih vrstic ni nobenih "vrzeli", npr. Če ima prodajalec samo v novembru, mora biti celica "1stMonth" za to stranko "Nov".

Rešitev

Poskusite ta makro in si oglejte list 2 (kopirajte podatke v listu 1 na list 3 kot varnostni ukrep)

 Sub test () Dim stranka As Range, ddata () As Range, custunq As Range, cunq As Range, filt as Razpon Dim dest As Razdalja, j kot dolg, k kot dolg z delovnimi listi ("sheet1") Set customer = Range .Range ("A1"), .Range ("A1"). End (xlDown)) Nastavi custunq = .Range ("A1"). End (xlDown) .Offset (5, 0) customer.AdvancedFilter xlFilterCopy,, custunq, True Set custunq = Razpon (custunq.Offset (1, 0), custunq.End (xlDown)) Za vsako custunq V custunq .Range ("A1"). Polje CurrentRegion.AutoFilter: = 1, Kriterij1: = custunq.Value Nastavi filt = .Range ("A1") CurrentRegion.Offset (1, 0) .Resize (Rows.Count - 1, Columns.Count). _ SpecialCells (xlCellTypeVisible) j = WorksheetFunction.CountA (filt.Columns (1)) 'MsgBox j ReDim ddata (1 do j) z listi ("sheet2") Set dest = .Cells (Rows.Count, "A"). Konec (xlUp). Offset (1, 0) dest = filt (1, 1) Konec S Za k = 1 K j Set ddata (k) = .Range (filt (k, 2), filt (k, 3)) Kopija z listi ("sheet2") .Kelije (dest.Row, Columns.Count). End (xlToLeft) .Offset (0, 1) .PasteSpecial End With Next k .Range ("A1"). CurrentRegion.AutoFilter Naslednji razpon (.Range ("a1"). End (xlDown) .Offset (1, 0), .Cells (Rows.Count, "A"). End (xlUp)). EntireRow.Delete End With End Sub Sub undo () Delovni listi ("sheet2"). Cells.Clear End Sub 

Hvala za Venkat1926 za ta tip.

Prejšnji Članek Naslednji Članek

Top Nasveti