[英]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.