|  
                                             Hi Wolfgang, 
allgemein könnte man das so lösen: 
Hinweis: Ungetesteter Code, da freihand geschrieben - habe aktuell kein Excel zur Verfügung. 
Deshalb sind Kompilierungs- und/oder Laufzeitfehler nicht ausgeschlossen. 
'in Tabelle: Datenblatt
Private Sub Worksheet_Change(ByVal Target as Range)
	
	Dim rngCell As Range
	Dim strTargetAddress As String
	Dim blnVisible As Boolean
	
	For Each rngCell in Target.Cells
		
		Select Case rngCell.Address(False, False)
			Case "B4"
				strTable = "Studie_1"
				strTargetAddress = "8:16, 8:30"
			Case "B5"
				strTable = "Studie_2"
				strTargetAddress = "17:23, 31:53"			
			Case "B6"
				strTable = "Studie_3"
				strTargetAddress = "26:34, 54:76"
			Case "B7"
				strTable = "Studie_4"
				strTargetAddress = "35:43, 77:99"
			Case "B8"
				strTable = "Studie_5"
				strTargetAddress = "44:52, 100:122"
			Case "B9"
				strTable = "Studie_6"
				strTargetAddress = "53:61, 123:145"
			Case "B10"
				strTable = "Studie_7"
				strTargetAddress = "60:62, 146:168"
			Case Else
				GoTo Continue_For
		End Select
		
		blnVisible = Len(Trim$(rngCell.Value)) > 0
		
		Worksheets(strTable).Visible = blnVisible
		
		Sheets(Array("Studien", strTable)) _
			.Range(strTargetAddress).EntireRow _
			.Hidden = Not blnVisible
		
Continue_For:
	Next
	
End Sub
Wenn die Bereiche immer die gleiche Größe haben, dann könnte man das wahrscheinlich sogar ohne Select-Case-Statement formulieren. 
  
Grüße 
     |