2017-02-06 17 views
1

ここで私は新しく、Excel VBAを使用してワークシート内の最後に使用されたセルを返すことを検討しています。 シート内の最後に使用されたセル

I'vv

Error in finding last used cell in VBAを見て)それは私が持っている二つの問題に答えていませんでした:

  1. .Cells.Find(...).Row方法は私のコードでWAY時間がかかりすぎます。

  2. 「最後に使用されたセル」という意味は、奇妙なことがあります。セルは空白にすることができます。最後に使用したセルがある列を取り出し、最後に使用したセルがある行とペアにしたいと思います。

を説明するには、次のシートが A1:C3D2B4内のデータを除いて空であると仮定します。 ( Exhibit 1

私が興味を持っている最後のセルはD4です。シート内のすべてのデータを含む最後のセルをシートに入れたいからです。

enter image description here

今、私は私が探しているものを説明してきたことを、誰もが別の信頼できる方法速くcells.find実行を作るためにどのように

  • または
  • のいずれかについての提案を提供することができますワークシートの「最後のセル」を見つけるには?

ありがとうございます!

+0

最後の行*と*最後の列を見つけて、それらを範囲に結合してください。 – Comintern

+0

ありがとうComintern。 これは私が現在「.Cells.Find()」でやっていることですが、時間がかかりすぎています。思考? – Tuckertubaman

+1

コードを見ずにはありません。 – Comintern

答えて

3

これを試しましたか?あなたの例のための

Dim r As Range 
Set r = Sheet1.UsedRange.SpecialCells(xlCellTypeLastCell) 
Debug.Print r.Address 

出力:

$ Dは$ 4

UsedRangeは常に実際に使用データの範囲と一致しないことが知られています。

Dim r As Range 
With Sheet1.Range("A1").CurrentRegion 
    Set r = Sheet1.Cells(.Rows.count, .Columns.count) 
End With 
Debug.Print r.Address 

もデータは多分これ、A1では起動しない場合:行このセルを識別するために、列の両方によって

With Sheet1.Cells.Find("*").CurrentRegion 
1

使用Findいくつかの問題を回避するには、CurrentRegionを使用することです。

Sub GetLastCellRange() 
     Dim rng1 As Range 
     Dim rng2 As Range 
     Dim rng3 As Range 
     Set rng1 = Cells.Find("*", [a1], xlFormulas, , xlByRows, xlPrevious) 
     Set rng2 = Cells.Find("*", [a1], xlFormulas, , xlByColumns, xlPrevious) 
     If Not rng1 Is Nothing Then 
      Set rng3 = Range([a1], Cells(rng1.Row, rng2.Column)) 
      MsgBox "Range is " & rng3.Address(0, 0) 
      'if you need to actual select the range (which is rare in VBA) 
      Application.Goto rng3 
     Else 
      MsgBox "sheet is blank", vbCritical 
     End If 
    End Sub 
-1

答えは非常に有効ですが、私はSpecialCells、CurrentRegionなどを使用して慎重に扱っています。

ほとんどの時間は動作しますが、私の経験では100%信頼できません。

たとえば、データに空の列や行などがあると、CurrentRegionはすべてのデータをピックアップしません。

私の意見では、alswaysはあなたのデータにヘッダーを使用することです。 次に、すべてのヘッダーを列挙し、その列で最後に使用された行を見つけることができます。 次に、使用される最大の行を決定し、データ範囲を定義することができます。

Btw指定した列の最後のセルを選択すると、Range.End(xlUp)を使用すると、ループなしでその列の最後に使用された行をすばやく特定できます。

希望に役立ちます。

関連する問題