2017-11-13 6 views
0

ここに私のコードがあります。私は範囲内で最後に入力された行を見つけようとしています。そのデータを数式として次の空白行にコピーします。最後に入力した最後の行をもう一度コピーし、2番目から最後に入力した行に値として貼り付けます。簡単に言えば、最後の行/セルの式を1行下に移動し、そのデータを数値としてコピーした場所に保持します。したがって、新しいデータがファイルに取り込まれると、数式が再計算され、以前の計算されたデータが失われることはありません。うまくいけばそれは理にかなっている。以下のコードは実行されますが、既存の行に値としてデータを貼り付ける以外には何もしません。私は間違って何をしていますか?データをコピー/ペーストするマクロ

Sub Data Copy() 

Dim myLastCell As Range 
Set myLastCell = LastCell(Worksheets("YTD Metric Calculator").Range("E7:J76")) 

Sheets("YTD Metric Calculator").Range("E7:J" & myLastCell.Row).Copy 
Sheets("YTD Metric Calculator").Range("E7:J" & myLastCell.Row + 1).PasteSpecial Paste:=xlPasteFormulas 
Sheets("YTD Metric Calculator").Range("E7:J" & myLastCell.Row).Copy 
Sheets("YTD Metric Calculator").Range("E7:J" & myLastCell.Row + 1).PasteSpecial Paste:=xlPasteValues 
'Retain Yesterday's YTD Metric Data 

Function LastCell(r As Range) As Range 

Dim LastRow&, lastCol% 

On Error Resume Next 

With r 

LastRow& = .Cells.Find(What:="*", _ 
    SearchDirection:=xlPrevious, _ 
    SearchOrder:=xlByRows).Row 

lastCol% = .Cells.Find(What:="*", _ 
    SearchDirection:=xlPrevious, _ 
    SearchOrder:=xlByColumns).Column 

End With 

Set LastCell = r.Cells(LastRow&, lastCol%) 

End Function 

VBA Goal

+0

あなたは、変数名に特殊文字を使用しているのはなぜ? :) –

+0

@DavidG。 '&'と '%'を参照する場合、型識別子です。 '&'は 'Long'、'% 'は' Integer'です。本当に、本当に、いつものように「As Integer」などが存在しなかった時から酔っ払い。 – YowE3K

答えて

1
それは範囲で 内最後に使用セルのワークシートを行と列を決定しているので、あなたの LastCell機能は、あなたがそれをやっていると思う何をしていません

、その後、それをの開始点からのオフセットとして使用し、範囲はです。 E7:J76で最後に使用した行が行10であり、最後に使用されるカラムは、カラムIだった場合

だから、あなたの関数から返されるセルは、セルM16(すなわちE7以下の9行、右に8列)です。

変更

Set LastCell = r.Cells(LastRow&, lastCol%) 

あなたが数式をコピーして、値を交換する部品

Set LastCell = r.Cells(LastRow& - r.Row + 1, lastCol% - r.Column + 1) 

または

Set LastCell = r.Worksheet.Cells(LastRow&, lastCol%) 

にすることが、あるべき次のようなもの:

いくつかのキーストロークを保存するために Withブロックを使用して書き換えることができ
Sheets("YTD Metric Calculator").Range("E" & myLastCell.Row).Resize(1, 6).Copy 
Sheets("YTD Metric Calculator").Range("E" & myLastCell.Row + 1).Resize(1, 6).PasteSpecial Paste:=xlPasteFormulas 
Sheets("YTD Metric Calculator").Range("E" & myLastCell.Row).Resize(1, 6).Value = _ 
      Sheets("YTD Metric Calculator").Range("E" & myLastCell.Row).Resize(1, 6).Value 

With Sheets("YTD Metric Calculator").Range("E" & myLastCell.Row).Resize(1, 6) 
    .Copy 
    .Offset(1, 0).PasteSpecial Paste:=xlPasteFormulas 
    .Value = .Value 
End With 
+0

私は何をしようとしているのかについての元の質問に絵を追加しました。最後に入力された行である1つの行を次の空白の行に1つずつ数式としてコピーしようとします(各セルには、表示されるデータをプルする式があります)。次に、データを保持するためにコピーした単一行を値として戻して貼り付けます。 – Kittrell

+0

@Kittrell最後の行自体ではなく、7行目から最後の行にコピーしていることを見落としていました。私は最終行で作業するだけの答えを更新しました。 – YowE3K

+0

パーフェクト、これはまさに私が必要としていたことに終わった。私は非常に助けを感謝します。私は今、私のファイルを完全に自動化しました。 – Kittrell

関連する問題