我有三个用VBA为Excel编写的宏;I';我在寻求帮助把他们联系在一起。
我对编码相当陌生,所以我会简单介绍。我有一个非常大的数据集要在excel中处理。从两张电子表格中,我汇集了数据 所以每个集合有4列。一列包含数据点的字母数字名称。(例如,NC000023、NC000224等)。我想把匹配的字母数字名称从一张纸排到另一张纸。首先想到的是按字母顺序对这两列进行排序,这两列最匹配。但是,从一张图纸到另一张图纸缺少一些数据点,导致整个数据中出现多个移帧 我编写了以下宏来纠正这些移帧 第一个是确定两列在特定行中是否匹配我有三个用VBA为Excel编写的宏;I';我在寻求帮助把他们联系在一起。,excel,vba,Excel,Vba,我对编码相当陌生,所以我会简单介绍。我有一个非常大的数据集要在excel中处理。从两张电子表格中,我汇集了数据 所以每个集合有4列。一列包含数据点的字母数字名称。(例如,NC000023、NC000224等)。我想把匹配的字母数字名称从一张纸排到另一张纸。首先想到的是按字母顺序对这两列进行排序,这两列最匹配。但是,从一张图纸到另一张图纸缺少一些数据点,导致整个数据中出现多个移帧 我编写了以下宏来纠正这些移帧 第一个是确定两列在特定行中是否匹配 Sub Matching() ' ' Macro1
Sub Matching()
'
' Macro1 Macro
'
' Keyboard Shortcut: Ctrl+m
'
Range("I2").Select
ActiveCell.FormulaR1C1 = "=EXACT(RC[-4],RC[-5])"
Range("I2").Select
Selection.AutoFill Destination:=Range("I2:I40028"), Type:=xlFillDefault
这将根据D3是否与E3匹配,以及D550是否与D550匹配等情况,显示一个新列,其中包含TRUE of FALSE
然后,我查找I列中任何带有FALSE的单元格,并确定需要删除哪4个单元格以更正匹配。该代码的设计目的是剪掉罪犯,将其粘贴到一边,并将较低的行向上移动以取代其位置
Sub RedCut()
'
' Macro2 Macro
' Shortcut CTRL + r
'
ActiveCell.Offset([0], [-3]).Select
Range(ActiveCell, ActiveCell.Offset(0, 3)).Cut
ActiveCell.Offset([0], [12]).Select
ActiveSheet.Paste
ActiveCell.Offset([0], [-12]).Select
Range(ActiveCell, ActiveCell.Offset(0, 3)).Select
Selection.Delete Shift:=xlUp
End Sub
另一个呢
Sub Bluecut()
'
' Bluecut Macro
'
' Keyboard Shortcut: Ctrl+b
ActiveCell.Offset([0], [3]).Select
Range(ActiveCell, ActiveCell.Offset(0, -3)).Cut
ActiveCell.Offset([0], [9]).Select
ActiveSheet.Paste
ActiveCell.Offset([0], [-9]).Select
Range(ActiveCell, ActiveCell.Offset(0, -3)).Select
Selection.Delete Shift:=xlUp
'
End Sub
编写了这些宏之后,我已经完成了以下步骤
提前谢谢 a for/next或for/each循环应该适合您的需要 作为一个简单的总结,我会做一些类似的事情,来追踪你的匹配:
Dim I as range
for each I in Range("I2:I40028").Cells
I.select
if activecell.offset(0,-5)=activecell(1,-6) then
bluecut
else
redcut
end if
next
当然,我会在内部进行所有测试,而不是选择每个单元格,因为即使使用
应用程序,它也会运行得更快。ScreenUpdate=False
要停止查看所有屏幕更新,您可以使用调用routineX
从routineY运行特定的例程。看起来您需要将您的子
更改为函数
,以便它们可以接受参数…以便它们知道目标行。谢谢!但是,我想做的不是获取一个特定的值,而是根据列I中的布尔值剪切并粘贴目标单元格。函数而不是子函数是否允许我这样做?由于输出不是一个值,所以可以这么说?不要使用函数,sub应该能够接受参数SSO,在填写您要循环列I
的True和False之后,根据特定条件,是否执行RedCut或BlueCut?你可以把它放在例行的匹配中
是的,这正是我想要做的。然而,每一个红切或蓝切都会改变其余的是真是假,因为我以后可能会修改一个移帧。