【问题标题】:Trying to create a loop to copy cells from one sheet to another试图创建一个循环以将单元格从一张纸复制到另一张纸
【发布时间】:2020-07-10 19:46:26
【问题描述】:

我正在尝试构建代码来执行以下操作: 在工作簿中,我有两张纸。 表 2 有几列,我想创建一个循环来读取特定列中的每一行,比如说 D 列。当该列中的行不等于零时,我想将该行中的值复制到一列在 Sheet2 中,假设它在工作表 2 中的 G 列,但它与工作表 1 中的 D 列是同一行。

Example
Sheet 2                 Sheet 1
Column D             Column G
0             Don’t copy from Sheet 2
500               500 (Copied from Sheet 2)
20                20 (Copied from Sheet 2)

【问题讨论】:

  • 到目前为止你尝试过什么代码?

标签: excel loops copy


【解决方案1】:

我能够使用另一个帖子中的示例以及查看 Felipe 的建议来解决这个问题。

在处理数据时,我正在使用一个函数来查找工作簿中一张工作表中的最后一行。通过使用这个 lastrow 函数,我创建了一个循环,并且能够使用一个 IF 语句,该语句允许我将包含数据的行复制到我的其他工作表中的列中

FirstRow = Range("A2").Value

'查找A列​​最后一个非空白单元格(1) LastRow = Cells(Rows.Count, 1).End(xlUp).Row

将 b 设为整数,按整数购买

    For b = 2 To LastRow
      If Range("F" & b).Value <> 0 Then
         Range("F" & b).Select
         Selection.Copy
         Sheets("T-1 BSR").Select
         Range("I" & b).Select
         ActiveSheet.Paste
         Range("J" & b).Select
         ActiveSheet.Paste
         Sheets("BAML Futures PnL").Select
      End If
    Next b

我也使用了相同的逻辑,因为我必须使用另一列并在卖出时将其乘以 -1

Dim s As Integer,Sell As Integer

    For s = 2 To LastRow
      If Range("G" & s).Value <> 0 Then
         Sell = Range("G" & s) * -1
         Range("G" & s).Value = Sell
         Range("G" & s).Select
         Selection.Copy
         Sheets("T-1 BSR").Select
         Range("I" & s).Select
         ActiveSheet.Paste
         Range("J" & s).Select
         ActiveSheet.Paste
         Sheets("BAML Futures PnL").Select
      End If
    Next s

不确定这是否是最有效的方法,但确实有效

【讨论】:

    【解决方案2】:

    我会去创建动态范围并在我的 VBA 代码中声明它们。

    因此,在创建动态范围后(使用名称管理器使用 OFFSET 定义动态范围),此处解释:Create Dynamic Range (Offset), ...

    ... 我会在代码的开头声明它们。要使用名称管理器声明范围,请查看Excel Named Ranges

    ... 然后命名范围内的列,以便为其分配值。以下链接指向Range.Columns 中的 Column 属性。

    ...然后,使用 Range_2(列)中的 Range_1 创建循环:Loop through Defined Range

    ... 最后,只需使用 If (If Statement) 比较值,成功时检索单元格的位置 (Range.Column & Range.Row) 并将其复制到第二张表 (Range.Value )。

    【讨论】:

    • 我能够弄清楚这一点,使用另一篇文章中的示例以及查看 Felipe 的建议。在我的 VBA 代码中,我使用了一个
    猜你喜欢
    • 2022-08-23
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多