同じ行の値を使用する数式がある行があります。次の行は空で、背景色が異なります。
ここで、新しい行を挿入すると(空の行を右クリックして「挿入」することにより)、背景色のない新しい行が表示されます(これは私が望むものです)が、行には数式も含まれていません。新しい行を作成するときに、Excelをよりスマートにし、前の行から数式をコピーするにはどうすればよいですか?
もう1つの情報:データ検証情報(つまり、ドロップダウンリスト)は、新しい行を挿入するときにコピーされます。
ありがとう。
同じ行の値を使用する数式がある行があります。次の行は空で、背景色が異なります。
ここで、新しい行を挿入すると(空の行を右クリックして「挿入」することにより)、背景色のない新しい行が表示されます(これは私が望むものです)が、行には数式も含まれていません。新しい行を作成するときに、Excelをよりスマートにし、前の行から数式をコピーするにはどうすればよいですか?
もう1つの情報:データ検証情報(つまり、ドロップダウンリスト)は、新しい行を挿入するときにコピーされます。
ありがとう。
データと数式を含む領域を表にします。
次に、次の行に新しい情報を追加すると、そのテーブル内のすべての数式が新しい行にコピーされます。データ検証は、列全体の場合と同様に、新しい行にも適用されます。これは確かにExcelがあなたのデータをより賢くしていることです。
VBAは必要ありません...
新しい行を挿入してから、ソース行から新しく挿入された行にコピーする必要があります。Excelでは、特別な数式だけを貼り付けることができます。したがって、Excelでは:
Rows( "1:1")をソース、Rows( "2:2")をターゲットとして、必要に応じてVBA:
Rows("2:2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Rows("2:2").Clear
Rows("1:1").Copy
Rows("2:2").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone
テーブル内の行のコピーに関して私が見つけたもう1つの重要なことは、作業中のワークシートをアクティブ化する必要があるということです。複数のシートを含むブックがある場合は、マクロを呼び出したシートを保存してから、テーブルを使用してシートをアクティブ化する必要があります。完了したら、元のシートを再度アクティブ化できます。
Application.ScreenUpdating = Falseを使用して、マクロ内でワークシートを切り替えていることをユーザーに認識させないようにすることができます。
ワークシートをアクティブにしていない場合、コピーは正しく機能していないようです。つまり、一部のものは機能しているように見え、他のものは機能していないようです。
Private Sub Worksheet_Change(ByVal Target As Range)
'data starts on row 3 which has the formulas
'the sheet is protected - input cells not locked - formula cells locked
'this routine is triggered on change of any cell on the worksheet so first check if
' it's a cell that we're interested in - and the row doesn't already have formulas
If Target.Column = 3 And Target.Row > 3 _
And Range("M" & Target.Row).Formula = "" Then
On Error GoTo ERROR_OCCURRED
'unprotect the sheet - otherwise can't copy and paste
ActiveSheet.Unprotect
'disable events - this prevents this routine from triggering again when
'copy and paste below changes the cell values
Application.EnableEvents = False
'copy col D (with validation list) from row above to new row (not locked)
Range("D" & Target.Row - 1).Copy
Range("D" & Target.Row).PasteSpecial
'copy col M to P (with formulas) from row above to new row
Range("M" & Target.Row - 1 & ":P" & Target.Row - 1).Copy
Range("M" & Target.Row).PasteSpecial
'エラーが発生した(または発生しなかった)場合は、イベントが再度有効になり、シートが再保護されていることを確認してください
ERROR_OCCURRED:
If Err.Number <> 0 Then
MsgBox "An error occurred. Formulas may not have been copied." & vbCrLf & vbCrLf & _
Err.Number & " - " & Err.Description
End If
're-enable events
Application.EnableEvents = True
're-protect the sheet
ActiveSheet.Protect
'put focus back on the next cell after routine was triggered
Range("D" & Target.Row).Select
End If
サブ終了
すべてに数式が含まれている行が多数あるワークシートがある場合、最も簡単な方法は、データがない(ただし数式が含まれている)行をコピーしてから、行の下/上に「コピーしたセルを挿入」することです。追加したい。式は残ります。ピンチでは、データを含む行を使用しても問題ありません。貼り付けた後、クリアするか上書きしてください。