繁体   English   中英

VBA 复制没有公式的值,然后粘贴到另一个 excel 工作表并继续将值添加到新工作表

[英]VBA Copy values without formulas, then paste to another excel sheet and continue to add values to new sheet

我有一张 Excel 表,它根据 2 周的日期范围从服务器收集数据。

服务器标签名称
2020 年 1 月 1 日 0:00
2020 年 1 月 14 日 11:59 2020 年 12 月 31 日 11:59
日期 价值
…… ……

我的目标是将单元格从日期和值列(10K+ 行)复制到另一个名为“TankDataAll”的 excel 工作表中。 单元格偶尔会包含空格(只是公式),我只需要单元格中的值。

然后我需要将日期范围再增加 2 周,例如。 2020 年 1 月 15 日 0:00 到 2020 年 1 月 28 日 11:59,复制/粘贴新值,然后添加到“NewExcel”表中。 如单元格 B3 所示,for 循环增量将在 2020 年 12 月 31 日 11:59 的设定日期停止。

我已经弄清楚如何将值复制并粘贴到另一个 excel 表,如下所示:

Sub Generate()

Dim wsCopy As Worksheet
Dim wsDest As Worksheet
Dim lCopyLastRow As Long
Dim lDestLastRow As Long

'Set variables for copy and destination sheets
Set wsCopy = Workbooks("TankData.xlsm").Worksheets("Sheet1")
Set wsDest = Workbooks("TankDataAll.xlsx").Worksheets("Sheet1")

'Find last used row in the copy range based on data in column A
lCopyLastRow = wsCopy.Cells(wsCopy.Rows.Count, "A").End(xlUp).Row

'Find first blank row in new sheet based on data in column A
lDestLastRow = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Offset(1).Row

'Copy and Paste Data
wsCopy.Range("A4:B" & lCopyLastRow).Copy
wsDest.Range("A" & lDestLastRow).PasteSpecial Paste:=xlPasteValues

End Sub

我还想出了如何仅复制单元格值并忽略公式:

Sub NoFormula()
Dim lr As Long
    
'   Find last row in column B with data to copy from on sheet 2
lr = Sheets("Sheet1").Columns("A").Find("*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows, LookIn:=xlValues).Row
    
'   Copy value to sheet 2
Sheets("Sheet1").Range("A4:B" & lr).Copy
Sheets("Sheet2").Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Application.CutCopyMode = False
End Sub

我无法弄清楚如何将两者结合起来以允许我在忽略公式的同时复制和粘贴值。 目前,上面的第一个代码片段允许我复制并粘贴到另一个 excel 表。 但是,一旦我将单元格再次复制到新工作表中,由于原始工作表中的“空白”公式单元格,新工作表会显示空白。 任何帮助将不胜感激。 谢谢!

据我所知,您在第一段中链接的代码应该成功复制并粘贴值 - 这看起来有效

wsCopy.Range("A4:B" & lCopyLastRow).Copy
wsDest.Range("A" & lDestLastRow).PasteSpecial Paste:=xlPasteValues

我不知道您为什么会遇到问题,但一种解决方法是直接分配值

wsDest.Range("A1").Value = wsCopy.Range("A1").Value

或者对于这个例子,类似:

wsDest.range("A" & lDestLastRow & ":B" & lDestLastRow + lCopyLastRow - 4).Value = wsCopy.Range("A4:B" & lCopyLastRow).Value

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM