【问题标题】:Excel Macro Loop Through Range, Copy/paste (some complications)Excel 宏循环范围,复制/粘贴(一些复杂性)
【发布时间】:2019-02-07 23:43:28
【问题描述】:

我在“sheet2”中有一系列数据 (C2:C100)。我想单独复制粘贴到工作表“详细位置”的单元格 A2,从“详细位置”的(A2:K2)复制结果,并将(仅值)粘贴到(A2:K2)中作为第一个值,(A3 :K3) 工作表“All LOC”的第二个,依此类推。我读过复制/粘贴很密集,但是 sheet2 中单元格 (A1:D1) 中的公式很复杂,我只想要它们在“所有 LOC”中的结果粘贴中产生的值。我为“sheet2”范围内的第一个单元格记录了我想要它做的宏。我不确定如何集成循环以使其在“sheet2”的整个范围内重复,以及如何让它将结果粘贴到降序行中的“ALL LOC”中。请注意,“ALL LOC”中发生的步骤总是发生在第二行 (A2:K2),而不是降序行。感谢您提供任何帮助/建议。

Range("C2").Select
Selection.Copy
Sheets("Detailed LOC").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Range("A2:K2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("All Loc").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Sheets("Sheet2").Select
Range("A1").Select

【问题讨论】:

  • 我建议你看看how to avoid using select。对于您的问题,如果您不必单独仲裁每一行,我不明白为什么需要循环。数据的屏幕截图可能有助于更清楚地说明这一点。
  • 尝试解释一个,可能是两个完整的“循环”过程,以便人们了解循环什么以及在哪里复制什么,例如: 1. 将“Sheet2 C2”复制到“详细 LOC A2” .将“详细 LOC A2:K2”复制到“所有 LOC”A2。 2. 将“Sheet2 C3”复制到“Detailed LOC”A3。将“Detailed LOC A3:K3”复制到“All LOC”A3 ...等。这可能是错误的,但你可以明白我的意思。 “下降”部分是什么意思?
  • 是的,无法理解这部分“请注意,“ALL LOC”中发生的步骤总是发生在第二行 (A2:K2),而不是降序行。”但试图给出一个使用宏代码循环遍历单元格的解决方案。请参阅下文并留下 cmets,以便我们根据您的需要对其进行调整。
  • 澄清:'round1':将“Sheet2 C2”复制到“详细 LOC A2”。将“详细 LOC A2:K2”的值复制到“所有 LOC A2:K2”。 “round2”:将“Sheet2 C3”复制到“详细 LOC A2”。将“详细 LOC A2:K2”的值复制到“所有 LOC A3:K3”。第一个副本在一个范围内,例如“Sheet2 C2:C100”,但始终粘贴在“详细 LOC A2”中。第二个副本始终是“Detailed LOC A2:K2”,但仅粘贴值 - 每次在“All LOC”上都需要转到新行,因此“All LOC A2:K2”、“All LOC A3:K3” ", 所有 LOC A4:K4", 等等..

标签: excel vba loops copy range


【解决方案1】:

请试一试并自定义代码以满足您的需求。

在尝试之前备份您的工作簿!

Sub CopyRanges()

    ' Declare objects
    Dim sourceRange As Range
    Dim detailedRange As Range
    Dim sourceCell As Range

    ' Declare other variables
    Dim sourceSheetName As String
    Dim detailedSheetName As String
    Dim allSheetName As String
    Dim sourceRangeAddress As String
    Dim counter As Integer ' Change for long if more than 32.000 items

    ' Initialize variables
    sourceSheetName = "Sheet2"
    detailedSheetName = "Detailed LOC"
    allSheetName = "All LOC"

    ' Define the address of the source range
    sourceRangeAddress = "C2:C100"

    ' Initialize the source range
    Set sourceRange = ThisWorkbook.Worksheets(sourceSheetName).Range(sourceRangeAddress)

    counter = 1

    ' Loop through each cell in source range
    For Each sourceCell In sourceRange

        ' Copy to detailed sheet (no selection - copy - paste!) - Change the column "A" if needed
        ThisWorkbook.Worksheets(detailedSheetName).Range("A" & sourceCell.Row).Value = sourceCell.Value

        ' Copy to all sheet (if you have formulas, this pastes the values. As you didn't mention, please confirm)  - Change the column "A and K" if needed
        ThisWorkbook.Worksheets(allSheetName).Range("A" & sourceCell.Row & ":" & "K" & sourceCell.Row).Value = ThisWorkbook.Worksheets(detailedSheetName).Range("A" & sourceCell.Row & ":" & "K" & sourceCell.Row).Value

        counter = counter + 1

    Next

    MsgBox "processed " & counter & " cells"

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 2013-11-29
    • 2016-11-09
    相关资源
    最近更新 更多