2016-03-25 12 views
-1

シート内のすべてのセルを選択し、すべてをクリアすると空白のスプレッドシートが表示されます。それから私はE6とA1にいくつかのテキストを入力しました。それから、次のコードを実行しましたが、E7セルを選択しました。どのように変だ!私は何かを逃したのだろうかと思う。VBAでxlCellTypeLastCellを使用するにはどうすればよいですか?

Sub Macro1() 
    Cells.SpecialCells(xlCellTypeLastCell).Select 
End Sub 
+2

[Excel.Application.Cells.SpecialCells(xlCellTypeLastCell)が最後のデータセルではなく、ワークシートの一番下を返す](http://stackoverflow.com/q/25110873/4088852)を参照してください。 – Comintern

答えて

0

それもいくつかのデータを削除した後に信頼性があるので、私の経験に基づいたデータを含むなど、最後のセル/行を見つけるための最善の解決策は、.find方法です。唯一の欠点は、隠れた行を検出しないことです。

以下のコードは、5番目の列(列E)のデータを含む最後の行を返します。シート全体のデータを含む最後の行の番号を取得する場合は、「列(5)」を「セル」に置き換えます。

選択はVBAでは悪いことです(遅い - 大きなデータセットでは使用できず、コーディングでは非透過)。私のコードからRange( "E" & TheLastRow)としてセルを参照することができます。

Option Explicit 

Sub Macro1() 
Dim TheLastRow as long 
    TheLastRow = Columns(5).Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
End Sub 
+1

おそらく、その[Range.Findメソッド](https://msdn.microsoft.com/en-us/library/office/ff839746.aspx)のパラメータとして 'After:= Cells(1、5)'を含めることをお勧めします)。私はあなたが[ActiveCellプロパティ](https://msdn.microsoft.com/en-us/library/office/ff193314.aspx)に頼ってほしいと思っていません。 – Jeeped

1

Range.SpecialCells methodxlCellTypeLastCell propertyをリセットするために、すべて自身でWorksheet.UsedRange propertyを呼び出します。

Sub Macro1() 
    Range("E7") = "abc" 
    Cells.Clear 
    Range("E5") = "xyz" 
    Cells.SpecialCells(xlCellTypeLastCell).Select 
    ActiveSheet.UsedRange 
    Cells.SpecialCells(xlCellTypeLastCell).Select 
End Sub 

あなたは[F8]でそのステップスルーした場合、最初のE7は.UsedRange、E5への呼び出しが選択され、その後の後、選択されます。

関連する問題