2014-05-14 78 views
1

我已经跑到墙上了。尽管SO上的帖子如this one非常类似或Kioskea上的this one,但我无法连接过滤单元格和根据公式结果进行复制之间的关系。基于其他单元格值复制/粘贴n次

 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中的数字是不需要扫描的盒子的数量并被清除

我的代码(如下所示)是su要做的是遍历范围内的每一行(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 

有一次,我去,实际上是做繁重的工作代码,我没有知识,理清哪些是最好的。如上所述,this等帖子有助于我到这里。而且我慢慢开始了解我在Mr. Excel上找到的内容。这个人似乎在做If/Then的工作,但我不明白它是如何复制或粘贴的。

我感谢任何和所有的帮助。即使你能指点我的资源,这将有助于解释这一点(除了亚马逊书:),这将是一个很大的帮助!

+1

我不清楚你究竟在问什么。 –

回答

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 
+1

解释使我能够弄清楚什么是代码。感谢您的指导。你是对的,当我把它们拼凑在一起时,一些不必要的代码被粘贴在各种来源中。我做了一些简单的修改来移动列。我的下一个目标是根据列G中的数字重复粘贴功能。 – UserUnknown

相关问题