Vba 向上粘贴数据

Vba 向上粘贴数据,vba,excel,excel-2007,Vba,Excel,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

有人能提供这样的代码吗:从底部开始,如果“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  

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

将以下公式复制到E1中并向下复制,即可得到所需的值

=IF(C1="",IF(B1="",A1,B1),C1)
这与列出所需结果的顺序不同。您是要对其进行排序,还是只显示计算顺序

响应附加信息的附加部分

转到F列底部,当前为F9,然后键入:

=ROW(F$9)-ROW(F9)
将此公式复制到该列中,得到0到8的数字。现在,您可以按F列按升序或降序排序,具体取决于所需的视图


我将离开Siddharth Rout,为您提供与此等效的VBA。顺便说一下,Siddharth已经创建了两个额外的列,因此结果是您显示的列序列。我认为这是一个很好的补充。如果您喜欢公式方法,也可以使用公式。Tony已经为您提供了实现所需内容的最简单方法,但是如果您仍然需要一个代码,该代码可以为您提供精确的输出,请尝试此方法。输出将以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
选项显式
子样本()
昏暗的最后一排一样长,Rw一样长,我一样长
LastRow=范围(“D”和Rows.Count).End(xlUp).Row
Rw=1
对于i=最后一行到1步骤-1
如果Len(Trim(范围(“C”&i).Value))=0,则
如果Len(Trim(范围(“B”&i).Value))=0,则
如果Len(微调(范围(“A”&i).Value))为0,则
范围(“F”和Rw).值=范围(“A”和i).值
范围(“G”和Rw).值=范围(“D”和i).值
如果结束
其他的
范围(“F”和Rw).值=范围(“B”和i).值
范围(“G”和Rw).值=范围(“D”和i).值
如果结束
其他的
范围(“F”和Rw).值=范围(“C”和i).值
范围(“G”和Rw).值=范围(“D”和i).值
如果结束
Rw=Rw+1
接下来我
端接头

如果您编辑您的样本数据和要求的结果,使其至少包含一个A为空的情况,您的问题会更清楚。在开始新问题之前,如何提供反馈和/或将您的上一个问题标记为已解决。我需要反向排序,因为颜色需要高于主色,即高于蓝色。