有人可以提供类似以下内容的代码:如果“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
答案 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