One of the main reasons that Vba is slow is the time taken to access the worksheet from VBa is a relatively long time.
To speed up vba the easiest way is to minimise the number of accesses to the worksheet. What is interesting is that the time taken to access a single cell on the worksheet in vba is almost identical as the time taken to access a large range if it is done in one action.
So instead of writing software that goes down a range checking one row at a time which will take along time if you have got 50000 rows it is much quicker to load the 50000 lines into a variant array ( one worksheet access), then check the vaalues in the variant array .
Your software check every cell twice in the 30 rows you are looking at. I have modified your software so that it loads all the dat into a varaint array and then check the array for the condition. This will speed it up regardless of whether you sort the target intersect bit out.
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect GeneralPassword
inarr = Range("AW1:Aw63")
If inarr(29, 1) = "1" Then
Rows("30:30").EntireRow.Hidden = False
ElseIf inarr(29, 1) = "" Then
Rows("30:30").EntireRow.Hidden = True
End If
If inarr(31, 1) = "1" Then
Rows("32:32").EntireRow.Hidden = False
ElseIf inarr(31, 1) = "" Then
Rows("32:32").EntireRow.Hidden = True
End If
If inarr(33, 1) = "1" Then
Rows("34:34").EntireRow.Hidden = False
ElseIf inarr(33, 1) = "" Then
Rows("34:34").EntireRow.Hidden = True
End If
If inarr(35, 1) = "1" Then
Rows("36:36").EntireRow.Hidden = False
ElseIf inarr(35, 1) = "" Then
Rows("36:36").EntireRow.Hidden = True
End If
If inarr(37, 1) = "1" Then
Rows("38:38").EntireRow.Hidden = False
ElseIf inarr(37, 1) = "" Then
Rows("38:38").EntireRow.Hidden = True
End If
If inarr(39, 1) = "1" Then
Rows("40:40").EntireRow.Hidden = False
ElseIf inarr(39, 1) = "" Then
Rows("40:40").EntireRow.Hidden = True
End If
If inarr(41, 1) = "1" Then
Rows("42:42").EntireRow.Hidden = False
ElseIf inarr(41, 1) = "" Then
Rows("42:42").EntireRow.Hidden = True
End If
If inarr(43, 1) = "1" Then
Rows("44:44").EntireRow.Hidden = False
ElseIf inarr(43, 1) = "" Then
Rows("44:44").EntireRow.Hidden = True
End If
If inarr(45, 1) = "1" Then
Rows("46:46").EntireRow.Hidden = False
ElseIf inarr(45, 1) = "" Then
Rows("46:46").EntireRow.Hidden = True
End If
If inarr(47, 1) = "1" Then
Rows("48:48").EntireRow.Hidden = False
ElseIf inarr(47, 1) = "" Then
Rows("48:48").EntireRow.Hidden = True
End If
If inarr(49, 1) = "1" Then
Rows("50:50").EntireRow.Hidden = False
ElseIf inarr(49, 1) = "" Then
Rows("50:50").EntireRow.Hidden = True
End If
If inarr(51, 1) = "1" Then
Rows("52:52").EntireRow.Hidden = False
ElseIf inarr(51, 1) = "" Then
Rows("52:52").EntireRow.Hidden = True
End If
If inarr(53, 1) = "1" Then
Rows("54:54").EntireRow.Hidden = False
ElseIf inarr(53, 1) = "" Then
Rows("54:54").EntireRow.Hidden = True
End If
If inarr(55, 1) = "1" Then
Rows("56:56").EntireRow.Hidden = False
ElseIf inarr(55, 1) = "" Then
Rows("56:56").EntireRow.Hidden = True
End If
If inarr(57, 1) = "1" Then
Rows("58:58").EntireRow.Hidden = False
ElseIf inarr(57, 1) = "" Then
Rows("58:58").EntireRow.Hidden = True
End If
If inarr(59, 1) = "1" Then
Rows("60:60").EntireRow.Hidden = False
ElseIf inarr(59, 1) = "" Then
Rows("60:60").EntireRow.Hidden = True
End If
If inarr(61, 1) = "1" Then
Rows("62:62").EntireRow.Hidden = False
ElseIf inarr(61, 1) = "" Then
Rows("62:62").EntireRow.Hidden = True
End If
If inarr(63, 1) = "1" Then
Rows("64:64").EntireRow.Hidden = False
ElseIf inarr(63, 1) = "" Then
Rows("64:64").EntireRow.Hidden = True
End If
ActiveSheet.Protect GeneralPassword
End Sub