Изменить эту строку:
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