0

我对编码还很陌生,所以我会很简短。我有一个非常大的数据集要在 excel 中处理。从两个电子表格中,我将数据汇总在一起。

所以每组有4列。一列包含数据点的字母数字名称。(例如,NC000023、NC000224 等)。我想将匹配的字母数字名称与一张纸排列到另一张纸上。首先想到的是按字母顺序对两列进行排序,这确实最匹配。但是,从一张到另一张缺少一些数据点,导致整个数据出现多个帧移位。

我编写了以下宏来纠正这些移码。

第一个只是确定两列是否在特定行中匹配

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 的新列。

然后,我找出 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

编写完这些宏后,我一直在执行以下步骤。

  1. 按 CTRL+M 调用匹配的标题行的 TRUE 或 FALSE 列表
  2. 用 FALSE 找出一行。确定是需要删除数据集 1 还是数据集 2 中的四个单元格
  3. 再次按 CTRL + M,并更正该行。

我的问题是,是否可以编写一个代码,如果 D 列中的相应单元格与左侧和下方的一个单元格相同,则对 I 列中具有 FALSE 的行执行 Sub Bluecut,或者对一行执行 Sub Redcut如果 D 列中的相应单元格与右上方的一个单元格相同,则列中为 FALSE。”

抱歉,当我开始打字时,这似乎不太复杂。我将不胜感激您能给我的任何帮助,即使它只是编写一小段代码的提示。

提前致谢。

4

1 回答 1

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不必查看所有屏幕更新

于 2013-01-21T18:51:51.440 回答