【问题标题】:Copy data in one column to a different column on another sheet based on a third column's data根据第三列的数据将一列中的数据复制到另一张工作表上的不同列
【发布时间】:2018-04-09 11:23:51
【问题描述】:

所以,我是 VBA 的新手,我很难找到我认为应该是一个相当简单的问题的答案。

我有一个包含 2 张工作表的工作簿,我们将其称为 Sheet1 和 Sheet2。

我想将 Sheet1 上 B、D 和 E 列中的数据复制到 Sheet 2 上 A、B 和 C 列中的第一个可用行,并进行以下更改:

表 1 表 2
Col E Col A
Col D Col B
Col B Col C

但我只想在 Sheet1 Column I 中每一行的单元格值为“Y”时复制数据。

我还没有任何代码。

更新: 在听取了回复的建议后,我运行了一个宏记录并得到了这个:

    Sub VBlk()
    '
    ' VBlk Macro
    ' V Block Copy
    '

    '
        Range("B2").Select
        Selection.Copy
        Sheets("Sheet2").Select
        Range("C3").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, 
SkipBlanks _
            :=False, Transpose:=False
        Range("B3").Select
        Sheets("Sheet1").Select
        Range("D2").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Sheet2").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Sheets("Sheet1").Select
        Range("E2").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Sheet2").Select
        Range("A3").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    End Sub

【问题讨论】:

  • By "但是如果Sheet1 Column I的值为Y,我只想复制数据"您是指整列还是I列中的单元格值?
  • 每一行的单元格值。因此,如果 $I$4 = "Y",那么我想将 $B$4、$D$4 和 $E$4 复制到工作表 2 上的第一个打开的行。
  • 你写“还”。为什么不等到你有一些代码并本着这个地方的精神发布呢?使用宏记录器,谷歌,有很多东西可以帮助你开始。

标签: vba excel


【解决方案1】:

试试下面的代码(希望有帮助):

   Sub test()

        Dim ws1 As Worksheet
        Dim ws2 As Worksheet
        Set ws1 = Sheets("sheet1")
        Set ws2 = Sheets("sheet2")

        'get the Last non empty row in sheet1 based on Column B
        lastrow1 = ws1.Cells(Rows.Count, 2).End(xlUp).Row


        For i = 1 To lastrow1
            'get the Last non empty row in sheet2 based on Column A
            lastrow2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row
            If ws1.Range("I" & i).Value = "Y" Then
                ws2.Range("A" & lastrow2 + 1).Value = ws1.Range("E" & i)
                ws2.Range("B" & lastrow2 + 1).Value = ws1.Range("D" & i)
                ws2.Range("C" & lastrow2 + 1).Value = ws1.Range("B" & i)
            End If
        Next i

    End Sub

【讨论】:

  • 太棒了!像魅力一样工作。谢谢你。在寻求帮助之前,我会在第一次尝试时更加积极主动。我真的才刚刚开始了解这一切是如何运作的。
  • 不客气@JustinF .. 一个问题.. 你想在 sheet2 的最后一行添加你的行,或者你之间有空白行吗? ..
  • 不,中间没有空白行。最后一行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多