Dim RangeSelected As Variant
Dim PreviousRangeSelected As Variant
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
PreviousRangeSelected = RangeSelected
RangeSelected = Target.Address(0, 0)
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("E3:E42")) Is Nothing And _
Intersect(Target, Range("F3:F42")) Is Nothing And _
Intersect(Target, Range("G3:G42")) Is Nothing And _
Intersect(Target, Range("M17:M36")) Is Nothing Then Exit Sub
Dim AddressCharacter As Long, EndAddressRow As Long
Dim SelectionRow As Long
Dim ActiveColumnLetter As String, LastMergedColumn As String
Dim EndDragColumnLetter As String, StartDragColumnLetter As String
Dim SelectionAddressArray As Variant
With Selection
If .Count = 1 And Application.CutCopyMode = False Then
Exit Sub
ElseIf .Count = 1 And Application.CutCopyMode = xlCopy Then
With Application
.EnableEvents = False
.Undo
Target.PasteSpecial Paste:=xlPasteValues
.CutCopyMode = False
.EnableEvents = True
Exit Sub
End With
End If
If .Count > 1 Then
With Application
On Error Resume Next
If .CommandBars("Standard").Controls("&Undo").List(1) = "Clear" Then Exit Sub
On Error GoTo 0
If .CommandBars("Standard").Controls("&Undo").List(1) = "Paste" Or _
.CommandBars("Standard").Controls("&Undo").List(1) = "Paste Special" And _
.CutCopyMode = xlCopy Then
.EnableEvents = False
LastMergedColumn = Split(Selection.Address, "$")(3)
.Undo
If ActiveCell.MergeCells Then
EndAddressRow = Split(Selection.Address, "$")(4)
ActiveColumnLetter = Split(Cells(1, ActiveCell.Column).Address, "$")(1)
With Range(ActiveColumnLetter & Target.Row & ":" & _
ActiveColumnLetter & EndAddressRow)
If .MergeCells Then .UnMerge
End With
Range(PreviousRangeSelected).Copy
Range(ActiveColumnLetter & Target.Row & ":" & ActiveColumnLetter & _
EndAddressRow).PasteSpecial Paste:=xlPasteValues
For MergeCellCounter = Target.Row To EndAddressRow
Range(ActiveColumnLetter & MergeCellCounter & ":" & _
LastMergedColumn & MergeCellCounter).Merge
Next
.EnableEvents = True
Exit Sub
Else
Target.PasteSpecial Paste:=xlPasteValues
.CutCopyMode = False
.EnableEvents = True
Exit Sub
End If
End If
If ActiveCell.MergeCells And .CommandBars("Standard").Controls("&Undo").List(1) _
<> "Auto Fill" And .CommandBars("Standard").Controls("&Undo").List(1) _
<> "Paste" Then
EndAddressRow = ActiveCell.Row
If EndAddressRow - Target.Row = 1 Then Exit Sub
ElseIf ActiveCell.MergeCells And .CommandBars("Standard").Controls("&Undo").List(1) _
= "Auto Fill" Or ActiveCell.MergeCells And _
.CommandBars("Standard").Controls("&Undo").List(1) = "Paste" Then
.EnableEvents = False
SelectionAddressArray = Split(Selection.Address(0, 0), ":")
.Undo
Range(SelectionAddressArray(0) & ":" & _
SelectionAddressArray(1)).FormulaR1C1 = Selection.Cells(1)
.EnableEvents = True
Exit Sub
End If
SelectionRow = Selection.Row
EndDragColumnLetter = Split(Selection.Address, "$")(3)
StartDragColumnLetter = Split(Cells(1, ActiveCell.Column).Address, "$")(1)
.EnableEvents = False
SelectionAddressArray = Split(Selection.Address(0, 0), ":")
.Undo
If SelectionRow = ActiveCell.Row Then
Range(SelectionAddressArray(0) & ":" & EndDragColumnLetter & _
ActiveCell.Row).AutoFill Destination:=Range(SelectionAddressArray(0) & _
":" & SelectionAddressArray(1)), Type:=xlFillValues
Else
Range(StartDragColumnLetter & ActiveCell.Row & ":" & EndDragColumnLetter & _
ActiveCell.Row).AutoFill Destination:=Range(SelectionAddressArray(1) & _
":" & SelectionAddressArray(0)), Type:=xlFillValues
End If
.EnableEvents = True
End With
End If
End With
End Sub