2017-01-12 17 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

wowwwwこれは素晴らしいアイデアであり、完璧に動作します。私は自分自身に怒っている、私はautofilterを考えていない:( – ahmet

+0

あなたがS410細胞が_always_であることを確かに知っていればそれを追加するだけで空ではない場合は両方を省略することができますIf IsEmpty(.Cells(1,1))Then .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

はい、Range S411:S421にたとえば(10,0、 - 、0、 - 、45,78,96,0、 - 121)があるときは、(10,45,78,96,121) C4でダウン、yop? –

関連する問題