Un cod VBA pentru copierea condiționată a datelor de la o foaie la alta
Problema
Am nevoie de un cod VBA care să poată copia datele din foaia1 (date brute) la foaia 2, foaia3 și așa mai departe ... în funcție de o anumită condiție.
coloană --- A ------------ B ------------ C ------------ D ------ -E
----------- numele ----- Locul ---- firma: --- tara
----------- name1 ---- AB ------- Nokia ------- Statele Unite ale Americii
----------- name2 ---- CD ------- Sony -------- Marea Britanie
----------- NAME3 ----- EF ------- LG ----------- INDIA
----------- NAME4 ----- AB ------ Sony ------ RUSIA
----------- name5 ----- AB ------ Sony ------ GERMANIA
----------- name6 ----- CD ------ Nokia ------ INDIA
----------- name7 ----- CD ------ Ericsson - Statele Unite ale Americii
----------- name8 ----- EF ------ Ericsson ---- RUSIA
----------- name9 ----- GH ------ ----- Lenore UK
----------- name10 --- GH ------- HP --------- INDIA
Soluţie
Puteți utiliza următoarele coduri
Sub SplitSheets () Dim DataSht, wsCrit, SplitSht Ca Foaie de Lucru Dim lrUnq, lrData, i În Dim FtrVal ca Aplicație String.ScreenUpdating = Set False DataSht = Fișe de Lucru ("sheet1") "schimbați-l la numele fișei de date brute lrData = DataSht.Range ("a" & Rows.Count) .End (xlUp) .Set Set WsCrit = Fișe Lucrare.Add DataSht.Range ("B1: l" & lrData) .AdvancedFilter Acțiune: = xlFilterCopy, _ CopyToRange: = wsCrit .Range ("A1"), Unic: = Adevărat lrUnq = wsCrit.Range ("a" & Rows.Count) .End (xlUp) .Rând Pentru i = 2 Pentru lrUnq FtrVal = wsCrit.Range ). Setul de valori SplitSht = Worksheets.Add DataSht.Select 'DataSht.ShowAllData ActiveSheet.AutoFilterMode = False ActiveSheet.Range ("A1: Z" & lrData) .AutoFilter Field: = 2, Criteria1: = FtrVal Range ("a1" . Selectați intervalul (Selecție, Selecție.End (xlToRight)) Selectați intervalul (Selectare, Selecție.End (xlDown)) Selectați Selecție.Copie SplitSht.Select Range ("A1") Selectați ActiveSheet.Paste 'Cells.Select Cells .EntireColumn.AutoFit SplitSht.Name = FtrVal Application.CutCopyMode = False Next i App lication.DisplayAlerts = False wsCrit.Delete Application.DisplayAlerts = Adevărat .AutoFilterMode = False End Sub
Mulțumită lui RWomanizer pentru acest sfat.