2016-01-11 247 views
0

無盡搜索後,我似乎找不到應用程序的解決方案。這是我想要做的:在Excel VBA中選擇並僅複製非空白單元格,不要覆蓋

我在一個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 

然而,在第一張的日期正在每日更新的基礎上,它可以是一個標題還沒有在第一更新(另一天)因爲用戶還沒有檢查它。如果我把它留空,如果我按照相同的程序,那麼它將「覆蓋」第二張紙上的日期,並使單元格變爲空白,這是我不想要的。我希望我很清楚。有人可以幫幫我嗎?

Regards

+0

您的意思是註釋掉的比表其他代碼( 「概覽」)的所有行。範圍( 「d」 &I)=表( 「RMDA」),範圍( 「d」 &I) ? 也只是因爲一個單元格爲空並不意味着它是空的 – EdHunter

+0

@EdHunter我在帖子上執行了*編輯*並將astrick留在原地。 –

回答

0

你可以嘗試類似的東西。這會給你此範圍中無空白,有可能是一個更簡單的方法......希望它有助於

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 
0

僅僅因爲一個細胞是空白的,並不意味着它實際上是空的。

根據您對問題的描述,我猜測單元格實際上不是空的,這就是爲什麼空白單元格被複制到第二個表單中的原因。

而不是使用「爲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 

修剪從細胞中刪除所有的空格,然後萊恩計數單元格中字符串的長度。如果此值大於零,則它不是空白單元格,因此應該被複制。

0

利用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 
相關問題