Вставить данные, двигаясь ВВЕРХ

Может ли кто-нибудь предоставить код, который говорит что-то вроде: НАЧАЛО В НИЗУ, если значение в «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  

person rjk    schedule 10.01.2012    source источник
comment
Ваш вопрос будет более ясным, если вы отредактируете свои образцы данных и требуемый результат, чтобы включить хотя бы один случай, когда A пусто.   -  person Tim Williams    schedule 10.01.2012
comment
Как насчет того, чтобы оставить отзыв и/или отметить последние вопросы как решенные, прежде чем начинать новые.   -  person Reafidy    schedule 10.01.2012


Ответы (2)


Тони уже дал вам самый простой способ добиться того, чего вы хотите, но если вам все еще нужен код, который дает вам ТОЧНЫЙ результат, как у вас, попробуйте это. Вывод будет в 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
person Siddharth Rout    schedule 10.01.2012

Я не понимаю, почему необходимо двигаться вверх, если нет связи между строками.

Скопируйте следующую формулу в E1 и скопируйте вниз, и вы получите значения, которые вы ищете.

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

Это не в обратной последовательности, как вы перечисляете требуемый результат. Вы хотите, чтобы он был отсортирован, или вы просто показываете последовательность вычислений?

Дополнительный раздел в ответ на дополнительную информацию

Перейдите к нижней части столбца F, в настоящее время F9, и введите:

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

Скопируйте эту формулу вверх по столбцу, чтобы получить числа от 0 до 8. Теперь вы можете сортировать по столбцу F в возрастающей или убывающей последовательности в зависимости от того, какое представление вы хотите.

Я оставлю Siddharth Rout, чтобы дать вам эквивалент VBA. Кстати, Сиддхарт создал два дополнительных столбца, так что результат будет в той последовательности столбцов, которую вы показываете. Я подумал, что это хорошее дополнение. Вы можете сделать то же самое с формулами, если предпочитаете формульный подход.

person Tony Dallimore    schedule 10.01.2012
comment
Мне нужно это в обратной последовательности, потому что цвет должен быть выше основного, который выше синего. - person rjk; 10.01.2012