2017-12-04 11 views
1

セルの値に基づいていくつかの範囲を選択したいのですが、それぞれ異なる列にある可能性があります。範囲のアドレスを見つける

私の最初の考えは以下のようなものでしたが、それが正しいのかどうかはわかりません。

Sub RangeBetween() 

Dim rng1 As Range, rng2 As Range 
Dim totalRange As Range 
Dim c1, c2 As Integer 

c1 = 1 
    Do Until Name = "A" 
     Name = Cells(1, c1) 
     c1 = c1 + 1 
    Loop 
someA= c1 - 1 

c2 = 1 
    Do Until Name = "B" 
     Name = Cells(1, c2) 
     c2 = c2 + 1 
    Loop 
someB= c2 - 1 

Set rng1 = Range("???") 
Set rng2 = Range("???") 

Set totalRange = Range(rng1.Address & ":" & rng2.Address) 
    totalRange .Select 
    End Sub 

おかげ

+0

C1はバリアントとして暗黙的に宣言されています。 Dim C1を長くします(そしてDim C2は長く、Integerより長く優先されます)。また、列Aのすべてをループする可能性があります。これはあなたの意図ですか? – QHarr

+0

Range.Rind()メソッドを調べてください。範囲オブジェクトを返します。 –

+0

申し訳ありませんRange.Find()メソッド –

答えて

3

それとも、マッチを(使用することができます)

Sub RangeBetween() 


Dim totalRange As Range 
Dim c1 As Long, c2 As Long 


c1 = 0 
c2 = 0 
With Worksheets("Sheet1") 'Change to your worksheet 
    On Error Resume Next 
     c1 = Application.WorksheetFunction.Match("A", .Rows(1), 0) 
     c2 = Application.WorksheetFunction.Match("B", .Rows(1), 0) 
    On Error GoTo 0 

    If c1 > 0 And c2 > 0 Then 
     Set totalRange = .Range(.Cells(1, c1), .Cells(1, c2)) 
     totalRange.Select 
    Else 
     MsgBox "One or both items not found in range" 
    End If 
End With 

End Sub 
+0

それはうまくいきますが、私が次にやりたいことがうまくいくかどうかはわかりません。 totalRange(Selection、Selection.End(xlDown))を使用しようとしたためです。選択すると、以下のすべてのデータが選択され、動作していません。私がそれをどうやってできるかわからない。 –

+0

新しい質問が新しい投稿を取得します。これはあなたが尋ねた質問に答えました。 –

+0

@ YowE3Kあなたは正しいです、私は間違った仮定をしました、それは十分に興味深いことに、修正されている、OPはうまく動作すると述べた。 ?????? –

関連する問題