2017-11-10 18 views
-2

どのようにループをコーディングするか、すべての可能性を一度に選択できますか? "In"は選択された範囲の最初のもので、最初のLateまで下がり、同様の範囲をリストの下にコピーする必要があります。 フィードバックをお寄せくださいすべての範囲を一度に選択するVba

SelectBetween() 
    Dim findrow As Long, findrow2 As Long 
    On Error GoTo Err 
    findrow = Range("A:A").Find("In", Range("A1")).Row 
    findrow2 = Range("A:A").Find("Late", Range("A" & findrow)).row 
    Range("A" & findrow & ":A" & findrow2).copy 
    Exit Sub 
Err: 
MsgBox "Cells unspecified" 
End Sub 
+2

この質問にお答えするには、いくらかの推測が必要です。 **あなたの質問をより鮮明に編集してください** – CallumDA

+0

セルA2とA10の両方に「In」が含まれ、セルA8とA16の両方に「Late」が含まれている場合、A2:A8、A2:A16、A8: A10、A10:A16(すなわちA2:A16)? – YowE3K

答えて

1

ニースを試してみてください。ちょっとした提案:Findメソッドは範囲オブジェクトを返します。それはあなたにいくつかの利点を与えることができます。

Private Sub SelectBetween() 
    Dim firstInCell, tmpInCell, firstLateCell, tmpLateCell, copyRange As Range 
    On Error GoTo Err 
    Set firstInCell = Range("A:A").Find("In", Range("A1")) 
    Set firstLateCell = Range("A:A").Find("Late", Range("A1")) 

    Set tmpInCell = firstInCell 
    Set tmpLateCell = firstLateCell 
    Set copyRange = Range(tmpInCell, tmpLateCell) 

    Do 
     Set tmpInCell = Range("A:A").Find("In", tmpInCell) 
     Set tmpLateCell = Range("A:A").Find("Late", tmpInCell) 
     Set copyRange = Union(copyRange, Range(tmpInCell, tmpLateCell)) 
    Loop While tmpInCell.Address <> firstInCell.Address 

    copyRange.Copy 
    Exit Sub 
Err: 
    MsgBox "Cells unspecified" 
End Sub 

ロジック:最初のターゲットを見つけ、firstInCellfirstLateCellにそれらを格納します。そして私は一致したすべての範囲を保存するためにcopyRangeを構築しました。 Find関数には、何も見つからない場合に最初にスクロールする機能があります。そのため、結果を確認してループが終了したかどうかを確認できます。

+0

詳細な回答ありがとうございます。さて、もう一方の端で、どのようにデータを保存せずに行を削除するための削除を実装するのですか?すべてのご協力ありがとうございます – Fitbit

+0

行番号がある場合は、行(i).Deleteで削除することができます。いくつかの行を削除するための最良の方法は、最初に「連合」し、それらを一度に削除することです。それ以外の場合は、1つずつ削除するのに多くの時間がかかります。 – newacc2240

+0

私はもう一度、あなたの助けに感謝していただきありがとうございます。 – Fitbit

関連する問題