动态复制和特殊粘贴

时间:2018-08-20 14:12:38

标签: excel vba excel-vba copy-paste

我下载了一个报告,该报告将始终列在A:AH列中,我还始终需要通过“特殊粘贴”>“乘以1”来重新设置其格式以使用公式。它可以在500到25000行之间变化。

我可以在D1单元格中手动输入“ 1”。

在另一篇文章中,我有以下代码可以复制和粘贴。

当我将数据粘贴到Sheet2时,我希望将其特殊粘贴乘以1。

Sub DynaCopyPaste()

Application.ScreenUpdating = False

Dim s1, s2 As Excel.Worksheet
Dim iLastCellS2 As Excel.Range
Dim iLastRowS1 As Long

Set s1 = Sheets("Sheet1")
Set s2 = Sheets("Sheet2")

'get last row
iLastRowS1 = s1.Cells(s1.Rows.Count, "AH").End(xlUp).Row

'get last available cell to paste
Set iLastCellS2 = s2.Cells(s2.Rows.Count, "A").End(xlUp).Offset(1, 0)

'copy and paste into Sheet2
s1.Range("A1", s1.Cells(iLastRowS1, "AH")).Copy
iLastCellS2.PasteSpecial xlPasteValues

Application.ScreenUpdating = True

enter image description here

我已添加问题截图。我无法将excel函数应用于数据-请参阅G11中的函数。

当前有效:

  1. 在一个空单元格中输入“ 1”

  2. 将该单元格复制到剪贴板

  3. 选择所有数据

  4. 粘贴>特殊粘贴>乘以

我的目标是构建一个分析包来处理数据,我在代码中的第一步是对其进行格式设置,以便可以将函数编写到页面上。

1 个答案:

答案 0 :(得分:1)

我认为您可以执行此操作而无需实际复制或粘贴任何内容。

Dim rngToCopy as Range
'copy and paste into Sheet2
Set rngToCopy = s1.Range("A1", s1.Cells(iLastRowS1, "AH"))
iLastCellS2.Resize(rngToCopy.Rows.Count, rngToCopy.Columns.Count).Value = rngToCopy.Value

如果这不起作用,那么我认为这应该:

Dim multiplier as Range
Set multiplier = s1.Range("D1")  '## This is the cell containing your value of 1

Dim rngToCopy as Range, destRange as Range
'## put the values in s2 worksheet:
Set rngToCopy = s1.Range("A1", s1.Cells(iLastRowS1, "AH"))
Set destRange = iLastCellS2.Resize(rngToCopy.Rows.Count, rngToCopy.Columns.Count)
destRange.Value = rngToCopy.Value

multiplier.Copy
destRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlMultiply, _ 
    SkipBlanks:=False, Transpose:=False