это будет только l oop те, которые меняются:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo safeout
Application.EnableEvents = False
Dim rng As Range
Set rng = Intersect(Range("D49:D178"), Target)
If Not rng Is Nothing Then
Dim rngCell As Range
For Each rngCell In rng
Dim r As Long
r = rngCell.Row
'AD = 30
Dim MatType As String
MatType = LCase$(rngCell.Value)
'Plechy
'Trubky
'Jine
Select Case MatType
Case "pzs", "pzt", "Tahokov"
Cells(r, 30).Value = CDbl(Cells(r, "I")) * Cells(r, "J") * Cells(r, "L") * 2 / 1000000
Case "jac", "jao", "tr", "u", "kr", "L", "op", "Trubky_spec"
Cells(r, 30).Value = CDbl(Cells(r, "I")) * Cells(r, "F") * Cells(r, "L") / 1000000
Case Else
Cells(r, 30).Value = 0
End Select
Next
End If
safeout:
Application.EnableEvents = True
End Sub