4

cell で始まるオートフィルター範囲を含むワークシートがありますB3。列Aにはいくつかのマクロ ボタンが含まれていますが、実際には空白です。上の 2 行には、メイン範囲のデータに関する情報が含まれています。

.EndVBA では、ワークシートの最後の行を決定するための標準的な方法と思われるものを使用しています (この場合、単一の列の方法に頼ることはできません)。

LastRow = Activesheet.Cells.Find("*",SearchOrder:=xlByRows,SearchDirection:=xlPrevious).Row

ただし、数千行のデータがある場合でも、値が 1 になることがあります。フィルターが設定されている場合にのみこれを行うようです (ただし、データが含まれる行がまだ表示されています) が、それでも常に発生するとは限らず、パターンが表示されません。

私は他の解決策があることを知っています - 私はUsedRange代わりにテクニックに変更しましたが、この特定の方法が失敗するのは非常にイライラします。

なぜこれが起こるのか誰にも分かりますか?

4

8 に答える 8

1

グレッグの答えを使用することを考えましたが、すべての列の最上位の行を見つけるためにループしましたか? 何かのようなもの:

LastRow = 1
With ActiveSheet
   For i = 1 to .UsedRange.Columns.Count
      If .Cells(.Rows.Count, i).End(xlUp).Row > LastRow Then
         LastRow = .Cells(.Rows.Count, i).End(xlUp).Row
      EndIf
   Next i
End With

このソリューションでは、下の行にランダムに入力された空白の値が許可されます。UsedRange は、これまでに編集された中で最も外側にある行/列を返すので注意が必要です (現在空白であっても)。私の経験では、Range.End(xlUp) は、ワークシートで Ctrl-Up を押した場合に期待どおりに動作します。これはもう少し予測可能です。

.Find の使用に設定されている場合は、After:=[A1] 引数を調べてみてください。この関数の特異性についてはまだ調べていませんが、この問題を考えるとここから始めます。

于 2013-03-13T00:51:38.693 に答える
1

今朝、まったく同じ問題に直面しました。

最初は、「.find」機能が不安定であると確信していました。

しかし、しばらくいじった後、シートの深すぎる行番号に空でないセルが見つかりました。それは1,000または10,000などだったと思います。私はそれを削除し、「.find」は再び機能します。おそらく、特定の内部 VBA 変数の制限が十分に大きくありません。

これを行う:

1) CTRL + END を押します

2) 空でないセルを特定し、これが誤って入力されたと仮定して削除します。

于 2016-07-28T21:20:07.990 に答える
1

これを試して...

Dim LastRow as long

With ActiveSheet
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With

これにより、列 A の最後の行が取得されます。

于 2013-03-12T19:03:05.373 に答える
1

とは異なり、非表示のセル (フィルター処理されたセルではない) がこの引数で検出されるため、Findlookin を指定して使用することをお勧めします。XlFormulasXlValues

Sub Test()
Dim rng1 As Range
Set rng1 = ActiveSheet.Cells.Find("*", [a1], xlFormulas, , xlByRows, xlPrevious)
If Not rng1 Is Nothing Then MsgBox rng1.Row
End Sub
于 2014-12-20T02:25:13.833 に答える
0

どうですか:

with activesheet.usedrange
    LastRow = .rows.count
end with

フィリップ

于 2013-03-12T21:46:01.503 に答える
0

以下のコードを試してください:

Sub GetColA_LastRow()
    Dim ws As Worksheet
    Dim lRow As Long

    Set ws = ThisWorkbook.Sheets("Sheet1")

    With ws
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row
    End With

    MsgBox "The last row which has data in Col A of Sheet1 is " & lRow
End Sub

また

sub getLastRow()
 dim lastRow as long
 lastRow = Sheets("sheet1").Range("A65000").End(xlUp).Row

end sub

詳細については、リンク http://www.siddharthrout.com/2012/10/02/find-last-row-in-an-excel-sheetvbavb-net/にアクセスすることもできます。

コメントの後にコードを更新します。

Sub getLastRow()

    Dim rng As Range, lastRow As Long
    Set rng = Cells.Find("mango") ' here you enter whatever you want to find

    If Not rng Is Nothing Then
        lastRow = Sheets("sheet1").Cells(65000, rng.Column).End(xlUp).Row
    End If

End Sub
于 2013-03-12T19:16:59.530 に答える