2017-01-24 19 views
5

ここで間違っていることを誰かが助けてくれるならば、VBAの新機能です。 特定のテキストを探すようにループを実行しようとすると、ループが開始してから特定のポイントで停止します。 ループ私はそれが故に私のシートでここIfとDo Until Loop EXCEL VBA

がコードである場合は終了せず、エラーブロックIFに直面している55 イム以下のいくつかの値をコピーするようなものである:

Private Sub CommandButton3_Click() 
For y = 1 To 15 Step 5 
Dim x As Double 
Dim a As Double 
x = 1 
a = 55 
If Cells(x, y).Value = "Text1" Then 
Do Until Cells(x, y).Value = "Text2" 
Cells(a, y) = Cells(x, y).Value 
Cells(a, y + 1) = Cells(x, y + 1) 
x = x + 1 
a = a + 1 


Loop 


End Sub 
+1

:その場合は、以下のコードを試してみてください1. 'もし場合は終了し'ない細胞(X、Y).Valueの=「テキスト1」Then' '、' 'y = 1〜15までステップ5''次の'なし ' –

+0

もし私がifを使っていたら、私は終わりを使う必要はないと思ったのですか? –

+2

AFAIKあなたが 'If'文を1行に書くのは、' End If'を必要としないだけです。それでも、structredの 'If'文を使うのがベストプラクティスです。例えば、これは 'End If'を必要としません:' myVal = 1ならば、Cells(1,1).Value = "Okay" 'すべてが1行になります。 – BruceWayne

答えて

2

:前方の方法は、あなたがいないnextfor声明なしEnd Ififを持っています私はあなたが正しく理解している場合は、あなたが "Text2"を見つけるまで、列Aのセルをループし、最初の "Text1"を見つけてから行55以下にすべてのセルをコピーしたいと思う。あなたのコードをインデント場合は、2のエラーを見つけることができます

Private Sub CommandButton3_Click() 

Dim x As Long, y As Long 
Dim a As Long 
Dim LastRow As Long 

With Worksheets("Sheet1") '<-- modify "Sheet1" to your sheet's name 
    For y = 1 To 15 Step 5 

     x = 1 '<-- reset x and a (rows) inside the columns loop 
     a = 55 '<-- start pasting from row 55 

     LastRow = .Cells(.Rows.Count, y).End(xlUp).Row 
     While x <= LastRow '<-- loop until last row with data in Column y 
      If .Cells(x, y).Value Like "Text1" Then 
       Do Until .Cells(x, y).Value = "Text2" 
        .Cells(a, y).Value = .Cells(x, y).Value 
        .Cells(a, y + 1).Value = .Cells(x, y + 1).Value 
        x = x + 1 
        a = a + 1 
       Loop 
      End If 
      x = x + 1 
     Wend 
    Next y 
End With 

End Sub 
+0

ありがとうございました! 5列ごとにチェックするように編集するにはどうすればよいですか?私はループのために以下を追加しましたが、それは仕事をしませんでした。 y = 1から15までステップ5 –

+0

@IsraShaikh 5列ごとに正確なコピー貼り付けをしたいですか?列15まで? –

+0

はい@ShaiRado 最初に列1、列6などを列15まで実行します。 –

4

インデントがされると私が言及した問題に加えて

Private Sub CommandButton3_Click() 
    For y = 1 To 15 Step 5 
     Dim x As Double 
     Dim a As Double 
     x = 1 
     a = 55 
     If Cells(x, y).Value = "Text1" Then 
      Do Until Cells(x, y).Value = "Text2" 
       Cells(a, y) = Cells(x, y).Value 
       Cells(a, y + 1) = Cells(x, y + 1) 
       x = x + 1 
       a = a + 1 
      Loop 
     End If 
    Next y 
end sub 
+0

おかげでトム! 何らかの理由で何も出力されていません。 私が望むのは、最初の列から開始して、それを通過し、Text2を持つセルに到達するまで値をセル(a、1)にコピーするとText1を見つけることです。何か不足していますか? –

+0

Forループの前にDeclarationsも移動する必要があります。 – Rdster

+0

また、xとaはDoubleでなく、LongまたはIntegerでなければなりません。 –