2012-01-10 47 views
0

有人可以提供一段代碼,說明如下:開始在底部,如果「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

如果您編輯樣本數據並且要求結果至少包含一個A爲空白的情況,那麼您的問題會更清楚。 – 2012-01-10 16:02:24

+0

如何提供反饋和/或在開始新問題之前將您的最後問題標記爲解決問題。 – Reafidy 2012-01-10 19:32:54

回答

1

我不明白爲什麼有必要動因爲行之間沒有關係。

將以下公式複製到E1中,然後複製下來,得到您要查找的值。

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

這不是按照相反的順序排列,這是您如何列出所需結果。你想排序還是隻顯示計算順序?

額外部分響應附加信息

進入的F列,目前F9底部和類型:

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

複製這個公式了列給你的數字0了現在您可以按列F按升序或降序排序,具體取決於您希望的視圖。

我會離開Siddharth Rout來給你VBA相當於此。順便說一下,Siddharth創建了兩個附加列,因此結果以您顯示的列順序排列。我認爲這是一個很好的補充。如果你喜歡公式的方法,你可以用公式做同樣的事情。

+0

我需要它在反向排序中,因爲顏色需要高於Blue,高於Blue。 – rjk 2012-01-10 17:14:44

0

託尼已經給你最簡單的方法來實現你想要的,但如果你仍然想要一個代碼給你的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