簡體   English   中英

選擇並僅復制Excel VBA中的非空白單元格,請勿覆蓋

[英]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的內置AutoFilterSpecialCells方法非常輕松地(並且只需很少的代碼)完成此任務。

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.

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