I have several considerations:
1. Using teacher paulked's change event method
Shortcomings:
a. After entering the cell editing mode, Change event will be triggered no matter whether the content is modified or not.
b. When the value in cell is generated by formula or linkcell of other control, The change event will not be triggered.
2. Use common variables to record the value of K2:O2, Do not deal with the same situation as the previous time.
Shortcomings: Common variables are initialized after code error or debugging.
3. Use formula to judge
The third method takes up a cell that is not used(For example, A1), We have to type "False" in cell A1 first and don't worry about it later.
As follows:
Sub Updata_test()
Dim arrRef, arrTop, arrBtm, r&, rng As Range
If [a1] = True Then Exit Sub
[a1] = "=K2&""-""&L2&""-""&M2&""-""&N2&""-""&O2=""" & Join([k2:o2&""], "-") & """"
arrRef = [k2:o2]
Application.ScreenUpdating = False
With Sheets("NumStats")
For i = 1 To UBound(arrRef, 2)
Set rng = .Columns(1).Find(arrRef(1, i), lookat:=xlWhole)
If rng Is Nothing Then MsgBox arrRef(1, i) & " Not Found!": Exit Sub
r = rng.Row
.Cells(r + 1, 2).Resize(12, 31) = .Cells(r, 2).Resize(12, 31).Value
.Cells(r, 2).Resize(, 31) = .Cells(r + 14, 2).Resize(, 31).Value
.Cells(r + 18, 2).Resize(11, 31) = .Cells(r + 17, 2).Resize(11, 31).Value
.Cells(r + 17, 2).Resize(, 31) = .Cells(r + 15, 2).Resize(, 31).Value
Next i
End With
Application.ScreenUpdating = True
End Sub