【问题标题】:Copy-paste specific columns from rows if an If condition is satisfied如果满足 If 条件,则从行中复制粘贴特定列
【发布时间】:2018-02-05 15:10:54
【问题描述】:

当满足 If 条件时,我正在尝试构建一个宏以从行中复制粘贴特定列。 If 条件的一部分已经过测试并且可以正常工作,就像我在另一个宏中使用过的一样。我的问题是我不知道如何在循环中选择行的特定列。我只知道如何选择整行(在这种情况下,如果我没记错的话,它会是 rows(i).EntireRow.Copy)。我在下面提供我的代码。需要编辑的部分是

.Rows(i).Columns(1, 4, 6, 8).Copy
Sheets("WFRandVFR_REPORT").range("W2").Paste

整个代码就是这个

(更新版本)

我也提供截图

Dim lr As Long
Dim rng As range
Dim mDiff1 As Double
mDiff1 = 0.01
With Worksheets("WFRandVFR_REPORT")
    lr = range("L" & Rows.Count).End(xlUp).Row
    For i = 2 To lr
        If Cells(i, "U").Value - Cells(i, "V").Value > mDiff1 Then
            If rng Is Nothing Then
                Set rng = .range("L" & i & ":V" & i)
            Else
                Set rng = Union(rng, .range("L" & i & ":V" & i))
            End If
        End If
    Next i
    rng.Copy
    Sheets("WFRandVFR_REPORT").range("AI2").PasteSpecial
End With

【问题讨论】:

  • 试试这个:.Range("A" & i & ", D" & i & ", F" & i & ", H" & i & "").Copy
  • 好吧,粘贴方法不起作用..我需要在第 2 行及以下的列 W 到 AF 上执行粘贴
  • 你需要使用.Range("W" & i).PasteSpecial(xlValues)
  • 谢谢哥们!帮了我很多!

标签: excel loops copy-paste vba


【解决方案1】:

复制你可以使用

Range("A" & i & ", D" & i & ", F" & i & ", H" & i & "").Copy  '(as mentioned in comment)

Union(.Range("A" & i), .Range("D" & i), .Range("F" & i), .Range("H" & i)).Copy

所以,试试

Union(.Range("A" & i), .Range("D" & i), .Range("F" & i), .Range("H" & i)).Copy
Sheets("WFRandVFR_REPORT").range("W2").PasteSpecial xlPasteValues

或者只是

Union(.Range("A" & i), .Range("D" & i), .Range("F" & i), .Range("H" & i)).Copy
Sheets("WFRandVFR_REPORT").range("W2").PasteSpecial

Union(.Range("A" & i), .Range("D" & i), .Range("F" & i), .Range("H" & i)).Copy Sheets("WFRandVFR_REPORT").range("W2")

编辑:

如果没有将FOR循环更改为从下到上循环,是否有任何具体原因

For i = 2 To lastrow

您的代码将是

Dim mDiff As Integer
Dim rng As Range
mDiff = 0.03
With Worksheets("WFRandVFR_REPORT")
    lastrow = Range("L" & Rows.Count).End(xlUp).Row
    For i = 2 To lastrow
        If Cells(i, "U").Value - Cells(i, "V").Value > mDiff Then
            If rng Is Nothing Then
                Set rng = .Range("L" & i & ":V" & i)
            Else
                Set rng = Union(rng, .Range("L" & i & ":V" & i))
            End If
        End If
    Next i
    rng.Copy
    Sheets("WFRandVFR_REPORT").Range("AI2").PasteSpecial
End With

【讨论】:

  • 非常感谢!我用的是第三个!
  • 我没有注意到它,但它覆盖了数据......所以,它可以工作,但它不会将数据粘贴到另一个下面......对不起......我刚刚检查过。我以为它一开始只有一行!
  • 它现在可以工作,但它正在粘贴差异为> 0 的每一行。因此,它无法识别 mdiff,而只是粘贴 Cells(i, "U" 的所有行).Value - Cells(i, "V").Value > 0. 老实说 U 和 V 列有百分比.. 这可能是原因吗?
  • @PericlesFaliagas - 可以使用Dim mDiff As DoublemDiff 声明为Double
  • 只是这样做了,但仍然保持不变。它复制粘贴所有> 0 ...此外,当我将mDiff1作为mDiff1 = 0.9之类的值时,它显示错误91,对象变量或未设置块变量,而根本没有更改代码,如果我输入mDiff1 = 0.01它有效..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 2017-04-30
  • 1970-01-01
  • 2018-12-21
  • 2017-05-22
  • 2019-07-07
  • 1970-01-01
相关资源
最近更新 更多