2017-01-23 6 views
0

ある空のセルがある式を下にドラッグし、VBA、これはシート1の私のサンプルは

A   B C D E F 
11/12/2016 300 4 4 3 85 
12/12/2016 23 4 4 2 87 
13/12/2016 21 4 4 2 79 
14/12/2016 67 4 4 4 76 

私は下に挿入しようとしています(BからFまでの数字は、式の単純= Sheet2の!のB2の一種です)列Aは次の7日間の日付(これは私が達成したものです)を計算し、B列からB列に数式をドラッグします。RANGE B1:F7を使用することはできません。だから私はダイナミックレンジが必要です。おそらく、

Sub test() 
    Dim r As Range Set r = Intersect(ActiveSheet.UsedRange, Range("A:A")).Cells.SpecialCells(xlCellTypeBlanks) 
    r(1).Formula = "=Today()" 
    r(2).Formula = "=Today()+1" 
    r(3).Formula = "=Today()+2" 
    r(4).Formula = "=Today()+4" 
    r(5).Formula = "=Today()+5" 
    r(6).Formula = "=Today()+6" 
    Dim inRange As Range 
    Set inRange = Sheets("Sheet1").Range("B" & i & ":" & "F" & i) 
    For i = 1 To 7 
     Sheets("Sheet1").Range("B1:F1").Select 
     Selection.AutoFill Destination:=Range(inRange), Type:=xlFillDefault 

    Next i 
End Sub 

おかげ

答えて

0

私はこれを使用することはありません。

Set r = Intersect(ActiveSheet.UsedRange, Range("A:A")).Cells.SpecialCells(xlCellTypeBlanks) 

は交差点が何の細胞を返さない場合ので、エラーが発生します。そして、このテーブルがSheet1の唯一の範囲である場合、パフォーマンスとファイルサイズのために削除する行があります。

範囲(B1、F1)内の式は、私はそれをこのようにコーディングし、変化しない場合:私はあなたがいないことをお勧め理由を理解したいと思いますwork.However

Sub test() 
    Dim r As Excel.Range 
    Dim i As Integer 

    'I wouldn't use this 
    'Set r = Intersect(ActiveSheet.UsedRange, Range("A:A")).Cells.SpecialCells(xlCellTypeBlanks) 

    'Instead: 
    Range("A1").End(xlDown).Offset(1, 0).Activate 
    ActiveCell.Formula = "=Today()" 
    For i = 0 To 6 
     If i = 0 Then 
      ActiveCell.Formula = "=Today()" 
     Else 
      ActiveCell.Formula = "=Today()+" & i 
     End If 
     ActiveCell.Offset(1, 0).Activate 
    Next i 
    Range("B1:F1").Copy Intersect(ActiveSheet.UsedRange, Range("B:F")).Cells.SpecialCells(xlCellTypeBlanks) 
End Sub 
+1

おかげで、それはありませんSet r = Intersect(ActiveSheet.UsedRange、Range( "A:A"))。Cells.SpecialCells(xlCellTypeBlanks)。ありがとう! – Vincenzo

+0

@ Vincenzoそのコード行をテストしたとき、私はあなたが提供したテーブルをコピーしたので、UsedRangeに空白のセルはありませんでした。これにより、交差点にxlCellTypeBlanksが見つからないため、VBAでエラーが発生しました。したがって、その範囲の下に空白のセルがある場合は、Ctrl + Endキーを使用してその行を削除して、使用されている範囲の最後のセルを見つけます。空白の行が多数あり、それらを削除すると、ファイルサイズが小さくなり、パフォーマンスが向上します(計算時間が短くなります)。 –

0

ない世界で最高のコードを、:ここ

は、しかし、私はループのために(エラー=レンジOB object_globalが失敗した)でINRANGEのconcatentationに戻るには、私の試みです

Sub testit(cell as range, numberOfRows as long) 
    range(cell, cell.Offset(numberOfRows)).formula = "=Today() + row() - " & cell.Row 
End Sub 

を編集:考え直しで、私は誤解だと思う、それはループ(私は質問を理解仮定)を回避するので、それは速いです。これはもっと良いですか?

Sub testit() 
    Dim k as range 
    Set k = Range("B2").CurrentRegion.columns(1).SpecialCells(xlCellTypeBlanks) 
    k.formula = "=Today() + row() - " & k.cells(1,1).Row 
End Sub 

あなたは、データがこのように滞在したいと仮定すると、値としてコピー&ペーストすることを忘れないでください。さもなければそれはあまりにも動的になります!

関連する問題