粘贴数据向上移动

时间:2012-01-10 14:27:34

标签: excel vba excel-vba excel-2007

有人可以提供类似以下内容的代码:如果“C”中的值为空白,则查看“B”(如果不是C和D中的空白复制值);如果“B”为空白,则查看“A”(如果不是B和D中的空白复制值);如果“A”为空白,则移至下一个(如果不是A和D中的空白复制值)。

我需要脚本从页面底部开始并向上移动。例如,从第9行开始,到逻辑运行第1行时结束。

使用以下数据的最终结果应如下所示:

END RESULT
color      12  
primary    35  
blue       1  
shape      685  
rounded    1  
oval       25  
size       21  
big        56  
giant      10  


DATA:  
     A       B        C      D
1   size    big     giant   10  
2   size    big             56  
3   size                    21  
4   shape   rounded oval    25  
5   shape   rounded          1  
6   shape                   685  
7   color   primary blue    1  
8   color   primary         35  
9   color                   12  

2 个答案:

答案 0 :(得分:1)

我不明白为什么必须向上移动,因为行之间没有任何关系。

将以下公式复制到E1并复制下来,您将获得所寻找的值。

=IF(C1="",IF(B1="",A1,B1),C1)

这与列出所需结果的方式不相反。你想要它排序还是你只是显示计算顺序?

回复其他信息的额外部分

转到F列的底部,当前为F9并输入:

=ROW(F$9)-ROW(F9)

将此公式复制到列中,为您提供0到8之间的数字。现在,您可以按F列按升序或降序排序,具体取决于您希望的视图。

我将离开Siddharth Rout给你VBA等同于此。顺便说一句,Siddharth创建了两个额外的列,因此结果显示在您显示的列序列中。我认为这是一个很好的补充。如果您更喜欢公式方法,也可以使用公式。

答案 1 :(得分:1)

Tony已经为您提供了实现您想要的最简单的方法,但是如果您仍然想要一个能够为您提供EXACT输出的代码,那么试试这个。输出将在Col F:G

Option Explicit

Sub Sample()
    Dim LastRow As Long, Rw As Long, i As Long

    LastRow = Range("D" & Rows.Count).End(xlUp).Row
    Rw = 1

    For i = LastRow To 1 Step -1
        If Len(Trim(Range("C" & i).Value)) = 0 Then
            If Len(Trim(Range("B" & i).Value)) = 0 Then
                If Len(Trim(Range("A" & i).Value)) <> 0 Then
                    Range("F" & Rw).Value = Range("A" & i).Value
                    Range("G" & Rw).Value = Range("D" & i).Value
                End If
            Else
                Range("F" & Rw).Value = Range("B" & i).Value
                Range("G" & Rw).Value = Range("D" & i).Value
            End If
        Else
            Range("F" & Rw).Value = Range("C" & i).Value
            Range("G" & Rw).Value = Range("D" & i).Value
        End If

        Rw = Rw + 1
    Next i
End Sub