Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim EndDragColumnNumber As Long, StartDragColumnNumber As Long
Dim EndDragRowString As String
Dim EndDragColumnLetter As String
Dim TargetAddressArray As Variant
'
TargetAddressArray = Split(Target.Address(0, 0), ":")
'
EndDragColumnLetter = Evaluate(Replace("=LEFT(""X"",MIN(FIND({0,1,2,3,4,5,6,7,8,9}" & _
",ASC(""X"")&1234567890))-1)", "X", TargetAddressArray(1))) ' Get EndDragColumnLetter of TargetAddressArray(1)
EndDragColumnNumber = Range(EndDragColumnLetter & 1).Column ' Get Column Number of EndDragColumnLetter
StartDragColumnNumber = Range(Evaluate(Replace("=LEFT(""X"",MIN(FIND({0,1,2,3,4,5,6,7,8,9}" & _
",ASC(""X"")&1234567890))-1)", "X", TargetAddressArray(0))) & 1).Column ' Get StartDragColumnNumber of TargetAddressArray(0)
'
EndDragRowString = Right(TargetAddressArray(1), Len(TargetAddressArray(1)) - _
Len(EndDragColumnLetter)) ' Get EndDragRow
'
If Application.WorksheetFunction.CountA(Target) = 0 Then Exit Sub ' Check/Allow deletetions
'
If Not Intersect(Target, Range("E3:E42")) Is Nothing And Target.CountLarge > 1 Or _
Not Intersect(Target, Range("F3:F42")) Is Nothing And Target.CountLarge > 1 Or _
Not Intersect(Target, Range("G3:G42")) Is Nothing And Target.CountLarge > 1 Then
With Application
.EnableEvents = False
.Undo
Range(Cells(Target.Row - 1, StartDragColumnNumber), Cells(Target.Row - 1, _
EndDragColumnNumber)).AutoFill Destination:=Range(Cells(Target.Row - 1, _
StartDragColumnNumber), Cells(EndDragRowString, EndDragColumnNumber)), Type:=xlFillValues
.EnableEvents = True
End With
End If
End Sub