скопировать и вставить как значения в другой лист, макрос Excel - PullRequest
0 голосов
/ 05 января 2019

Я новичок в Macro и хочу создать простую копию и вставить формулу Excel с одного листа на другой. Но дело в том, что у основных данных есть формула внутри ячейки, и она не позволяет мне копировать и вставлять в качестве значений ее в другую ячейку.

Sub selectpasting()
Dim Lastrow As Long, erow As Long


Lastrow = Sheets("attendance").Cells(Rows.Count, 1).End(xlUp).Row
For i = 3 To Lastrow


   If Sheets("attendance").Cells(i, 3) = "absent" Then

    Sheets("attendance").Cells(i, 1).copy
    erow = Sheets("forpasting").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

    Sheets("attendance").Paste Destination:=Sheets("forpasting").Cells(erow, 1)


    Sheets("attendance").Cells(i, 3).copy
    Sheets("attendance").Paste Destination:=Sheets("forpasting").Cells(erow, 2)

End If

Next i


Application.CutCopyMode = False
Sheets("forpasting").Columns.AutoFit
Range("A1").Select

End Sub

1 Ответ

0 голосов
/ 05 января 2019

Изменить эту строку:

Sheets("attendance").Paste Destination:=Sheets("forpasting").Cells(erow, 1)

Кому:

Sheets("forpasting").Cells(erow, 1).PasteSpecial xlValues

Полный код будет:

Sub selectpasting()
Dim Lastrow As Long, erow As Long
Dim i As Long

Lastrow = Sheets("attendance").Cells(Rows.Count, 1).End(xlUp).Row
For i = 3 To Lastrow


   If Sheets("attendance").Cells(i, 3) = "absent" Then

    Sheets("attendance").Cells(i, 1).Copy
    erow = Sheets("forpasting").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

    Sheets("forpasting").Cells(erow, 1).PasteSpecial xlValues


    Sheets("attendance").Cells(i, 3).Copy
    Sheets("forpasting").Cells(erow, 2).PasteSpecial xlValues
End If

Next i


Application.CutCopyMode = False
Sheets("forpasting").Columns.AutoFit
Range("A1").Select

End Sub

Приведенный выше код довольно медленный (попробуйте оба кода, и вы заметите, что приведенный ниже способ намного быстрее). Причина в том, что в приведенном выше примере Excel необходимо определить / оценить, нужно ли вставить свойства ячейки или не из-за ".copy". Это один из подходов, когда вам нужно скопировать / вставить форматы ячеек и т. Д.

В вашем случае вас интересует только значение, которое показывает ячейка. Так что вы можете просто выбрать значение и скопировать его.

Поэтому я бы порекомендовал вам изменить его на:

Sub selectpasting_2()
Dim Lastrow As Long, erow As Long
Dim i As Long

Lastrow = Sheets("attendance").Cells(Rows.Count, 1).End(xlUp).Row
For i = 3 To Lastrow


   If Sheets("attendance").Cells(i, 3) = "absent" Then


    erow = Sheets("forpasting").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

    Sheets("forpasting").Cells(erow, 1) = Sheets("attendance").Cells(i, 1)

    Sheets("forpasting").Cells(erow, 2) = Sheets("attendance").Cells(i, 3)
End If

Next i


Application.CutCopyMode = False
Sheets("forpasting").Columns.AutoFit
Range("A1").Select

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