2017-01-12 184 views
0

我有一個宏在Excel中的作品,但並不完美,因爲我想它。無法找到解決方案,並需要您的想法。Excel宏複製粘貼條件

這裏它做什麼:從設置值粘貼複製到計算sheet.It的第一個非空單元格不OK

下面是我對這段代碼:

Sub support() 
Sheets("Settings").Select 
Range("S411:S421").Select 
Selection..Copy 
Sheets("Calculation").Select 
Range("C4").Select 
Range("C4").End(xlDown).Offset(1, 0).Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
End Sub 

但我想要什麼只將非空單元格和不爲0的值複製到這10行之間的計算頁面上。 (所以我應該跳過複製0和空單元格)任何簡單的伎倆,你可以指導我?

回答

0

你可以使用AutoFilter()

Sub support() 
    With Sheets("Settings").Range("S410:S421") '<--| reference wanted range and the cell above it as the "header" 
     If IsEmpty(.Cells(1, 1)) Then .Cells(1, 1).Value = "dummyheader" '<--| add a "dummy" header value if it's empty 
     .AutoFilter Field:=1, Criteria1:="<>", Operator:=xlAnd, Criteria2:="<>0" '<--| filter referenced range with "not empty" and "not zero" values 
     If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then 
      .Resize(.Rows.Count - 1, 1).Offset(1).SpecialCells(xlCellTypeVisible).Copy 
      Sheets("Calculation").Range("C4").End(xlDown).Offset(1, 0).PasteSpecial xlPasteValues 
      Application.CutCopyMode = False 
     End If 
     If .Cells(1, 1).Value = "dummyheader" Then .Cells(1, 1).ClearContents '<--| remove "dummy" header, if there 
     .Parent.AutoFilterMode = False 
    End With 
End Sub 
+0

這是個好主意,作品完美。我對自己生氣,我沒有想過自動過濾器:( – ahmet

+0

只是補充說,如果你確信S410單元格是_always_不是空的,那麼你可以省略如果IsEmpty(.Cells(1,1))然後.Cells (1,1).Value =「dummyheader」'和'如果.Cells(1,1).Value =「dummyheader」然後.Cells(1,1).ClearContents'語句 – user3598756

+0

謝謝你最有可能不會是空虛,但無法確定。隨着時間的推移,我會拭目以待並再次記住這一點。 – ahmet

0

您想每次從Range("S411:S421")複製到Range("C4")..->?或者這些範圍可以改變?

TRY:

Public Sub CommandButton1_Click() 
j = 4 
For i = 411 To 421 

If ThisWorkbook.Sheets("Settings").Cells(i, 19) <> 0 And ThisWorkbook.Sheets("Settings").Cells(i, 19) <> "" Then 
ThisWorkbook.Sheets("Settings").Cells(i, 19).Copy 

ThisWorkbook.Sheets("Calculation").Cells(j, 3).PasteSpecial (xlPasteValues) 
j = j + 1 
End If 


Next i 
End Sub 
+0

是的,我想每次複製同樣的細胞和範圍並沒有改變。但是在我經過它的地方,這一排正在變化。 – ahmet

+0

範圍(「S411:S421」)其中我複製包含公式,因此每次都有不同的值。 – ahmet

+0

是的,當你在範圍S411:S421中有例如(10,0, - ,0, - ,45,78,96,0, - ,121)時,你想要有(10,45,78,96,121)在C4和下,喲? –