Я бы не использовал VBA для этой проблемы.Я набрал бы:
=IF(AND(LEFT(B2,1)="F",B2<>"Fruits"),B2,A1)
в A2 и скопировал бы вниз.Похоже, это дает искомый эффект.
Если вы действительно хотите использовать VBA, протестированный код выглядит следующим образом:
Dim CellValue As String
Dim RowCrnt As Integer
Dim RowMax As Integer
With Sheets("Sheet1") ' Replace Sheet1 by the name of your sheet
RowMax = .Cells(Rows.Count, "B").End(xlUp).Row
For RowCrnt = 2 To RowMax
CellValue = .Cells(RowCrnt, 2).Value
If Left(CellValue, 1) = "F" And CellValue <> "Fruits" Then
.Cells(RowCrnt, 1).Value = CellValue
Else
.Cells(RowCrnt, 1).Value = .Cells(RowCrnt - 1, 1).Value
End If
Next
End With
Ниже объясняются те аспекты приведенного выше кода, которые могут быть неясными.новичку.
Макро-рекордер почти всегда использует Range ("A5") или Range ("A5: C10") для обозначения диапазонов.
Похоже, есть несколько команд (извините, не помню какой) для которого этот формат является обязательным, но для большинства целей удобнее использовать ячейки (строка, столбец).
Если вы хотите добавить 1 к каждому числовому значению в диапазоне "A5:C10 "листа" Sheet1 ", ниже показано, как это сделать с помощью ячеек:
Dim CellValue as String
Dim ColCrnt As Integer
Dim RowCrnt As Integer
With Sheets("Sheet1")
For RowCrnt = 5 to 10
For ColCrnt = 1 to 3 ' "A" to "C"
CellValue = .Cells(RowCrnt, ColCrnt).Value
If IsNumeric(CellValue) Then
.Cells(RowCrnt, ColCrnt).Value = CellValue + 1
End If
Next
Next
End With
Существует ограничение по времени при доступе к ячейкам на листе, но я больше использовал CellValue, потому что код может сильно загромождатьсяс слишком большим количеством ссылок на ячейки.
Примечание: в «A5» столбец идет первым, но в ячейках (5,1) строка стоит первой.
Вы можете определить диапазоны с ячейками.Следующие значения «A5: C10» активного листа выделены жирным шрифтом:
Range(Cells(5,1), Cells(10,3)).Font.Bold = True
Для адресации столбца A последней строки активного листа:
Cells(Rows.Count,"A")
Для адресации последнегостолбец строки 1:
Cells(1,Columns.Count)
Ctrl + Up, Ctrl + Down, Ctrl + Left и Ctrl + Right можно использовать для перехода из пустой ячейки в следующую ячейку со значением в указанном направлении.Вы можете сделать то же самое в VBA.Но более полезно то, что вы можете получить значение строки или столбца, к которому переместится курсор, без потери времени на перемещение курсора.
Если курсор находился в столбце B последней строки и вы нажали Ctrl +Вверх курсор переместится на последнюю строку со значением в столбце B. Следующее устанавливает RowMax на этот номер строки для активного листа:
RowMax = Cells(Rows.Count, "B").End(xlUp).Row
Чтобы получить последний использованный столбец строки 27:
ColMax = Cells(27,Columns.Count).End(xlToRight).Column