2012-08-03 44 views
1

我需要比较列B和C.它们只包含实数,按升序排序。比较列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 

回答

5

你并不需要一个宏做你正在尝试做的(除非你想理由很奇怪,自动做到这一点。

你可以复制和粘贴列d和C使它们低于其他数据(见图片),然后添加一个5列,它是列B和C的最大值(这将抢号):

Answer Before

然后你只需要请在最大列上排序:

Answer After

编辑:

好了,所以这是非常基本的Excel,所以我只是去一些小的方向后的截图。基本上你正在试图做的事情(我不知道你是否意识到这一点)是结合了两张表(当然,这是以一种非常奇怪的方式)。所以如果你遵循我原来的说明,除了创造性地使用vlookup,你绝对可以完成你正在尝试做的事情。以下是截图:

所以使用VLOOKUP创造性: Original

可以匹配需要匹配了数据: Vlookup1

,这里是另一个VLOOKUP列: Vlookup2

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

然后添加你的最大列: MaxColumn

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

然后你可以删除你不需要任何更多的额外数据: DeleteAnythingYouDoNotWant

所以希望能帮助你。你想使用VBA的唯一原因是如果你想让这个过程自动化 - 但是如果这是一次性的事情,那么这太耗时了。Excel意在操纵数据 - 匹配表格 - 类似的东西 - 用于此目的。

+0

谢谢,这是明智之举,但在B&C之间没有任何共同之处的时候,这很好,您是否看到这个例子中5是常见的,并且没有排队,我有超过60,000行数据,我不知道不想手动排列它们。 – Mowgli 2012-08-03 21:01:05

+0

是的,我明白你的意思了 - 有一个简单的解决方案,我现在没有时间发帖 - 稍后会发布。一路平安。 – Stepan1010 2012-08-03 22:00:39

+0

看我的编辑 - 祝你好运。 – Stepan1010 2012-08-06 16:31:22