2016-06-14 2 views
0

VBAの巨大なファンですが、これを行うためには、大量の知識が必要です。 いくつかのコードを見つけようとしましたが、Googleで成功しましたが、成功しませんでした。「アルファ」を見つけて「ベータ」を見つけ、「アルファ」と「ベータ」の間の行を削除し、「ベータ」から「アルファ」までの行を維持するループ

"もの":

  • は私が見つけるためにしようとしてきた20000(っぽい、値は常に変化している)

を行へダウン、Dまでの列Aからの大量のデータを持っていますA1で始まり、 "アルパ"で部分セルを見つけて行を保持し、 "ベータ"で部分セルを見つけて行を保持する方法。その後、すべての行を削除する。次に、「ベータ」行とすべてのデータを次の「アルパ」まで保存します。ところで、私は小さなexmple

A1を投稿することができ、必要に応じて途中

には、いくつかの空白を持っている、常に同じ部分セル値(アルファ)と

エドガーを開始します。

+2

サンプルが理想的でしょう。また、すでに動作していないサンプルコードがあれば最適です。あなたが試して解決できなかったことは、誰かにあなたのためにコードを一から書くように頼むよりも、それを修正する方法についてより多くの回答を得るでしょう。 – Rodger

答えて

1

EDITED私はあなたの問題を誤解しています。試してみてください:

Private Sub DeleteRow() 
Dim iAlpha As Integer 
Dim iBeta As Integer 
Dim lLastRow As Long 
Dim k As Integer, i As Integer 

lLastRow = Worksheets("MyDataSheet").Cells(65536, 1).End(xlUp).Row 

k = 1 

For i = 1 To lLastRow 
    If InStr(Worksheets("MyDataSheet").Cells(k, 1).Value, "Alpha") > 0 Then 
     iAlpha = k 'get row containing Alpha 
    ElseIf InStr(Worksheets("MyDataSheet").Cells(k, 1).Value, "Beta") > 0 Then 
     iBeta = k 'get row containing Beta 
     For j = (iAlpha + 1) To (iBeta - 1) 'Delete rows between Alpha and Beta 
      Worksheets("MyDataSheet").Rows(iAlpha + 1).EntireRow.Delete 
     Next 
     k = iAlpha + 1 
    End If 
    k = k + 1 
    lLastRow = lLastRow - iBeta + iAlpha + 1 
Next 
End Sub 
+0

うわー、私は答えを複雑にする方法を超えていた。これははるかにエレガントです。 – Rodger

+0

うん、私の元のコードはエレガントでしたが、それは質問に答えなかった:)。今はあまりエレガントではありませんが、仕事をしていると思います。 – CMArg

+1

私はそれが答えたと思った。最初のアルファの後に最初のベータの前に別のアルファがある場合は、アルファやベータのいずれもない行を削除した以前のコードと比べて、これも削除されます。私はそれが良いことではないと思っていましたが、これは彼らが求めたより多くのものです。 – Rodger

関連する問題