Может ли кто-нибудь предоставить код, который говорит что-то вроде: НАЧАЛО В НИЗУ, если значение в "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
Ответ 1 · рейтинг 1 · Siddharth Rout
Тони уже дал вам самый простой способ добиться того, чего вы хотите, но если вам все еще нужен код, который дает вам ТОЧНЫЙ результат, как у вас, попробуйте это. Вывод будет в 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
Ответ 2 · рейтинг 1 · Tony Dallimore
Я не понимаю, почему необходимо двигаться вверх, если нет связи между строками.
Скопируйте следующую формулу в E1 и скопируйте вниз, и вы получите значения, которые вы ищете.
=IF(C1="",IF(B1="",A1,B1),C1)
Это не в обратной последовательности, как вы перечисляете требуемый результат. Вы хотите, чтобы он был отсортирован, или вы просто показываете последовательность вычислений?
Дополнительный раздел в ответ на дополнительную информацию
Перейдите к нижней части столбца F, в настоящее время F9, и введите:
=ROW(F$9)-ROW(F9)
Скопируйте эту формулу вверх по столбцу, чтобы получить числа от 0 до 8. Теперь вы можете сортировать по столбцу F в возрастающей или убывающей последовательности в зависимости от того, какое представление вы хотите.
Я оставлю Siddharth Rout, чтобы дать вам эквивалент VBA. Кстати, Сиддхарт создал два дополнительных столбца, так что результат будет в той последовательности столбцов, которую вы показываете. Я подумал, что это хорошее дополнение. Вы можете сделать то же самое с формулами, если предпочитаете формульный подход.