4

ユーザーがExcelで列全体を選択し、列内のセルを操作する必要があるシナリオでは、空の行を効率的に無視するにはどうすればよいですか。カラム全体に100万個以上のセルがあります!助けてください!

範囲はから来ています

var range = Application.ActiveWindow.RangeSelection;

最終的にはを使って何かしたい

    for (int i = 0; i < range.Rows.Count; i++)

ここで、Rows.Countは空でない行数である必要があります...何かが含まれている最後のセルを見つける方法はありますか?

4

2 に答える 2

4

範囲内に空白があるかどうかに応じたいくつかのオプション(方法1を使用)、または最後に使用したセルを検索する場合(方法3を使用)

例としてアクティブシートの列Aを使用するこれらのオプション

1. SpecialCells

空のセルが本当に空の場合はSpecialCells、数式セル(で始まる=)や定数セルを操作するために使用できます

   Sub GetNonEmtpy()
    Dim rng1 As Range
    Dim rng2 As Range
    On Error Resume Next
    Set rng1 = Columns("A").SpecialCells(xlConstants)
    Set rng2 = Columns("A").SpecialCells(xlFormulas)
    On Error GoTo 0
    If Not rng1 Is Nothing Then MsgBox "Constants in " & rng1.Address(0, 0)
    If Not rng2 Is Nothing Then MsgBox "formula in " & rng2.Address(0, 0)
    'then work with these ranges
End Sub

2.最後のセルルックアップ

Sub LastCellLookup()
    Dim rng1 As Range
    Set rng1 = Cells(Rows.Count, "A").End(xlUp)
    If rng1.Row <> 1 Then
        MsgBox "last cell is " & rng1.Address(0, 0)
    Else
    'check first cell is not empty
        If Len(rng1.Value) > 0 Then
            MsgBox "last cell is " & rng1.Address(0, 0)
        Else
            MsgBox "row is blank"
        End If
    End If
End Sub

3.検索

Sub LastCellFind()
    Dim rng1 As Range
    Set rng1 = Columns("A").Find("*", [a1], xlValues, , xlByRows, xlPrevious)
    If Not rng1 Is Nothing Then MsgBox "Last cell is " & rng1.Address(0, 0)
End Sub
于 2012-06-07T00:43:58.650 に答える
3

ワークブックの一番下までループしてしまわないように、行数の上限を知りたいようです。

その場合は、Worksheet.UsedRangeこれまでに使用されたすべてのセルの範囲を含むプロパティを探している可能性があります (これには、値が入力されてから削除されたセルが含まれます)。

例えば、

Dim MaxUsedRow As Integer
MaxUsedRows = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
MsgBox MaxUsedRows

ワークブック全体で最後に使用された行のインデックスが表示されます。

于 2012-06-07T03:32:38.697 に答える