Vba 动态复制和特殊粘贴

Vba 动态复制和特殊粘贴,vba,excel,copy-paste,Vba,Excel,Copy Paste,我下载了一份报告,它总是出现在a列:啊,我也总是需要通过特殊的粘贴>乘以1来重新格式化它,以使用公式。它可以在500到25000行之间变化 我可以在单元格D1中手动输入“1” 在另一篇文章中,我有以下复制和粘贴的代码 当我将数据粘贴到Sheet2中时,我希望它是特殊粘贴乘以1 Sub DynaCopyPaste() Application.ScreenUpdating = False Dim s1, s2 As Excel.Worksheet Dim iLastCellS2 As Excel

我下载了一份报告,它总是出现在a列:啊,我也总是需要通过特殊的粘贴>乘以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

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

目前有效的方法:

  • 在空单元格中键入“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
    

    “乘以1”是什么意思?即使假设你在粘贴数字,将它们乘以1又能做什么呢?根据恒等式定律,n*1=n。“乘以1”背后的意图是什么?仅仅通过粘贴值来实现。考虑提供一些示例输入数据,以及预期输出作为帮助他人帮助的一部分。注意,如果您声明“代码> DIME S1,s2作为Excel。工作表仅
    s2
    Excel类型。工作表
    s1
    变量
    类型。您需要为每个变量声明一个类型:
    Dim s1为Excel.Worksheet,s2为Excel.Worksheet
    听起来您的文本看起来像数字。不能一步粘贴值,也不能粘贴乘以1。它必须是两个步骤,因为剪贴板将在其中一个步骤中包含有问题的值,在另一个步骤中包含值1。这就是说,宏记录器应该给你你需要的大部分。很漂亮,谢谢你。它在顶部的空白单元格中填充了一些0,我尝试将SkipBlanks设置为True。小问题,我可以在5秒内手动删除。