2016-05-10 5 views
1

以下のコードで助けが必要です。私がしようとしているのは、アクティブセル(任意のセルでもよい)から始めて、右(=最初の列)+すべてのセルを左(=最後の列)+上のすべてのセル強調表示された行+下のすべてのセルが強調表示された行まで表示されます。添付データを参照してくださいSample Dataアクティブセルから開始するセルの範囲を選択してください

例として、アクティブセルがG6の場合、コードはA2からJ7の範囲全体を選択します。同様に、アクティブなセルがF12の場合、コードはA11からJ13の範囲全体を選択します。

Sub sel() 
Dim LastCol As Long 
With ActiveSheet 
    LastCol = .Range("A1").SpecialCells(xlCellTypeLastCell).Column 
Dim FirstCol As Long 
With ActiveSheet 
LastVrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 
Range(Cells(WorksheetFunction.Max(1, Selection.Row, LastVrow), _ 
    WorksheetFunction.Max(1, Selection.Column, LastCol)), _ 
    Cells(WorksheetFunction.Min(Selection.Worksheet.Rows.Count, _ 
    Selection.Row), _ 
    WorksheetFunction.Min(Selection.Worksheet.Columns.Count, _ 
    Selection.Column, FirstCol))).Select 
End With 
End With 
End With 
End Sub 
+0

灰色の行は何もないように本当に空ですか? –

+0

Scott - はい、本当に空です。 –

+0

@ SamM、G6がアクティブなセルの場合、範囲A5からJ7を選択する必要があります。 – Kellsens

答えて

2

これは、あなたがやりたいことになります。

Sub foo2() 
Dim rng As Range 
Dim st As Long 
Dim fin As Long 
With Selection 
    If Cells(.Row - 1, 1) <> "" Then 
     st = Cells(.Row, 1).End(xlUp).Row 
     If st = 1 Then st = 2 
    Else 
     st = .Row 
    End If 
    If Cells(.Row + 1, 1) <> "" Then 
     fin = Cells(.Row, 1).End(xlDown).Row 
    Else 
     fin = .Row 
    End If 
    Set rng = Range("A" & st & ":J" & fin) 

End With 
rng.Select 
End Sub 
+0

Hehehe私はScott Cranerとほぼ同じコードを書いていたので、私は今私の答えを取り除くべきです。開発は魔法です。 – Kellsens

0

多分これを試すことができます。アクティブセルがどこにあっても、最初にそれを最初の位置に移動してから、データブロック全体を選択します。

Sub Sel() 

    Selection.End(xlToLeft).Select 
    Selection.End(xlUp).Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Range(Selection, Selection.End(xlToRight)).Select 

End Sub 
+0

@swirdings - コードをありがとう。私はちょうどそれを実行し、コードはすべての方向の最初の空白のセルまでデータを選択しています。最初のセルとアクティブセルの間に空白のセルがある場合、その列までデータを選択し、最初または最後の列を超えてデータを拡張しません。 –

+0

ありがとう、スコットとケルセン。私はあなたのすべての助けに感謝します。両方のコードがうまくいきました。答えとしてマークするだけのようです。 –

1

をあなたのテンプレートを考慮し、多分これが助けることができる:

sub sel() 
    dim selectRowS as integer 
    dim selectRowE as integer  

    with Selection  

     selectRowS = .row 
     selectRowE = .row 

     If Cells(.row + 1, 1) <> "" 
      selectRowE = .end(xlEnd).row 
     End If 
     If Cells(.row - 1, 1) <> "" 
      if .row - 1 = 1 then 
       selectRowS = 2 
      Else 
       selectRowS = .end(xlUp).row 
      End if 
     End If 

     Range(Cells(selectRowS,1),Cells(selectRowE,10)).select 

    End With 
End Sub 

P.S.を申し訳ありませんが、私の英語

+0

それを残すと、将来的に他の人に役立つかもしれない他の基本的な方法が示されます。 –

関連する問題