基于其他单元格的值复制/粘贴n次(Copy/Paste n Times Based on Other

2019-09-28 06:35发布

我已经运行到这个墙。 尽管在SO帖子像这一个 ,这是非常相似的或这一个上Kioskea,我只是无法连接在我的脑海点基于这样是使这个工作需要一个公式结果过滤单元和复制之间。 下面是数据表 - 简化 - 我与合作:

     A    B   C        D     E      F    G    H
 R1 Name Num Status   #Orig #InPro #Act #Rem #RemStatus
 R2 ABC  032 Complete 22    0      11   11   Purged
 R3 LMN  035 In Prog  25    21     4    21   Pending Scan
 R4 XYZ  039 Not Act  16    16     0    16   Not Active

这描绘的纸质文件和他们的处置盒的状态:

  • 列d是计划的盒数要被扫描
  • E栏是箱子出来的扫描次数
  • F列是箱数实际扫描

列G和H可以有三种含义的基础上,状态:

  • 如果状态不活跃,列G和H匹配它,并没有什么需要做的事情
  • 如果状态是进行中,假定在列G是未决扫描框的数目的数目(简单地减去原始实际)
  • 如果状态完成后,假设在G栏中的是,并不需要进行扫描并清除了箱数数

我的代码(如下图所示)是应该做的是通过在一个范围内的每一行迭代(A2:H61)。 如果状态不活跃的行可以忽略不计,并将其移动到下一行。 如果状态是正在进行或完成,宏,在任何排它的“阅读”,需要复制单元格A,B和H,它(列)的另一工作时间“G”号粘贴 - 同一工作簿中 - 开始的下一个可用排。 深呼吸

我知道。 它伤害了我的大脑了。 这里是我到目前为止的代码:

Sub TEST_Copy_Process()

Dim srcrange As Range
Dim wb As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet

Set wb = ActiveWorkbook
Set ws1 = Worksheets("SIS Agregate")
Set ws2 = Worksheets("Center Detail")
Set srcrange = Range(wb.ws2.Cells("A2:H61"))


For Each Row In srcrange.Rows

If Row = "Not Active" And Row.Offset(0, 3) = SectorType Then
Continue
ElseIf Row = "In Progress" And Row.Offset(0, 3) = SectorType Then

ElseIf Row = "Complete" And Row.Offset(0, 3) = SectorType Then

End If

    Set LastCell = wb.ws1.Cells(wb.ws1.Rows.Count, "A").End(xlUp)
    LastCellRowNumber = LastCell.Row + 1

Next Row

End Sub

有一次,我去,实际上是做繁重的工作代码,我没有知识,理清哪些是最好的。 如上所述,像帖子这已经helpd让我在这里。 和我慢慢开始做什么,我就找到感觉的Excel先生 。 这个人似乎是在做的if / then工作,但我不明白它是如何复制或粘贴。

我明白任何及所有的帮助。 即使你可以点我的资源,这将有助于解释这一点(除了在亚马逊的书:]),这将是一个很大的帮助!

Answer 1:

让我们来看看,如果这让你在正确的轨道上。 你的代码看起来的人谁不知道多少非常好,所以也许你是一个快速学习:)

我很困惑,为什么你使用.Offset(0, 3)这似乎并不在你的解释中任何地方提到),也为什么你比较SectorType这是您所提供的代码未定义的变量。 我要承担这些是不必要的,而从其他的例子无意中复制 (请让我知道,如果我错了)。

我没有测试过,但我想改变这种分配:

Set srcrange = Range(wb.ws2.Cells("A2:H61"))

这一点,如果没有其他原因,而不是它是一个小更直接。 我也改变这个范围仅指 H列,因为这是列圆,你的逻辑中心(注:我们始终可以访问使用其他细胞Offset和/或Resize方法)。

Set srcrange = wb.ws2.Range("H2:H61")

你的逻辑的肉是在该块中,记去除Row.Offset(9, 3) = SectorType 。 我也打算使用Select Case ,而不是If/Then 。 我觉得这更容易阅读/当有不止一个或两个条件来测试理解:

For Each Row In srcrange.Cells  '## In this case, Cells/Rows is the same, but I use Cells as I find it less ambiguous
    Select Case Row.Value
        Case "Not Active"
        '## If the status is Not Active, Column G and H match it, and nothing needs to be done
            'Do nothing

        Case "In Progress", "Complete"
        '## If the status is In Progress or Complete, ... copy cells A, B, and H _
        '    and paste it (column)"G" number of times in another worksheet - _
        '    within the same workbook - starting in the next available row.

        '# Get the next empty cell in column A of the ws1
        '  I modified this to use Offset(1, 0), to return the cell BENEATH
        '  the last cell.
            Set LastCell = wb.ws1.Cells(wb.ws1.Rows.Count, "A").End(xlUp).Offset(1)

        '## copy the values from columns A, B, H to ws1
        '## Column A goes in column A
            LastCell.Value = Row.Offset(0, -7).Value 
        '## Column B goes in column B
            LastCell.Offset(0, 1).Value = Row.Offset(0, -6).Value 
        '## Column H goes in column C (because you did not specify)
            LastCell.Offset(0, 2).Value = Row.Value 
    End Select
Next Row


文章来源: Copy/Paste n Times Based on Other Cell Values