シート内のすべてのセルを選択し、すべてをクリアすると空白のスプレッドシートが表示されます。それから私はE6とA1にいくつかのテキストを入力しました。それから、次のコードを実行しましたが、E7セルを選択しました。どのように変だ!私は何かを逃したのだろうかと思う。VBAでxlCellTypeLastCellを使用するにはどうすればよいですか?
Sub Macro1()
Cells.SpecialCells(xlCellTypeLastCell).Select
End Sub
シート内のすべてのセルを選択し、すべてをクリアすると空白のスプレッドシートが表示されます。それから私はE6とA1にいくつかのテキストを入力しました。それから、次のコードを実行しましたが、E7セルを選択しました。どのように変だ!私は何かを逃したのだろうかと思う。VBAでxlCellTypeLastCellを使用するにはどうすればよいですか?
Sub Macro1()
Cells.SpecialCells(xlCellTypeLastCell).Select
End Sub
それもいくつかのデータを削除した後に信頼性があるので、私の経験に基づいたデータを含むなど、最後のセル/行を見つけるための最善の解決策は、.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
おそらく、その[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
Range.SpecialCells methodのxlCellTypeLastCell 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への呼び出しが選択され、その後の後、選択されます。
[Excel.Application.Cells.SpecialCells(xlCellTypeLastCell)が最後のデータセルではなく、ワークシートの一番下を返す](http://stackoverflow.com/q/25110873/4088852)を参照してください。 – Comintern