У меня следующая ситуация:

A                   B
19260218 234 77     ok
                    3
                    ok
19310328 174 46     2

Когда значение в столбце B является числовым, у меня есть условный формат, что вся строка окрашивается в красный цвет. Если это возможно, мне нужно следующее в VBA:

Если значение в столбце B является числовым И ячейка в столбце A (в той же строке) пуста, скопируйте ранее обнаруженное значение из столбца A в целевую строку. В этом случае (не считая заголовка): B2 = числовой И A2 = emtpy, поэтому скопируйте A1 в A2

B4 также числовой, но поскольку A4 не пусто, копировать ничего не нужно.

Возможно ли это для всего листа, в котором изменяется количество строк? Если так, то как?

Спасибо за помощь. Если мне нужно объяснить дальше, не стесняйтесь спрашивать.

2 ответа2

1

Поместите этот код VBA в лист:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim wks As Worksheet
Set wks = ActiveSheet
cellempty = False
i = 1
'Check the max. number of rows
While cellempty = False
    a = Cells(i, 2)
    If a = "" Then
        finalrow = i - 1
        cellempty = True
    End If
    i = i + 1
Wend
'Going row by row
For i = 1 To finalrow
    If IsNumeric(Cells(i, 2)) Then 'check if cell in column B is numeric
        If Cells(i, 1) = "" Then 'check if cell in column A is empty
            'goes upward on column A to find a non-empty value
            For j = i To 1 Step -1
                If Cells(j, 1) <> "" Then
                    Cells(i, 1) = Cells(j, 1) 'copy value to cell
                    j = 1
                End If
            Next j
        End If
    End If
Next i
End Sub

это очень простая вещь, которую вы можете усовершенствовать, чтобы быть более адаптированной к вашим потребностям. Предполагается, что данные находятся в столбцах A и B и будут выполняться всякий раз, когда происходит изменение на листе.

0

Вы можете ввести это в ячейку C2:

=IF(ISNUMBER(B2),IF(A2="",A1,A2),IF(A2="","",A2))

и скопируйте формулу в C3, C4, C5 ...

Теперь столбец C будет содержать информацию так, как вы хотите

Для входа в ячейку C1:

=IF(A1="","",A1)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .