如果满足条件,如何使用宏复制并粘贴到同一行中?

时间:2019-02-13 20:14:44

标签: excel vba if-statement copy paste

我对VBA还是很陌生,我正在运行报告,并且我收到报告的方式中有几行具有我不需要的其他数据列,但它弄乱了这些条目的格式。例如,在B列中,我列出了每个人的个人资料,但是对于这几个条目,我有一个数字或其他名称(每个数字并不一致)。但是对于那些相同的条目,我在H列中有一个“ Y”,其他条目都没有。我正在尝试在报告中搜索H列中的“ Y”,然后复制C到H列并将其粘贴到B列中,以便所有数据对齐。在数百个条目中,可能需要移动6-7个条目。这是一些示例数据,希望可以解决此问题。 BTHOMAS列B是此示例中的问题。

Sub MoveColumns()

LR = Cells(Rows.Count, "B").End(xlUp).Row
a = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row

    For i = 2 To a

        If Worksheets("Sheet1").Cells(i, 8).Value = "Y" Then
            Range("C:H").copy Range("B:G")

        End If

    Next

End Sub

我对复制和粘贴宏进行了大量研究,但是我发现的所有内容都是单个单元格或整行,然后将它们粘贴到另一张纸上。我只想复制并粘贴在同一行中。这是我到目前为止的代码,不幸的是它移动了每一列。

 A      |    B     |    C    |    D       |    E      |    F      |     G     |   H
--------------------------------------------------------------------------------------------
  ID      | PROFILE  | STATUS  | DATE ADDED | LAST USED | EXP DATE  |  P/W EXP  |
  SBUTLER | NOM      | ENABLED | 9/9/2014   | 10/5/2018 | 00/00/00  |  N        |
  WPERRY  | NOM      | ENABLED | 10/29/2014 | 10/4/2018 | 00/00/00  |  N        |
  BTHOMAS | NOM      | ENABLED | 2/1/2017   | 9/28/2018 | 00/00/00  |  Y

预期结果将使报告像下面的示例一样对齐。 I到J列中有数据,因此我只能复制C到H列。谢谢您的时间。

Face

1 个答案:

答案 0 :(得分:0)

您只需要复制条件返回true的行。试试:

If Worksheets("Sheet1").Cells(i, 8).Value = "Y" Then
    Worksheets("Sheet1").Range("C" & i & ":H" & i).copy Worksheets("Sheet1").Range("B" & i & ":G" & i)
End If

另一种方法:您可以删除列C中的单元格,将其他单元格向左移动:

If Worksheets("Sheet1").Cells(i, 8).Value = "Y" Then
    Worksheets("Sheet1").Range("C" & i).Delete Shift:=xlToLeft
End If

If Worksheets("Sheet1").Cells(i, 8).Value = "Y" Then
    Worksheets("Sheet1").Cells(i, 3).Delete Shift:=xlToLeft
End If

(请注意,这将移动给定行上的所有所有单元格,并可能导致您不想要的东西)