好吧,所以我一直拉着我的头发试图让这个正确,但我觉得好像答案应该是非常简单!寻找在Excel中循环两个VBA宏,但我认为我只是缺少一些非常小的东西
首先,我写了两个宏,我们称之为LeftCut和RightCut。这些将切出一行四列,并将它们粘贴在表单中的其他位置。这些VBA代码是
Sub RightCut()
ActiveCell.Offset([0], [-1]).Select
Range(ActiveCell, ActiveCell.Offset(0, -3)).Cut
ActiveCell.Offset([0], [6]).Select
Range(ActiveCell, ActiveCell.Offset(0, 3)).Select
Selection.Insert Shift:=xlDown
ActiveCell.Offset([0], [-6]).Select
Range(ActiveCell, ActiveCell.Offset(0, -3)).Select
Selection.Delete Shift:=xlUp
End Sub
Sub LeftCut
Range(ActiveCell, ActiveCell.Offset(0, 3)).Cut
ActiveCell.Offset([0], [10]).Select
Range(ActiveCell, ActiveCell.Offset(0, 3)).Select
Selection.Insert Shift:=xlDown
ActiveCell.Offset([0], [-10]).Select
Range(ActiveCell, ActiveCell.Offset(0, 3)).Select
Selection.Delete Shift:=xlUp
End Sub
这两项工作的自己。现在,我想要做的就是将这些循环结合在一起,这样如果满足某个条件,比如说如果四个左列不匹配四个右列并且需要删除一行,那么这两个宏中的一个是调用。
现在,我有一个为Do While循环编写的伪代码,但是这与我正在寻找的内容非常接近?主要的问题是,在工作表中的某些点上,需要剪切和粘贴多达20行,所以我希望上面的宏反复使用,直到ActiveCell = ActiveCell.Offset(0,-1) 。这可能与一个Do While循环?
Sub HighAce()
Dim i As Long
Dim ActiveCell As Range
i = 2
Application.ScreenUpdating = True
Do While i <= 40043
Set ActiveCell = Range("E" & i)
If ActiveCell = ActiveCell.Offset([0], [-1]) Then
ActiveCell.Offset([1], [0]).Select
ElseIf ActiveCell > ActiveCell.Offset([0], [-1]) Then
Application.Run "'Methylation Array.xlsm'!NewBlueCut"
ElseIf ActiveCell < ActiveCell.Offset([0], [-1]) Then
Application.Run "'Methylation Array.xlsm'!NewBlueCut"
Else: Stop
End If
Loop
End Sub
我在正确的轨道上吗?有没有一条线我失踪?
我很感激任何人都可以提供的帮助。稍后我会以一种全新的心态回到这个问题上,我会看看我是否也能自己找到解决方案!
谢谢!
编辑:样本数据集
XXX A01 A01 XXX
XXX A02 A04 XXX
XXX A06 A05 XXX
XXX A07 A06 XXX
XXX A08 A09 XXX
所以如果顶部的A01当ActiveCell = ActiveCell.Offset(0,-1)时,右边是活动单元格,然后移动到下一行。在此,由于活动单元>邻近单元,执行Leftcut。现在,Activecell <的Adjacent cell,所以执行RightCut。另一个正切将使这两个单元格相等,所以光标将移动到下一行,然后再次移动。
你应该迭代或简单地在循环内增加'i',否则将会是无止境的。 – 2013-02-18 16:43:18
你能告诉我们样本数据结构吗?我确定你不需要为此设置宏... – 2013-02-18 20:04:53
请参阅编辑数据集。 – user1996971 2013-02-18 20:41:56