2016-10-12 1 views
0

現在、ワークシート上の最後の行を見つけ、定義された最後の列と開始セルとペアにしてから、印刷用にすべてを選択するマクロがあります。VBA、LastRowでのLastColの検索

Set Sheet = Worksheets("Summary PNL (bpnl by bucket)") 
Set StartCell = Range("A9") 
LastRow = Sheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
Sheet.Range("A9:I" & LastRow).Select 

私は現在、動的行に加えて動的列も扱っています。理論的にはこれは難しいものではありませんが、行9は列A(範囲A9)にのみデータを持ち、BからI(例の終了列)はその行で空白です。どんな洞察?

+0

あなたは 'A9'とCtrlキーを押しながらAをクリックすることができます。もしあなたが望む範囲を選択するならば、Range( "A9")を使うことができます。CurrentRegion.Select in VBA – Slai

答えて

-1

最後の行を探すのではなく、最後のセルを探します。次に、最初のセルと最後のセルの間のすべてを選択するだけです。

シートに何もない場合、行0と列0(Method 'Range' of object '_Worksheet' failed)を参照しようとすると失敗します。

私は、最後のセルを最初に見つけ出すための関数を使うことを勧めます - シートが空であっても範囲オブジェクトを返す関数を使うことをお勧めします。ここにはたくさんの例があります。

Sub test() 

    Dim Sheet As Worksheet 
    Dim StartCell As Range 
    Dim LastCell As Range 

    Set Sheet = Worksheets("Summary PNL (bpnl by bucket)") 
    Set StartCell = Range("A9") 
    Set LastCell = Sheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious) 
    Sheet.Range(StartCell, LastCell).Select 

End Sub 
+0

これは良い点です。ただし、シートの他のセクションに無関係のコンテンツがある場合はどうすればいいですか?例えば空白の公式であろうと空のピボットであろうと。この方法はシートが一種の「バニラ」であると仮定すると完璧です。 – EnergyHOU

+0

私は一連のxlLeft xlUpを使うことができると思いますが、それは明らかに理想的ではありません – EnergyHOU

0

あなたはあなたが使用することができ、空でもunformatedでないすべてのセル、印刷したいことが確実な場合:

Worksheets("Summary PNL (bpnl by bucket)").UsedRange.Select 

使用されているすべての範囲を選択します。とにかく

、最後のセルを見つけるために、あなたはこのようにSpecialCellsメソッドでこのプロパティを使用することができます。

LastRow = Worksheets("Summary PNL (bpnl by bucket)").UsedRange.SpecialCells(xlCellTypeLastCell).row