【问题标题】:Copying and pasting datas to the selected row将数据复制并粘贴到所选行
【发布时间】:2016-06-10 11:48:50
【问题描述】:

我的工作代码中有一个代码片段,它将其他工作表中的数据复制并粘贴到一个主工作簿主工作表中。下面的代码允许我将数据从 BX 列复制并粘贴到 A 列的第一个空行,并将 CC 列复制并粘贴到 B 列的第一个空行。但是,我想将 CC 列粘贴到 B 列的(第 10 行)。我该怎么做?

 lRow = copySheet.Cells(copySheet.Rows.Count, 1).End(xlUp).Row

 With copySheet.Range("BX2:BX" & lRow)
   pasteSheet.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
   .Resize(.Rows.Count, .Columns.Count) = .Value
 End With

 'Determine last row of Column B in copySheet
 lRow = copySheet.Cells(copySheet.Rows.Count, 1).End(xlUp).Row

 With copySheet.Range("CC2:CC" & lRow)
  pasteSheet.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0)
  .Resize(.Rows.Count, .Columns.Count) = .Value
 End With

您能告诉我如何确定选择要复制的行数吗?

编辑:现在我想为另一列添加一个if 条件,应该说:

如果

工作表“数据”中的 U 列具有单元格值“8636”,然后是这些值 应粘贴到工作表“KomKo”(粘贴表)中的 H 列;到 下一行,因为我在“with”部分使用了上面的代码。

否则(如果 H 列中的值不是 8636)那么它应该粘贴

此列中的值到工作表“KomKo”中的 G 列(粘贴表) 再次具有与上述相同的偏好

.

我该怎么做?

【问题讨论】:

  • 我理解正确吗? cell = 表格中的单元格("data").columns("U") if cell = 8636 then paste the value to first empty cell in sheet("KomKo").columns("H") else if cell 8636 then将值粘贴到 sheet("KomKo").columns("G") 中的第一个空单元格
  • 是的,没错
  • 请检查编辑后的答案。希望这就是您所需要的。

标签: vba excel


【解决方案1】:

pasteSheet.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).Resize(.Rows.Count, .Columns.Count) = .Value 更改为pasteSheet.Range("B10").Resize(.Rows.Count, .Columns.Count) = .Value

****************** 回答问题编辑 ****************
******* 添加了 maxR - H 和 G 列的最后一行最高 *******
你可以这样做来得到你需要的东西:

Sub check8636values()

    Dim copySheet, pasteSheet As Worksheet
    Dim lRowU, lRowH, lRowG, maxR, i As Long

    'Dont forget to change to the correct sheet names!!!!
    Set copySheet = ThisWorkbook.Sheets("data")
    Set pasteSheet = ThisWorkbook.Sheets("KomKo")

    lRowU = copySheet.Cells(copySheet.Rows.Count, "U").End(xlUp).Row

    For i = 1 To lRowU

        lRowG = pasteSheet.Cells(pasteSheet.Rows.Count, "G").End(xlUp).Row + 1
        lRowH = pasteSheet.Cells(pasteSheet.Rows.Count, "H").End(xlUp).Row + 1
        maxR = Application.Max(lRowG,lRowH)

        If copySheet.Cells(i, "U").Value = "8636" Then

            pasteSheet.Cells(maxR, "H").Value = copySheet.Cells(i, "U").Value
            pasteSheet.Cells(maxR, "Y").Value = copySheet.Cells(i, "T").Value

        Else

            pasteSheet.Cells(maxR, "G").Value = copySheet.Cells(i, "U").Value
            pasteSheet.Cells(maxR, "X").Value = copySheet.Cells(i, "T").Value

        End If

    Next i

End Sub

【讨论】:

  • 感谢您的回复,工作正常!你能检查一下我的编辑吗?
  • 谢谢我现在检查,我有以下问题。此代码将值“8636”分隔到 H 列,并按照我的意愿保留到 G。但我不需要在同一行中的 H 和 G 中有值。如果一列有 8636 并且下一列有另一个值,那么这个另一个值应该是下一行的 G 列而不是当前行。我该怎么办?
  • 只需将lRowHlRowG 更改为i
  • 您是指当前的代码吗?它不能正常工作
  • 试试新代码,我希望这就是你要找的。​​span>
【解决方案2】:

因为您只处理一列范围,所以不需要 With-End With 块来缩写 Resize 方法参数:只需将 lRow 用于第一个

此外,由于您没有显示 copySheetpasteSheet 是否来自同一个工作簿,因此在 .Rows.Count 之前引用它们会更安全,并防止源自其源工作簿 Excel 版本的问题

    'Determine last row of Column B in copySheet
    lRow = copySheet.Cells(copySheet.Rows.Count, 1).End(xlUp).Row

    pasteSheet.Cells(pasteSheet.Rows.Count, "A").End(xlUp).Offset(1, 0).Resize(lRow) = copySheet.Range("BX2:BX" & lRow).Value        
    pasteSheet.Range("B10").Resize(lRow).Value = copySheet.Range("CC2:CC" & lRow).Value

【讨论】:

  • 感谢您的回复,工作正常!你能检查一下我的编辑吗?
猜你喜欢
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
相关资源
最近更新 更多