Excel - Vytvoření makra pro vyhledávání a kopírování

Problém

Mám tabulku se všemi daty s odpovídajícími daty v řadě. Existuje mnoho řádků se stejným datem a já chci vytvořit makro pro vyhledávání všech stejných dat a kopírovat a vložit je do listu 2, takže je mohu dát do pořádku

příklad:

 27-Sep 27-Sep 27-Sep 28-Sep 28-Sep 01-Říj 01-Říj 

Nemám ponětí, jak vytvořit makro, ale já jsem hledal po celém internetu najít ten, který jsem mohl upravit, aby vložil své vlastní údaje, a to je to, co ive přijít s.

 Sub SearchForString () Dim LSearchRow jako celé číslo Dim LCopyToRow jako celé číslo na chybu GoTo Err_Execute 'Spustit vyhledávání v řádku 6 LSearchRow = 6' Spustit kopírování dat do řádku 110 v List2 (proměnná čítače řádku) LCopyToRow = 110 Zatímco Len (rozsah ("A") & CStr (LSearchRow)) Hodnota)> 0 'Pokud hodnota ve sloupci A = "27-Sep", zkopírujte celý řádek do List2 Pokud Rozsah ("A" & CStr (LSearchRow)) Hodnota = "27 = Sep" Pak 'Vyberte řádek v List1 pro kopírování řádků (CStr (LSearchRow) & ":" & CStr (LSearchRow). Vyberte Selection.Copy' Vložit řádek do List2 v dalším řádku Listy ("List2") Vyberte řádky (CStr (LCopyToRow) & ":" & CStr (LCopyToRow)) Vyberte ActiveSheet.Paste 'Přesunout čítač do dalšího řádku LCopyToRow = LCopyToRow + 1' Vraťte se zpět do Listu1 pro pokračování hledání Listů ("List1") Vyberte Konec Pokud LSearchRow = LSearchRow + 1 Wend 'Pozice na buňce A109 Application.CutCopyMode = False Range ("A109") Vyberte MsgBox "Všechna odpovídající data byla zkopírována." Exit Sub Err_Execute: MsgBox "Došlo k chybě." End Sub 

Řešení

Dávám dvě makra "test" a "undo"

vzorový list je podobný tomuto (list1) - není nutné třídit

data data1 data2

3/1/2010 37 1

3/2/2010 65 96

3/3/2010 48 46

3/2/2010 78 54

3/5/2010 3 38

3/2/2010 83 58

3/3/2010 45 78

zkuste makro "test" a viz list2

pokud chcete test znovu

1.run "undo"

pak

2.rung "test"

makra jsou

 Subtest () Dim r jako rozsah, r1 As Range, r2 As Range Dim c2 As Range, cfind Jako rozsah pracovních listů ("sheet1") Aktivace Set r = Range (Range ("A1"), Range ("A1") .End (xlDown)) Nastavit r1 = rozsah ("a1") Konec (xlDown) .Offset (5, 0) r.AdvancedFilter akce: = xlFilterCopy, copytorange: = r1, jedinečný: = True Set r2 = Range (r1) .Offset (1, 0), r1.End (xlDown)) Pro každý c2 v r2 Pokud WorksheetFunction.CountIf (r, c2)> 1 Potom s rozsahem ("A1") Pole CurrentRegion .AutoFilter: = 1, Kritéria1: = c2.Value .Cells.SpecialCells (xlCellTypeVisible) .Copy Listy ("sheet2"). Buňky (Rows.Count, "A") Konec (xlUp). AutoFilterMode = False Další c2 Listy ("sheet2") Aktivovat Nastavit cfind = ActiveSheet.Cells.Find (co: = "date", lookat: = xlWhole, po: = Rozsah ("A2")) Pokud cfind není nic pak Konec Do cfind.EntireRow.Delete Listy smyčky ("sheet1") Rozsah ("A1") EntireRow.Copy Listy ("sheet2") Rozsah ("A1") PasteSpecial Application.CutCopyMode = False End Sub Sub undo Sub (zpět) ) Pracovní listy ("sheet2"). Vymazat End Sub 

Poznámka

Díky venkat1926 za tento tip na fóru.

Předchozí Článek Následující Článek

Nejlepší Tipy