Keresés

Új hozzászólás Aktív témák

  • Pakliman

    tag

    válasz Sasos #42514 üzenetére

    Egy lehetséges megoldás:

    Sub Makró1()
    Dim us As Long 'utolsó sor
    Dim sor As Long
    Dim osz As Long
    Dim odb As Long 'figyelendő oszlopok száma
    Dim nüdb As Long 'nem üres cellák a sorban
    Dim ü As Long 'hány oszlopra van a következő nem üres cella
    Dim t

    t = Timer
    With Application
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
    End With

    '21121 sor
    'soronként átlag 1,4 db üres cella
    'Proci: Ryzen 5 2600
    '16GB RAM
    'Futási idő: 9,84 másodperc
    us = Columns("L").Rows(Cells.Rows.Count).End(xlUp).Row
    odb = Range(Columns("L"), Columns("Q")).Columns.Count
    For sor = 1 To us
    nüdb = Application.CountIf(Range(Cells(sor, "L"), Cells(sor, "Q")), "<>")
    If nüdb < odb Then
    For osz = Columns("L").Column + 1 To Columns("Q").Column - 1
    If IsEmpty(Cells(sor, osz)) Then
    If Application.CountIf(Range(Cells(sor, osz + 1), Cells(sor, "Q")), "<>") > 0 Then
    'Ha van egyáltalán még átpakolható adat...
    'Ezen vizsgálat nélkül 12,2 másodpercig fut a 9,84 helyett!!
    ü = 1
    Do While IsEmpty(Cells(sor, osz + ü)) And (osz + ü <= Columns("Q").Column - 1)
    ü = ü + 1
    Loop
    Cells(sor, osz) = Cells(sor, osz + ü)
    Cells(sor, osz + ü).ClearContents
    Else
    Exit For
    End If
    End If
    Next osz
    End If
    Next sor

    With Application
    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True
    End With
    Debug.Print Round(Timer - t, 2)
    End Sub

    A futás ideje nagymértékben függ az üres cellák számától :((

    [ Szerkesztve ]

  • Pakliman

    tag

    válasz Sasos #42514 üzenetére

    Szia!

    - kijelölöd a szükséges területet (L1-től AQ~20k-ig)
    - CTRL+G
    - bal alsó sarokban Irányított
    - Üres cellák
    - Ok
    - Jobb klikk egy kijelölt cellában
    - Törlés
    - Cellák eltolása balra
    - Ok

    [ Szerkesztve ]

Új hozzászólás Aktív témák