VBA - изменить значение ячейки в зависимости от условия
Кажется довольно простым вопросом, но я не смог найти ответ здесь. Я уже много лет пользовался Stackru sooo и, наконец, решил задать вопрос сам, уверен, кто-то знает ответ!
Ситуация: у меня есть столбец значений с уникальными именами файлов и были ли они обработаны или нет. Например: "20160810_123_a.xml обработан" или "20160810_123_b.xml fail" Длина имени файла изменяется, поэтому она не является статической. Я использую эти значения в другом отчете и хотел бы только значения "Обработано" или "Сбой", в зависимости от того, что было в исходном контенте.
Я предполагаю, что мне нужен какой-то цикл If, который будет делать что-то вроде этого: В диапазоне I: I, если значение ячейки содержит "обработано", замените всю ячейку на "Обработано". Если значение ячейки содержит "fail", замените всю ячейку на "Failed".
Заранее спасибо!
2 ответа
Попробуй это
Sub main()
With Worksheets("Conditions") '<--| change "Conditions" to your actual data sheet
With .Range("I1", .Cells(.Rows.Count, "I").End(xlUp)).SpecialCells(XlCellType.xlCellTypeConstants) '<--| change "I"s to your actual column index where to search for processed/failed
.Replace what:="*processed*", replacement:="Processed", LookAt:=xlWhole, MatchCase:=False
.Replace what:="*failed*", replacement:="Failed", LookAt:=xlWhole, MatchCase:=False
End With
End With
End Sub
Это сработало для меня:
Option Explicit
Sub Test()
Dim arr() As Variant
Dim i As Long
Dim myRange As Range
Dim wf As WorksheetFunction
Set wf = Application.WorksheetFunction
With ActiveSheet
Set myRange = .Range(.Cells(1, 1), Cells(.Rows.Count, 1).End(xlUp))
End With
arr = myRange
For i = 1 To UBound(arr)
arr(i, 1) = wf.Proper(Right(arr(i, 1), Len(arr(i, 1)) - wf.Find(" ", arr(i, 1))))
Next i
myRange.Offset(0, 1) = arr
End Sub