Ребята, можете ли вы помочь мне сделать этот код короче? и умнее, я думаю - PullRequest
0 голосов
/ 04 марта 2020

Привет, ребята, я новичок ie в этом, так что не ожидайте многого от кода. Просто постарайся сделать это короче. Спасибо! Код был написан для функции записи макросов, и я чистил его столько, сколько мог. Может быть, умнее код для этого, но, в основном, просто разделить на 500 от столбца A

Columns("A:A").Select
    Application.CutCopyMode = False
    ActiveSheet.Range("A:A").RemoveDuplicates Columns:=1, Header:=xlNo
Range("A501:A1000").Cut
    Range("B:B").Select
    ActiveSheet.Paste
Range("A1001:A1500").Cut
    Range("C:C").Select
    ActiveSheet.Paste
Range("A1501:A2000").Cut
    Range("D:D").Select
    ActiveSheet.Paste
Range("A2001:A2500").Cut
    Range("E:E").Select
    ActiveSheet.Paste
Range("A2501:A3000").Cut
    Range("F:F").Select
    ActiveSheet.Paste
Range("A3001:A3500").Cut
    Range("G:G").Select
    ActiveSheet.Paste
Range("A3501:A4000").Cut
    Range("H:H").Select
    ActiveSheet.Paste
Range("A4001:A4500").Cut
    Range("I:I").Select
    ActiveSheet.Paste
Range("A4501:A5000").Cut
    Range("J:J").Select
    ActiveSheet.Paste
End Sub```

1 Ответ

0 голосов
/ 04 марта 2020

Каждый раз, когда вы обнаруживаете, что повторяете код, вы, вероятно, упускаете возможность l oop.


lr представляет последнюю использованную строку в Column A
i представляет текущая строка
c представляет текущий столбец


Sub Shorter_Better_Faster()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") '<-- UPDATE

Dim lr as Long, i As Long, c As Long

lr = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
c = 2

For i = 501 To lr Step 500
    ws.Range(ws.Cells(1, c), ws.Cells(500, c)).Value = ws.Range(ws.Cells(i, 1), ws.Cells(i + 500, 1)).Value
    c = c + 1
Next i

ws.Range("A501:A" & lr).ClearContents

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...