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

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


arrow_upward
1
arrow_downward

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

arrow_upward
1
arrow_downward

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

Скопируйте следующую формулу в 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