2016-10-14 28 views
1

似乎是一個足夠簡單的問題,但我在這裏找不到答案。我已經使用了StackOverflow sooo,最後決定自己提問,我確定有人知道答案!VBA - 更改細胞的價值取決於條件

的情況: 我有一個唯一的文件名值的列,如果他們處理與否。例如:「20160810_123_a.xml已處理」或「20160810_123_b.xml失敗」文件名的長度發生更改,因此它不是靜態的。我在不同的報告中使用這些值,只取決於'Processed'或'Failed'的值,具體取決於原始內容中的內容。

我猜我需要某種If循環,它會這樣做: 在範圍I:I中,如果單元格的值包含「已處理」,則用「已處理」替換整個單元格。 !如果單元格的值包含 「失敗」,取代「失敗

由於整個小區提前

+0

你可以用一個簡單的公式來做到這一點,它是否需要VBA? – Brian

+0

嘿,Brian,我用VBA來處理整個文檔,這只是它的一個步驟,所以是的,我總是可以在裏面放一個公式當然你會建議嗎? – Intuos

+0

這裏有幾個選項,但如果您只想更改大小寫,以便可以在VBA中執行比較,那麼在比較時可以在VBA代碼中使用'LCase'或'UCase'。這樣,無論字符串中的情況如何,您都會得到正確的結果 – Zac

回答

3

試試這個

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 
+0

這真是一個非常好的方法! – Brian

+0

謝謝@布萊恩。讓我們看看Intuos對此的看法! – user3598756

+0

工程就像一個魅力!我已經多次輸入這個評論,但它似乎消失了,非常感謝! – Intuos

0

這爲我工作:

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 
+0

謝謝,我會試試這個,但是我的頭腦在閱讀完這篇文章後開始變得非常驚訝,並且看到了user3598756的迴應,它正常工作:) – Intuos