2016-09-30 3 views
1

私はこれについて多くの投稿があることを知っていますが、それらのどれも実用的な例がないので、避けなければならない理由を理解します。".Select"を使用しないでExcel-VBAでコーディングする - 実際の例

私はこのテーブルを持っている:私は何をしたいか enter image description here

は、ヘッダーとボトムを選択せず​​に、私のテーブルのデータ範囲を選択することです。

だから、これは私が思い付いたコードです:

Dim MyDataFirstCell 
Dim MyDataLastCell 

'Establish the Data Area 

    ActiveSheet.Range("B1").Select ' My Table starts on Column B 


    'In the example the table starts at B4, but the user could change for B3, B5, etc. So I want to assure it will find the table. 
    ActiveCell.Offset(1, 0).Select 
    Do While IsEmpty(ActiveCell) 
    DoEvents 
    ActiveCell.Offset(1, 0).Select 
    Loop 

'The first cell (Header) has been found. I need to select the first cel of my data, so: 

    ActiveCell.Offset(1, 0).Select 
    DoEvents 
    MyDataFirstCell = ActiveCell.Address 'Get the first cell address of Data Area 

'Now I need to select the last cell of my table: 

    Selection.End(xlDown).Select 'Get to Bottom Row of the data 
    Selection.End(xlToRight).Select 'Get to the last Column and data cell by heading to the righthand end 
    ActiveCell.Offset(-1, 0).Select ' Select the correct last cell 
    MyDataLastCell = ActiveCell.Address 'Get the Cell address of the last cell of my data area 

'Now I want to select this area: 

Range(MyDataFirstCell & ":" & MyDataLastCell).Select 

あなたは私に「.Select」を使用せずにこれをコーディングするための理想的な方法を示してもらえますか?

Aditional質問:

  • 私はアルファベットの名前でソート同様のテーブルを持っています。どのように最適化されたコードに従って、並べ替えを行うことができますか?
  • 同じテーブルを2行または3行下に配置している場合、同時にソートを行うことは可能ですか、それとも2つの異なるマクロを作成する必要がありますか?

ご協力いただきありがとうございます。繰り返しますが、投稿されたものは本当に私を助けませんでした。

+6

をすべての時間を参照され非常に良いほとんどキヤノンのポストがあります:http://stackoverflow.com/questions/10714251/how-to-avoid -using-select-in-excel-vba-macros –

+2

また、[Last Used Cell](http://stackoverflow.com/questions/11169445/error-in-finding-html)を見つける最善の方法を検索することもできます。最後に使用されたcell-in-vba「Canon Answer」も参照)。 –

+0

最後のセルを見つけるには:http://stackoverflow.com/questions/11169445/error-in-finding-last-used-cell-in-vba –

答えて

2

列からの二つのリンクを組み合わせる:

Dim lastrow As Long 
Dim lastcolumn As Long 
Dim firstrow As Long 
Dim ws As Worksheet 
Dim rng As Range 

Set ws = ThisWorkbook.Worksheets("Sheet1") ' Change to your sheet 


With ws 
    firstrow = .Cells(1, 2).End(xlDown).Row + 1 
    lastrow = .Cells(.Rows.Count, 2).End(xlUp).Row - 1 
    lastcolumn = .Cells(firstrow, .Columns.Count).End(xlToLeft).Column 
    Set rng = .Range(.Cells(firstrow, 2), .Cells(lastrow, lastcolumn)) 
End With 

MsgBox rng.Address 
+0

"ws = ThisWorkbook.Worksheets(" Sheet1 ")でSetを追加しなければなりません。それは間違いなく便利でしたが、それで私のヘッダを選択しました。それがどのように機能するのか詳しく説明してみることができますか?ありがとうございました!!! –

+0

'End'はctrlを打つように働き、方向が規定されています。私は一番下の方に行き、最初に占領されていたセルまたは一番右に来て、最初に占領されたセルに戻ります。ヘッダー行を含めないようにコードを編集しました。それがあなたのために働く場合は、答えのチェックマークをクリックしてください。 –

+0

これでヘッダーは取得されませんが、テーブルの範囲もオフになります。すでに以前はコメントを編集しようとしましたが、できませんでした。 A5:B9が実際にA5:F9のときに表示されています。 –

関連する問題