Вставить данные, двигаясь вверх - PullRequest
0 голосов
/ 10 января 2012

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

Ответы [ 2 ]

1 голос
/ 10 января 2012

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

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

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

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

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

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

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

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

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

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

...