Microsoft Excel

Herbers Excel/VBA-Archiv

Code komprimieren

Betrifft: Code komprimieren von: Manuel
Geschrieben am: 28.10.2014 11:52:32

Hallo zusammen,

bei mir geht es um die Komprimierung eines Codes.
Die Funktion ist wie folgt:

In Zelle A1 können die Zahlen 1-10 eingegeben werden, je nach Zahl werden Zeilen ausgeblendet bzw. eingeblendet.

z.B. Wenn A1 = 5 dann sollen Zeile 10 bis 14 eingeblendet werden.

Da dieses auf bis zu 100 Zeilen ausgebaut werden soll, liegt mein Interesse darin den folgenden Code zu komprimieren. Ich habe leider keine Idee da mein Repertoire größten Teils auf If-Funktionen beschränkt ist.



Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$A$1" Then
    If Range(Target.Address) = 1 Then Rows("10:19").Hidden = True
            If Range(Target.Address) = 1 Then Rows(10).Hidden = False
        End If

If Target.Address = "$A$1" Then
    If Range(Target.Address) = 2 Then Rows("10:19").Hidden = True
            If Range(Target.Address) = 2 Then Rows("10:11").Hidden = False
        End If

If Target.Address = "$A$1" Then
    If Range(Target.Address) = 3 Then Rows("10:19").Hidden = True
            If Range(Target.Address) = 3 Then Rows("10:12").Hidden = False
        End If
        

If Target.Address = "$A$1" Then
    If Range(Target.Address) = 4 Then Rows("10:19").Hidden = True
            If Range(Target.Address) = 4 Then Rows("10:13").Hidden = False
        End If


If Target.Address = "$A$1" Then
    If Range(Target.Address) = 5 Then Rows("10:19").Hidden = True
            If Range(Target.Address) = 5 Then Rows("10:14").Hidden = False
        End If
        
        
If Target.Address = "$A$1" Then
    If Range(Target.Address) = 6 Then Rows("10:19").Hidden = True
            If Range(Target.Address) = 6 Then Rows("10:15").Hidden = False
        End If
        
        
If Target.Address = "$A$1" Then
    If Range(Target.Address) = 7 Then Rows("10:19").Hidden = True
            If Range(Target.Address) = 7 Then Rows("10:16").Hidden = False
        End If
        
        
If Target.Address = "$A$1" Then
    If Range(Target.Address) = 8 Then Rows("10:19").Hidden = True
            If Range(Target.Address) = 8 Then Rows("10:17").Hidden = False
        End If

If Target.Address = "$A$1" Then
    If Range(Target.Address) = 9 Then Rows("10:19").Hidden = True
            If Range(Target.Address) = 9 Then Rows("10:18").Hidden = False
        End If
        
If Target.Address = "$A$1" Then
    If Range(Target.Address) = 10 Then Rows("10:19").Hidden = True
            If Range(Target.Address) = 10 Then Rows("10:19").Hidden = False
        End If
        
        
End Sub
Vielen Dank für eure Hilfe

Gruß Manuel

  

Betrifft: AW: Code komprimieren von: yummi
Geschrieben am: 28.10.2014 12:05:40

Hallo Manuel,

probier mal folgendes:

Private Sub Worksheet_Change(ByVal Target As Range)
dim strRange as string

If Target.Address = "$A$1" Then
    Rows("10:19").Hidden = true
    strRange = "10:" & 9 + Range(Target.Address)
    Rows(strRange).Hidden = False
End If
nicht getestet, müsste aber das selbe machen.


Gruß
yummi


  

Betrifft: AW: Code komprimieren von: Daniel
Geschrieben am: 28.10.2014 12:10:30

Hi

zumindest mal das erste IF, dh die Abfrage ob die Zelle A1 geändert wurde , brauchst du nur einmal.

das erste ausblenden aller Zellen ist auch immer gleich, dass kannst du dann auch vor den einzelnen Abfragen ausführen.
desweitern ist "Range(Target.Address)" das gleiche wie "Target", was du ebenfalls nutzen kannst um deinen Code zu kürzen.
Für die Abfrage von einzelnen Werten bietest sich das Select Case als Alternative zu IF-THEN an:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$A$1" Then
     Rows("10:19").Hidden = True
     Select Case Target.Value
         Case 1: Rows(10).Hidden = false
         Case 2: Rows("10:11").Hidden = False
         Case 3: Rows("10:12").Hidden = False
         Case 4: Rows("10:13").Hidden = False
         Case 5: Rows("10:14").Hidden = False
         Case 6: Rows("10:15").Hidden = False
         Case 7: Rows("10:16").Hidden = False
         Case 8: Rows("10:17").Hidden = False
         Case 9: Rows("10:18").Hidden = False
         Case 10: Rows("10:19").Hidden = False
         Case Else
    End Select
End If
        
End Sub
ob weitere Verkürzungen möglich sind, hängt von deiner Logik ab, was bei welcher Zahl ausgeblendet werden soll.
in Deinem Fall der wert in der Zelle die Anzahl der eingeblendeten Zeilen, deswegen kann man das ganze so verkürzen:
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$A$1" Then
     Rows("10:19").Hidden = True
     Select Case Target.Value
         Case 1 to 10
             Rows(10).Resize(Target.Value).Hidden = false
         Case Else
    End Select
End If
        
End Sub
Gruß Daniel


  

Betrifft: AW: Code komprimieren von: Manuel
Geschrieben am: 28.10.2014 13:25:21

Hi yummi, hi Daniel,

vielen Dank für die schnellen Antworten funktioniert beides echt super.
@Daniel: Nochmal danke für die ausführliche und schrittweise Erläuterung deiner Denkweise.

Gruß Manuel