比较列B和C然后移位数据

时间:2012-08-03 14:31:14

标签: excel vba excel-vba

我需要比较B列和C列。它们只包含实数,按升序排序。

我已经有了我想要它做的代码,但我需要帮助改变代码中的范围。

因此,目前的代码比较了B列和C列。

Look at this image for more clear explanation.

我需要帮助更改代码,以便我可以在A的左侧和D的右侧添加一列,并将其添加到班次范围。

基本上,比较E和F并转换B:EF:I

Option Explicit
Sub AlignList()
' hiker95, 08/02/2012
' http://www.mrexcel.com/forum/showthread.php?651139-Compare-Column-B-amp-C-and-Shift
Dim r As Long, lr As Long, d As Range
Application.ScreenUpdating = False
lr = Cells.Find("*", , xlValues, xlWhole, xlByRows, xlPrevious, False).Row
Set d = Range("A1:B" & lr)
r = 1
Do While d.Cells(r, 2) <> ""
  If d.Cells(r, 2).Offset(, 1) <> "" Then
    If d.Cells(r, 2) < d.Cells(r, 2).Offset(, 1) Then
      d.Cells(r, 2).Offset(, 1).Resize(, 2).Insert -4121
    ElseIf d.Cells(r, 2) > d.Cells(r, 2).Offset(, 1) Then
      d.Cells(r, 1).Resize(, 2).Insert -4121
      lr = lr + 1
      Set d = Range("A1:B" & lr)
    End If
  End If
  r = r + 1
Loop
Application.ScreenUpdating = 1
End Sub

1 个答案:

答案 0 :(得分:5)

你不需要宏来做你想做的事情(除非你是出于某种奇怪的原因而试图自动完成它。

你可以复制并粘贴D和C列,使它们低于其他数据(见图片),然后添加第5列,即B和C列的最大值(这将获取数字):

Answer Before

然后你只需要对最大列进行排序:

Answer After

编辑:

好的,所以这是非常基本的excel,所以我只是用一些小方向发布截图。基本上你正在尝试做什么(我不知道你是否意识到这一点)是两个表组合(授予它是一种非常奇怪的方式)。因此,如果您遵循我的原始说明,除了使用vlookup创造性地一点点,您绝对可以完成您想要做的事情。以下是截图:

因此创造性地使用vlookup: Original

您可以匹配需要匹配的数据: Vlookup1

这是另一个vlookup专栏: Vlookup2

然后,一旦您的数据匹配 - 您可以将其全部转换为复制和粘贴的值: CopyPasteValues

然后添加最新列: MaxColumn

然后你只是排序,你应该得到你想要的: WhatYouWant

然后,您可以删除不再需要的任何额外数据: DeleteAnythingYouDoNotWant

希望能帮到你。你想要使用VBA的唯一原因是你想要自动化这个过程 - 但如果这是一次性的事情,那么这将是非常耗时的。 Excel旨在操纵数据 - 匹配表 - 类似的东西 - 将其用于此目的。