2016-08-09 16 views
-1

我對vba相當陌生,剛被卡住了。我有一個電子表格,其中包含從A1到BW50的信息。單元格AM7包含某些值=(讓說)「Mytext」。我想編寫一個代碼來查找值並清除包含此特定文本的列後面的所有列。我知道我可以「修復」列並清除它們,但那些列可能會改變,以及「Mytext」的位置,之後我希望一切都清除。我什麼也找不出來。請有任何想法嗎?清除包含某個值的單元格後的值的列中的所有內容,vba

謝謝

+3

遍歷細胞尋找「MYTEXT」,然後明確以下所有列。你有什麼特別的麻煩? –

回答

0

使用Find方法將可能是最快的:

Option Explicit 

Sub Clear() 

Dim rng As Range 
Dim str As String 

str = "text" 
Set rng = ActiveSheet.Cells.Find(What:=str, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) 
If Not rng Is Nothing Then 
    Range(Columns(rng.Offset(0, 1).Column), Columns(rng.Offset(0, 1).Column).End(xlToRight)).Delete 
Else 
    MsgBox "The value '" & str & "' was not found." 
End If 

End Sub 

注:LookAt:=xlWhole應,如果你正在尋找一個文本的任何部分,而不是更改爲LookAt:=xlPart全細胞價值。

+0

非常感謝Brian,你能否在if語句中解釋範圍?如何將Range的Row部分設置爲Column? – Totos

+0

我不確定我瞭解你的問題。你能澄清一下嗎?另外,如果我的答案適合您,請接受爲答案。 :-) – Brian

+0

對不起,這個網站的全新成員。我的意思是這部分:範圍(列(rng.Offset(0,1).Column),列(rng.Offset(0,1).Column).End(xlToRight))。刪除...我明白它刪除整列,但我不明白這個邏輯。這是否意味着它會將「我的文本」之後開始的所有列偏移到最後一個具有值的列?然後刪除所有這些? – Totos

0

你可以試試這個:

Option Explicit 

Sub ClearColumns() 
    Dim f As Range 
    Dim textToFind As String: textToFind = "Mytext" 

    With Worksheets("mySheet").Range("A1:BW50") '<--| change "mySheet" with your actual sheet name 
     Set f = .SpecialCells(XlCellType.xlCellTypeConstants, xlTextValues).Find(What:=textToFind, LookAt:=xlWhole, LookIn:=xlValues, MatchCase:=False) '<--| look for text in given range cells withtext values 
     If Not f Is Nothing Then .Range(f.Offset(, 1), .Columns(.Columns.Count)).Resize(.Rows.Count).ClearContents '<--| if text found then clear given range columns at the right of the found text 
    End With 
End Sub 
相關問題