[英]Select & Copy Only Non Blank Cells in Excel VBA, Don't Overwrite
經過無休止的搜索,我似乎無法找到適合我的應用程序的解決方案。 這就是我想做的:
我在一張excel工作表中有單元格,在一列中可以包含日期和空單元格的混合。 然后,我想選擇僅具有日期的單元格,然后將其復制到另一張工作表的相應列中。 它們必須按照與第一張紙完全相同的順序粘貼,因為每一行都有標題。 我的代碼正確:
'Dim i As Long
'For i = 5 To 25
'If Not IsEmpty(Sheets("RMDA").Range("D" & i)) Then _
Sheets("Overview").Range("D" & i) = Sheets("RMDA").Range("D" & i)
'Next i
但是,第一張工作表中的日期每天都在更新,可能是因為用戶尚未檢查第一張工作表上的一個標題(在另一天)尚未更新。 如果我將其保留為空白,並且如果我遵循相同的步驟,則它將“覆蓋”第二張工作表中的日期並使單元格為空白,這是我不希望的。 我希望我很清楚。 有人可以幫幫我嗎?
問候
您可以利用Excel的內置AutoFilter
和SpecialCells
方法非常輕松地(並且只需很少的代碼)完成此任務。
With Sheets("RMDA").Range("D4:D25")
.AutoFilter 1, "<>"
Dim cel as Range
For Each cel In .SpecialCells(xlCellTypeVisible)
Sheets("Overview").Range("D" & cel.Row).Value = cel.Value
Next
.AutoFilter
End With
您可以嘗試類似的方法。 這將為您提供范圍內的非空白,可能有一種更簡單的方法...希望對您有所幫助
Sub x()
Dim rStart As Excel.Range
Dim rBlanks As Excel.Range
Set rStart = ActiveSheet.Range("d1:d30")
Set rBlanks = rStart.SpecialCells(xlCellTypeBlanks)
Dim rFind As Excel.Range
Dim i As Integer
Dim rNonBlanks As Excel.Range
For i = 1 To rStart.Cells.Count
Set rFind = Intersect(rStart.Cells(i), rBlanks)
If Not rFind Is Nothing Then
If rNonBlanks Is Nothing Then
Set rNonBlanks = rFind
Else
Set rNonBlanks = Union(rNonBlanks, rFind)
End If
End If
Next i
End Sub
僅僅因為一個單元格是空白並不意味着它實際上是空的。
根據對問題的描述,我想單元格實際上並不是空的,這就是為什么空白單元格被復制到第二張紙上的原因。
而不是使用“ IsEmpty”函數,我將計算單元格的長度,僅復制長度大於零的單元格
Dim i As Long
For i = 5 To 25
If Len(Trim((Sheets("RMDA").Range("A" & i)))) > 0 Then _
Sheets("Overview").Range("D" & i) = Sheets("RMDA").Range("D" & i)
Next i
修剪將刪除單元格中的所有空格,然后Len計算單元格中字符串的長度。 如果此值大於零,則它不是空白單元格,因此應復制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.