2016-08-09 1 views
-1

私はかなりvbaを新しくしており、ちょうど立ち往生しています。私はA1からBW50までの情報を含むスプレッドシートを持っています。セルAM7には特定の値が含まれています=(言います) "Mytext"。値を見つけて、この特定のテキストを含む列の後に続くすべての列をクリアするコードを記述したいと思います。私は、列を「修正」してクリアすることができますが、これらの列は「Mytext」の位置だけでなく変更される可能性があることを知っています。私は何かを理解することはできません。どんなアイデアですか? 特定の値、vbaを含むセルの後に値を含む列のすべての内容をクリアします

はおそらく最速となりますfindメソッドを使用します

+3

ループ「のMyText」と、クリア以下のすべての列を探しているセルを介して。特にどの部分に問題がありますか? –

答えて

0

ありがとう:

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:=xlWholeLookAt:=xlPartに変更する必要があります全体の細胞価値。

+0

ありがとうBrian、if文で範囲を教えてくれますか?範囲の列部分をどのようにして列に設定できますか? – Totos

+0

あなたの質問が分かりません。あなたは明確にしてくださいますか?また、私の答えがあなたのために働いた場合、答えとして受け入れてください。 :-) – Brian

+0

申し訳ありませんが、このサイトの全く新しいメンバーです。 Range(Column.Offset(0、1).Column)、Columns(rng.Offset(0,1).Column).End(xlToRight))を削除します。列全体が、私は論理を理解していない。それは、 "my text"の後に始まるすべての列を値を持つ最後の列にオフセットすることを意味しますか?それらのすべてを削除しますか? – 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 
関連する問題