Un código VBA para copiar condicionalmente datos de una hoja a otra

Problema

Necesito un código VBA que pueda copiar los datos de la hoja 1 (datos sin procesar) a la hoja 2, la hoja 3 y así sucesivamente ... en función de ciertas condiciones coincidentes.

columna --- A ------------ B ------------ C ------------ D ------ -MI

----------- nombre ----- lugar ---- empresa --- país

----------- name1 ---- AB ------- Nokia ------- USA

----------- name2 ---- CD ------- Sony -------- Reino Unido

----------- name3 ----- EF ------- LG ----------- INDIA

----------- name4 ----- AB ------ Sony ------ RUSSIA

----------- name5 ----- AB ------ Sony ------ ALEMANIA

----------- name6 ----- CD ------ Nokia ------ INDIA

----------- name7 ----- CD ------ Ericsson - USA

----------- name8 ----- EF ------ Ericsson ---- RUSSIA

----------- name9 ----- GH ------ Lenore ----- UK

----------- name10 --- GH ------- HP --------- INDIA

Solución

Puedes usar los siguientes códigos

 Sub SplitSheets () Dim DataSht, wsCrit, SplitSht As Worksheet Dim lrUnq, lrData, i As Long Dim FtrVal As String Application.ScreenUpdating = False Set DataSht = Worksheets ("sheet1") 'cámbielo por el nombre de su hoja de datos brutos lrData = DataSht.Range ("a" & Rows.Count) .End (xlUp) .Row Set wsCrit = Worksheets.Add DataSht.Range ("B1: l" & lrData) .AdvancedFilter Action: = xlFilterCopy, _ CopyToRange: = wcsCrit .Range ("A1"), Único: = lrUnq verdadero = wsCrit.Range ("a" & Rows.Count) .End (xlUp) .Row For i = 2 To lrUnq FtrVal = wsCrit.Range ("A" & i ) .Value Set SplitSht = Worksheets.Add DataSht.Select 'DataSht.ShowAllData ActiveSheet.AutoFilterMode = False ActiveSheet.Range ("A1: Z" & lrData) .AutoFilter Field: = 2, Criteria1: = FtrVal Range ("a1) .Seleccione Rango (Selection, Selection.End (xlToRight)). Seleccione Range (Selection, Selection.End (xlDown)). Seleccione Selection.Copy SplitSht.Select Range ("A1"). Seleccione ActiveSheet.Paste 'Cells.Select Cells. .EntireColumn.AutoFit SplitSht.Name = FtrVal Application.CutCopyMode = False Siguiente i App lication.DisplayAlerts = Falso wsCrit.Delete Application.DisplayAlerts = True .AutoFilterMode = False End Sub 

Gracias a RWomanizer por este consejo.

Artículo Anterior Artículo Siguiente

Los Mejores Consejos