Excel - Crearea macro pentru a căuta și copia

Problema

Am o foaie de calcul cu toate datele diferite cu datele corespunzătoare din rândul său. Există mai multe rânduri cu aceeași dată și vreau să creez o macrocomandă pentru a căuta toate aceleași date și copiați-le și lipiți-le în foaia 2 pentru a le putea pune în ordine

exemplu:

 27-Sep 27-Sep 27-Sep 28-Sep 28-Sep 01-Oct 01-Oct 

Nu am nici o idee despre cum să creez o macrocomandă, totuși am căutat peste tot pe Internet pentru a găsi unul pe care să-l pot modifica pentru a-mi insera propriile date, și asta este ceea ce ive veni cu.

 Sub SearchForString () Dim LSearchRow ca integer Dim LCopyToRow ca întreg pe eroare GoTo Err_Execute 'Începeți căutarea în rândul 6 LSearchRow = 6' Începeți copierea datelor la rândul 110 în Sheet2 (variabilă cont rând) LCopyToRow = 110 În timp ce Len (intervalul " & CStr (LSearchRow)) Valoare)> 0 'Dacă valoarea în coloana A = "27-Sep", copiați întregul rând în Sheet2 Dacă Range ("A" & CStr (LSearchRow) 'Selectați rândul din foaia1 pentru a copia rândurile (CStr (LSearchRow) & ":" & CStr (LSearchRow)) Selectați Selection.Copy' Inserați rândul în Sheet2 în foile următoare (Sheet2) Selectați Rows (CStr (LCopyToRow) "Selectați ActiveSheet.Paste 'Deplasați contorul în rândul următor LCopyToRow = LCopyToRow + 1' Reveniți la Sheet1 pentru a continua căutarea Sheets (" Sheet1 ") Selectați End If LSearchRow = LSearchRow + 1 Wend 'Poziția pe celula A109 Application.CutCopyMode = Zona falsă ("A109"). Selectați MsgBox "Toate datele de potrivire au fost copiate". Ieșire Sub Err_Execute: MsgBox "A apărut o eroare." End Sub 

Soluţie

Dau două macrocomenzi "test" și "anula"

foaia de probă este așa (foaia1) - nu este necesară pentru sortare

date1 date2

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

încercați macrocomanda "test" și vedeți foaia2

dacă doriți retest

1.run "anula"

atunci

2. "încercare"

macro-urile sunt

 Sub test () Dim r ca interval, r1 ca interval, r2 ca dimensiune de dimensiune c2 ca interval, ca fiind ca foi de lucru de intersecție ("foaie1") Activare set r = interval ("A1" . Setare r1 = Domeniu ("a1"). Sfarsit (xlDown) .Offset (5, 0) r.AdvancedFilter action: = xlFilterCopy, copytorange: = r1, unic: .Offset (1, 0), r1.End (xlDown)) Pentru fiecare c2 În r2 Dacă funcția WorkheetFunction.CountIf (r, c2)> 1 Apoi cu intervalul ("A1") CurrentRegion.AutoFilter field: = 1, = c2.Value.Cells.SpecialCells (xlCellTypeVisible) .Copii de lucru ("foaie2") .Celuri (Rows.Count, "A") Sfarsit (xlUp) .Offset (1, 0) .PasteSpecial End Cu End If ActiveSheet. AutoFilterMode = Fals Următoarele c2 foi de lucru ("foaie2") Activare Do Set cfind = ActiveSheet.Cells.Find (ce: = "data", lookat: = xlWhole, după: = A2) Exit Do cfind.EntireRow.Delete Foile de lucru cu buclă ("sheet1"). Interval ("A1") EnteRow.Copy Foile de lucru ("foaie2"). ) Fișe de lucru ("foaia2"). Clear End Sub 

Notă

Vă mulțumim pentru venkat1926 pentru acest sfat pe forum.

Articolul Precedent Articolul Următor

Cele Mai Importante Sfaturi