复制值

Replicating values

这里需要一点帮助。

在 "Data" 选项卡中,我想复制 "c2:c1000" 列中的值并粘贴到另一个选项卡的 "a1" 列中。

这是我目前所拥有的,

Dim x As Long
Dim lastRow As Long

lastRow = Worksheet("Data").Cells(3, Columns.Count).End(xlUp).Column

For x = 1 To lastRow
    If Worksheets("Sheet2").Cells(2, "A") = "" Then
        Worksheets("Data").Range("c2:c1000").Copy Destination:=Worksheets("Sheet2").Range(1, "A")

        Sheets("Sheet2").Range("A1").Value = Format(Now, "mm/dd/yyyy HH:mm:ss")

    Else
        Worksheets("Data").Range("c2:c1000").Copy Destination:=Worksheets("Sheet2").Cells(2, 
        Columns.Count).End(xlToLeft).Offset(, 1)
       'Sheets("Sheet2").Range("A1").Value = Format(Now, "mm/dd/yyyy HH:mm:ss") --> can't figure how to increment this as this will need to be on the subsequent empty column 
End If

Next
End Sub

非常感谢您的帮助! 谢谢。

与源 sheet 的 LastRow* 变量非常相似,为目标 sheet 创建一个 LastColumn 变量,它将发现最后使用的列相同您找到上次使用的行的方式。

像这样:

Dim LastColumn As Long
LastColumn = Sheets("Audit").Cells(1, Columns.Count).End(xlToLeft).Column

然后像这样使用变量:

Destination:= Worksheets("Audit").Cells(1, LastColumn)

您的代码似乎也与您的问题相矛盾,在您的问题中,您解释说数据将写入第 1 行的审计 sheet,每次都使用下一列,但您的代码在If 语句中的第 2 行:

If Worksheets("Audit").Cells(2, "A") = "" Then 等同于 If Worksheets("Audit").Range("A2") = "" Then

如果您要检查第一行,请将 2 更改为 1

求助:

(另请参阅该问题中的 link 至 'how to avoid select'):

你可以在不使用 'copy' 和 'paste' 方法的情况下实现 'copy/paste',方法是将一个范围的值分配给另一个范围,例如,如下所示:

Worksheets("Audit").Cells(1, LastColumn).Resize(999, 1) = Worksheets("Data").Range("c2:c1000").Value

注意: 更改 Resize Property 行以适合源范围(在这种情况下,您要移动 C2:C1000 中的值)。


*LastRow 变量有点混乱,因为它正在查找第 3 行中最后使用的列。

如果要查找列,请考虑重命名它以避免以后在调试时混淆。

如果要查找最后一行,请这样尝试:
LastRow = Worksheet("Data").Cells(Rows.Count, 1).End(xlUp).Row

首先将值粘贴到 A1 范围内,然后向下粘贴,然后下一次粘贴到单元格 B1 等等,不会为 A1、B1 等的时间戳留下 space。因此,我假设您想粘贴第 2 行的随机值。因此单元格 A1、B1、... 留作时间戳。

在 With 语句中,我们可以引用 wsAudit 的属性,这样我们就可以替换 "Worksheets("Audit")."仅使用“.”进行引用。

column.count 表达式只检查工作sheet 中的列数。 表达式 .Cells(2, Columns.Count) 仅指向第 2 行中的最后一个单元格。 .End(xlToLeft).Column 然后从该列向左查找,应该找到该行的最后一个非空单元格。这与在 Excel 的 sheet 中您将转到单元格 XDF2 并从键盘按 CTRL+Arrow Left 基本相同。 但不是激活单元格,我们只想获取列索引号,然后加 1(新列)并将其保存到变量中。现在新列是已知的。 表达式 Range(.Cells(2, newColAudit), .Cells(1000, newColAudit)).Value 与例如Range("B2:B1000"),但我们可以使用行和列索引号代替。这在列号变化时很有用。

正如 Samuel 指出的那样,可以通过将区域设置为相等来避免复制粘贴操作。

Dim wsAudit As Worksheet
Dim newColAudit As Long

Set wsAudit = Worksheets("Audit")

With wsAudit
    newColAudit = .Cells(2, Columns.Count).End(xlToLeft).Column + 1
    Range(.Cells(2, newColAudit), .Cells(1000, newColAudit)).Value = Worksheets("Data").Range("C2:C1000").Value
    .Cells(1, newColAudit).Value = Format(Now, "mm/dd/yyyy HH:mm:ss")
End With