Excel 2007-uprava kodu pro vyhledani a kopirovani duplicit

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

Odpovědět
David7
nováček
Příspěvky: 9
Registrován: 06 dub 2011 10:18

Excel 2007-uprava kodu pro vyhledani a kopirovani duplicit

Příspěvek od David7 »

Zdravim,
ve VBA jsem uplny zacatecnik a kod jsem skladal podle jinych uverejnenych kodu.

Makro mi funguje, ale pri velkem mnozsti radku je zdlouhave. Jakym zpusobem je mozno zminene makro upravit nebo zmenit tak, aby se zrychlilo?

Ve sloupci B a C vyhledavam duplicitni hodnoty (hodnoty jsou jedinecne) a tyto hodnoty vkladam do prislusnych radku sloupce D podle radku B - vysledkem ve sloupci D jsou duplicitni hodnoty a prazdne bunky. Sloupec D je pomocny, protoze jsem nevedel, jak jinak to udelat. Tento sloupec vubec nepotrebuji.
Pote provedu kopii hodnot ze sloupce D do sloupce H za sebe s vynechanim prazdnych bunek.

Dekuji za pripadne rady ci upravy.

Kód: Vybrat vše

Option Explicit

Sub kopie_dupl_hodnot2()

  'promenne pro vyhledani duplicitnich hodnot
  Dim data1 As Variant, data2 As Variant, x As Variant, y As Variant

  'promenne pro zjisteni polohy posledni bunky duplicitnich hodnot
  Dim WS As Worksheet
  Dim LastCell As Range
  Dim LastCellRowNumber As Long

  'promenne pro kopii a serazeni duplicitnich hodnot
  Dim i, j
  Dim kopirovat_co As Range, kopirovat_kam As Range
 
  Application.ScreenUpdating = False
 
  Sheets("list1").Activate
 
  Set WS = ActiveSheet
 
  With WS
    .Columns("D:D").ClearContents
    .Columns("H:H").ClearContents
    .Cells(3, 4) = "duplicita"
    .Cells(3, 8) = "datum"
  End With
 
    ' Nastavavení hodnoty data2 na rozsah pro porovnávání výběru.
    Set data2 = ActiveSheet.Range("C4", [C50000].End(xlUp))

    ' Projít všechny buňky data1 a porovnat s každou
    ' buňkou v data2.
    Set data1 = ActiveSheet.Range("B4", [B50000].End(xlUp))
   
    'zapsani duplicitnich hodnot do sloupce D
    'duplicitni hodnoty jsou vkladany do prislusneho radku do sloupce D podle sloupce B
    'pokud ve sloupci B neni duplicitni hodnota, do prislusneho radku ve sloupci D se vlozi prazdna bunka
    For Each x In data1
        For Each y In data2
            If x = y Then x.Offset(0, 2) = x
        Next y
    Next x
 
  'nastaveni kopirovani duplicitnich hodnot s vynechanim prazdnych bunek
  Set kopirovat_co = ActiveSheet.Range("D4")
  Set kopirovat_kam = ActiveSheet.Range("H4")
   
  'cislo posledniho radku ve sloupci D
  With WS
    Set LastCell = .Cells(.Rows.Count, "D").End(xlUp)
    LastCellRowNumber = LastCell.Row
  End With
 
  'kopie duplicitnich hodnot za sebe
  'ze sloupce D do sloupce H kopiruji jen bunky, ktere nejsou prazdne
  For i = 1 To LastCellRowNumber - 3
    If kopirovat_co.Offset(i - 1, 0).Value <> Empty Then
    kopirovat_kam.Offset(j, 0) = kopirovat_co.Offset(i - 1, 0).Value
    j = j + 1
    End If
  Next i
   
  Application.ScreenUpdating = True
 
End Sub

Přílohy
srovnani datumy_2.xlsm
(105.07 KiB) Staženo 39 x
Odpovědět
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Úprava pc pro Kingdome Come Deliverance 2
    od barryk10cz » » v Rady s výběrem hw a sestavením PC
    13 Odpovědi
    5619 Zobrazení
    Poslední příspěvek od Hangli
  • bitmapová grafika - úprava fotografií, retuše, filtry.
    od zuzana3 » » v Design a grafické editory
    2 Odpovědi
    7901 Zobrazení
    Poslední příspěvek od zuzana3
  • Přechod z Excel 21 na Excel 24
    od Snekment » » v Kancelářské balíky
    2 Odpovědi
    14504 Zobrazení
    Poslední příspěvek od Snekment
  • Oficiální úprava Windows 11 do podoby klasických Windows (Windows 7)
    od IMB » » v Windows 11, 10, 8...
    5 Odpovědi
    30035 Zobrazení
    Poslední příspěvek od Ltb
  • Pohoda a excel
    od brownwld » » v Kancelářské balíky
    1 Odpovědi
    7425 Zobrazení
    Poslední příspěvek od atari

Zpět na „Kancelářské balíky“