2016-06-01 5 views
2

は、余分なセルが埋め込まれたシートから最初の完全空の行(値なし、数式、空白なし)を返す関数が必要です。 1つの列を記入する必要はありません。シート上で最初に完全に空の行を見つけよう

私はこれを試してみましたが、私もそれをコンパイルするために取得することができます。

Public Donations As Worksheet 
Set Donations = Sheets("Sheet2") 

Function getEmptyRow() As Long 
    Dim lastCol As Long, lastRow As Long, maxRow As Long 
    Dim col As Long 
    Dim r As Variant 

    lastCol = Donations.Cells(1, Columns.Count).End(xlToLeft).Column 
    For col = 1 To lastCol Step 1 
     lastRow = Donations.Cells(Rows.Count, col).End(xlUp).row 
     maxRow = Application.WorksheetFunction.max(maxRow, lastRow) 
    Next col 
    getEmptyRow = maxRow + 1 
End Function 

答えて

3

(私はあなたを教えてみましょうとても便利です)EntireRowを使用し、A1から始まる行ごとにカウントは1つの非常に基本的な方法でありますこれを行う。

これは、イミディエイトウィンドウであなたを教えてくれます:

Sub findemptyrow()      '''Psuedo Code 
Application.ScreenUpdating = False  'turns off annoying blinky 
Range("a1").Activate      'start at beginning 
While a <> 1        'keep going 
    If Application.CountA(ActiveCell.EntireRow) = 0 Then 'is it blank? 
    Debug.Print "Row " & (ActiveCell.Row) & " is blank." 'it is 
    a = 1         'stop going 
    End If 
    ActiveCell.Offset(1).Activate   'next cell 
Wend          'do it all over again 
Application.ScreenUpdating = True   'back to normal settings 
End Sub 

は、偶数行の10K年代で、ScreenUpdatingがFalseこの速くなります作ります。

0

Range.Find methodが最も適切な方法です。ワイルドカード(What:=Chr(42))を探し、A1(After:=.Cells(1, 1)、後ろ向き検索(SearchDirection:=xlPrevious)、行ごとの検索(SearchOrder:=xlByRows).Row)、最初の値または式が見つかるので、式(LookIn:=xlFormulas)を見てください; xlValues式が空の文字列("")を返している場合に正確でないかもしれない。

Option Explicit 
Public Donations As Worksheet 

Sub test() 
    Set Donations = Worksheets("Sheet2") 
    Debug.Print getNextEmptyRow(Donations) 
End Sub 

Function getNextEmptyRow(ws As Worksheet) 
    With ws.Cells 
     getNextEmptyRow = .Find(What:=Chr(42), After:=.Cells(1, 1), LookIn:=xlFormulas, _ 
           SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row + 1 
    End With 
End Function 

あなたはモジュールコードシートの宣言領域にDonationsを設定することはできません。の宣言領域(上部)のパブリック変数を宣言しますコードシートではなく、変数をサブ関数または関数に設定します。

'次の空の行'が必要な場合に返される行にdd 1。

+0

を? find関数のWhatパラメータは、空のセルを検索するときに文字 '*' - chr(42)です。 –

+0

最初から空白の行を取得するには、一番下から開始し、最初に入力されたセルの行ごとに行番号を1つ追加します。これは、最初から空白の行を見つけるために上から作業することと必ずしも同じではありません。タイトルは後者を意味するが、OPのコードは前者を探していた。 – Jeeped

0

`レンジのSpecialCells方法使用してちょうど別の代替:私は何をしないのです

Option Explicit 

Sub Test() 
    Debug.Print "Last row on Sheet1 is: " & FirstCompletelyEmptyRow(Sheet1) 
End Sub 

Function FirstCompletelyEmptyRow(ByRef wsTarget As Worksheet) As Long 
    FirstCompletelyEmptyRow = wsTarget.Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1 
End Function 
関連する問題