2017-02-16 20 views
1

VBAを使用してExcelマクロで可変範囲を定義したいとします。最初のセルは常にA25ですが、最後のセルは収集されたデータの数に応じて移動しています。これはE35、E58などとすることができます。Visual Basic for Excelの可変範囲

+0

これを変数に追加するには、contiguous rangeを使用します。try rr = range( "a25")。currentregion、文字列として範囲を取得するtry str = range( "a25")。currentregion.address – Zerk

+0

収集していますか? A25で始まる領域のデータ、またはその領域に書き込もうとしていますか?前者の場合は、Zerkが示したようにRange.CurrentRegionがおそらく最善の策です。 – SgtStens

答えて

0

範囲を2つのリミットセルとして定義できます。あなたがワークシート「WS」で作業しているとしましょう:

オプション1

Dim rng As Range 
Dim cl1 As Range: Set cl1 = ws.Range("A25") 
Dim cl2 As Range 

Set cl2 = ws.Range("E35") 'Or something else' 
Set rng = ws.Range(cl1, cl2) 
1

は、2つのオプションがあり、あなたが定義するために探しているRangeが連続している(以下のスクリーンショットを参照してください):

enter image description here

簡単なアプローチが行います。

Option Explicit 

Sub DefRange() 

Dim Rng As Range  

With Worksheets("Sheet1") '<-- modify "Sheet" to your sheet's name 
    Set Rng = .Range("A25").CurrentRegion 

    Debug.Print Rng.Address '<-- for debug: will show A25:E35  
End With 

End Sub 

オプション2:範囲あなたが定義するために探しているが、中間の(下のスクリーンショット)で、空行を持っています

enter image description here

、その後、従来の方法は間違った範囲となります

Option Explicit 

Sub DefRange() 

Dim Rng As Range 

Dim LastRow As Long 
Dim LastCol As Long 

With Worksheets("Sheet1") '<-- modify "Sheet" to your sheet's name 
    Set Rng = .Range("A25").CurrentRegion 
    Debug.Print Rng.Address '<-- for debug: will show A25:E35 ***WRONG*** 

    'Search for any entry, by searching backwards by Rows. 
    LastRow = .Cells.Find(What:="*", After:=.Range("A25"), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 

    'Search for any entry, by searching backwards by Columns. 
    LastCol = .Cells.Find(What:="*", After:=.Range("A25"), SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column 

    Set Rng = .Range(.Cells(25, "A"), .Cells(LastRow, LastCol)) 
    Debug.Print Rng.Address '<-- for debug: will show A25:F37 ***CORRECT*** 

End With 

End Sub 
+0

@Eric Justusここで答えを試してみましたか?彼らは働いたのですか? –

0

だけで、E列内の行をカウント

Sub Button1_Click() 
    Dim LstRw As Long 
    Dim Rng As Range, x 

    LstRw = Cells(Rows.Count, "E").End(xlUp).Row 
    x = IIf(LstRw > 25, LstRw, 25) 
    Set Rng = Range("A25:E" & x) 
    Rng.Select 
End Sub 
+0

あなたのおかげで、うまくいきました。 –