我对编码很新,所以我会很简短。我有一个非常大的数据集来处理excel。从两个电子表格中,我汇总了数据。
所以每组有4列。一列包含数据点的字母数字名称。 (例如,NC000023,NC000224等)。我想将匹配的字母数字名称与一张纸排成另一张。我想到的第一件事就是按字母顺序排列两列,这些列最符合要求。但是,从一个工作表到另一个工作表缺少一些数据点,导致整个数据中出现多个frameshif。
我已经编写了以下用于纠正这些移码的宏。
第一个是确定两列是否在特定行中匹配
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为FALSE的新列。
然后我用FALSE找出I列中的任何单元格,并确定我需要删除哪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
写完这些宏后,我已经完成了以下步骤。
我的问题是,如果D列中的相应单元格与向下和向左的一个单元格相同,或者执行Sub Subcut,是否可以编写一个代码“在第I列中为FALSE行执行Sub Bluecut”对于列中为FALSE的行,如果列D中的相应单元格与向上和向右的一个单元格相同。“
很抱歉,当我开始输入时,解释起来似乎要复杂得多。我很感激你能给我的任何帮助,即使这是写一小段代码的小费。
提前致谢。
答案 0 :(得分:1)
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
当然,我会在内部进行所有测试,而不是选择每个单元格,因为它会运行得更快,即使使用application.ScreenUpdating=False
也不必查看所有屏幕更新