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.