簡體   English   中英

VBA從行X復制到第一個空白單元格

[英]VBA to copy from row X down to the first blank cell

我有一個每天更新的 Excel 電子表格。 它根據更新的數據生成一個列表。 假設它生成了當天需要完成特定任務的每個人的列表。 該列表的長度每天都在變化。 為了完成必要的輸出,它使用“如果此行中的另一個單元格不是空白,請執行...”結構中的公式:

=IF(LEN(I4)=0),"",)

有時這個列表可能會很長。 而不是要求用戶過度滾動,我想提供一個“復制到剪貼板”按鈕。 然后用戶將這些行粘貼到另一個應用程序中。 讓它復制一個固定長度的列表沒有問題——比如說,只需將 M4 到 M500 復制到剪貼板就很容易了。 但是假設今天,列表只到 M286,明天到 M117,依此類推。 我只想復制那些填充的單元格,而不是后面的空白單元格。

這是我從谷歌拼湊出來的:

Private Sub CommandButton1_Click()
    Application.ScreenUpdating = False
    Dim xSheet As Worksheet
    firstBlankRow = Worksheets("Sheet1").Range("M4").End(xlDown).Row + 1

    MsgBox (unusedRow)
    Set xSheet = ActiveSheet
    xSheet.Range("M4:M" & firstBlankRow).Copy

    Application.ScreenUpdating = True
End Sub

這成功地找到了最后一個帶有公式的單元格。 不過,這並不是我想要的。 我想要最后一個帶有值的單元格,該值由公式生成。 在這種特殊情況下,“具有值的最后一個單元格”將始終是“第一個空白單元格之前的單元格”。 列表中不會有任何空白。 那么,我接近了嗎? 如何讓它找到具有值的最后一個單元格? 謝謝你。

復制底部不包括空白的列

  • 要排除列底部的空格( =""' ),請使用Find方法,並將其LookIn參數的參數設置為xlValues
  • 請注意,如果工作表被過濾或存在隱藏的行或列,這將失敗。

工作表模塊,例如Sheet1

  • 假設命令按鈕位於要從中復制的工作表 ( Me ) 上。
Option Explicit

Private Sub CommandButton1_Click()
    CopyColumnNonBlanks Me.Range("M4")
End Sub

標准模塊,例如Module1

  • 或者,您可以將其放入帶有第一個代碼的工作表模塊中(不推薦)。 然后你需要用例如調用它

    Sheet1.CopyColumnNonBlanks(ThisWorkbook.Worksheets("Sheet2").Range("A4"))

    對於另一個工作表。

Option Explicit

Sub CopyColumnNonBlanks(ByVal FirstCell As Range)
    With FirstCell.Cells(1)
        Dim lCell As Range: Set lCell = .Resize(.Worksheet.Rows.Count _
            - .Row + 1).Find("*", , xlValues, , , xlPrevious)
        If lCell Is Nothing Then
            MsgBox "All cells in the column range are blank.", vbCritical
            Exit Sub
        End If
        .Resize(lCell.Row - .Row + 1).Copy
    End With
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM