Wie kann man das vereinfachen?

Bild

Betrifft: Wie kann man das vereinfachen?
von: Peter
Geschrieben am: 17.05.2015 19:05:38

Hallo zusammen!
Ich stehe gerade auf dem Schlauch und bin über jede Hilfe dankbar. Das ist wahrscheinlich für einen VBA Profi in 2 min gelöst.
Ich habe ein Worksheet, wo man in Zelle C8 eine Anzahl von Themen eingibt. Dies ist von 1 bis 50 möglich.
Die Zeilen:
13 - 62 (1.Abschnitt)
74 - 223 (2.Abschnitt)
229 - 278 (3.Abschnitt)
sind ausgeblendet.
Es sollen je nach der eingetragenen Themenanzahl von oben immer entsprechend Zeilen eingeblendet werden. Vom 1. und 3. Abschnitt genauso viel wie die eingetragene Themenanzahl (C8) und beim 2.Abschnitt (Themenanzahl x 3 Zeilen).
Ich habs hier mal beispielhaft bis 10 versucht, aber das ist zu redundant...
' Zeilen einblenden


Sub einblenden()
Dim anzahl As Integer
Dim startdatei As String
startdatei = ThisWorkbook.Name
anzahl = Workbooks(startdatei).Sheets(1).Range("C8").Value
If anzahl = 1 Then
    ActiveSheet.Rows(13).EntireRow.Hidden = False
    ActiveSheet.Rows("74:76").EntireRow.Hidden = False
    ActiveSheet.Rows(229).EntireRow.Hidden = False
ElseIf anzahl = 2 Then
    ActiveSheet.Rows(14).EntireRow.Hidden = False
    ActiveSheet.Rows("77:79").EntireRow.Hidden = False
    ActiveSheet.Rows(230).EntireRow.Hidden = False
ElseIf anzahl = 3 Then
    ActiveSheet.Rows(15).EntireRow.Hidden = False
    ActiveSheet.Rows("80:82").EntireRow.Hidden = False
    ActiveSheet.Rows(231).EntireRow.Hidden = False
ElseIf anzahl = 4 Then
    ActiveSheet.Rows(16).EntireRow.Hidden = False
    ActiveSheet.Rows("83:85").EntireRow.Hidden = False
    ActiveSheet.Rows(232).EntireRow.Hidden = False
ElseIf anzahl = 5 Then
    ActiveSheet.Rows(17).EntireRow.Hidden = False
    ActiveSheet.Rows("86:88").EntireRow.Hidden = False
    ActiveSheet.Rows(233).EntireRow.Hidden = False
ElseIf anzahl = 6 Then
    ActiveSheet.Rows(18).EntireRow.Hidden = False
    ActiveSheet.Rows("89:91").EntireRow.Hidden = False
    ActiveSheet.Rows(234).EntireRow.Hidden = False
ElseIf anzahl = 7 Then
    ActiveSheet.Rows(19).EntireRow.Hidden = False
    ActiveSheet.Rows("92:94").EntireRow.Hidden = False
    ActiveSheet.Rows(235).EntireRow.Hidden = False
ElseIf anzahl = 8 Then
    ActiveSheet.Rows(20).EntireRow.Hidden = False
    ActiveSheet.Rows("95:97").EntireRow.Hidden = False
    ActiveSheet.Rows(236).EntireRow.Hidden = False
ElseIf anzahl = 9 Then
    ActiveSheet.Rows(21).EntireRow.Hidden = False
    ActiveSheet.Rows("98:100").EntireRow.Hidden = False
    ActiveSheet.Rows(237).EntireRow.Hidden = False
ElseIf anzahl = 10 Then
    ActiveSheet.Rows(22).EntireRow.Hidden = False
    ActiveSheet.Rows("101:103").EntireRow.Hidden = False
    ActiveSheet.Rows(238).EntireRow.Hidden = False
Else
End If
End Sub
Außerdem noch ein kleines Anliegen:
In den Zellen B13 bis B62 steht immer dasselbe (bis auf die Zahl): Thema 1, Thema 2, Thema 3, ..., Thema 50. Wenn dieses geändert wird, möchte ich dass das wieder per Knopfdruck zurückgesetzt wird.
Hier hab ich das auch versucht, aber für jede Zelle zählt es bis 49 hoch, anstatt wie gewünscht...
Sub Reset()
Dim ThemenZahl As Integer
For Each zelle In Range("B13:B62")
For ThemenZahl = 1 To 50
zelle.Value = "Thema" & ThemenZahl
ThemenZahl = ThemenZahl + 1
Next ThemenZahl
Next zelle
End Sub
Ich hoffe jemand kann mir weiterhelfen :) Danke schon mal!
Viele Grüße
Peter

Bild

Betrifft: AW: Wie kann man das vereinfachen?
von: Daniel
Geschrieben am: 17.05.2015 19:18:27
Hi
den ersten Teil könntest du, wenns ichs richtig eingeschätzt habe so verkürzen:

Sub einblenden()
Dim anzahl As Integer
Dim startdatei As String
startdatei = ThisWorkbook.Name
anzahl = Workbooks(startdatei).Sheets(1).Range("C8").Valu
    ActiveSheet.Rows(Anzahl + 12).EntireRow.Hidden = False
    ActiveSheet.Rows(71 + Anzahl * 3).Resize(3).EntireRow.Hidden = False
    ActiveSheet.Rows(Anzahl + 228).EntireRow.Hidden = False
End Sub

dein zweites Problem könntest du so lösen (eine Schleife reicht):

Sub Reset()
Dim Zelle as Range
Dim ThemenZahl As Integer
For Each zelle In Range("B13:B62")
    zelle.Value = "Thema" & ThemenZahl
    ThemenZahl = ThemenZahl + 1
Next zelle
End Sub
oder so:
Sub Reset()
Dim ThemenZahl As Integer
For ThemenZahl = 1 To 50
    Cells(ThemenZahl + 12, 2).Value = "Thema" & ThemenZahl
Next ThemenZahl
End Sub
oder auf eine ganz andere Methode:
With Range("B13:B52")
    .Formula = "=""Thema""&Row(A1)"
    .Formula = .Value
End With
Gruß Daniel

Bild

Betrifft: AW: Wie kann man das vereinfachen?
von: Anfänger
Geschrieben am: 17.05.2015 19:24:43
Hallo,
warum Rows(x).EntireRow ? Ist Rows nicht schon die ganze Zeile?
grüße

Bild

Betrifft: AW: Wie kann man das vereinfachen?
von: Daniel
Geschrieben am: 17.05.2015 19:50:28
Hi
Rows ja.
Aber das Resize kann aus dem Rows ja wieder eine normale Range machen.
da das EntireRow an dieser Stelle nicht schadet, schreibe ich das halt so hin, auch wenn es vielleicht in diesem Fall überflüssig sein könnte, weil ich grade zu faul bin, das zu überprüfen.
Gruß Daniel

Bild

Betrifft: AW: Wie kann man das vereinfachen?
von: Peter
Geschrieben am: 17.05.2015 19:33:25
Hi Daniel,
danke für die Hilfe. Der zweite Teil klappt gut!
Beim ersten Teil sollte es eigentlich immer zb wenn 5 eingetragen wird nicht nur die 5.Zeile in der Range eingeblendet werden, sondern die Zeilen 1 bis 5. Ich glaube ich habe dich vorher mit dem Beispielcode verwirrt.. Der war ja falsch, wie ich gerade merke :S Sorry
Also nochmal:
Zb Themenanzahl 5
1. & 3. Abschnitt: die ersten 5 Zeilen werden eingeblendet
2.Abschnitt: 5 * 3 Zeilen werden eingeblendet
Tausend Dank nochmal für die Mühe!!

Bild

Betrifft: AW: Wie kann man das vereinfachen?
von: Daniel
Geschrieben am: 17.05.2015 19:53:51
Hi
Rows(13).Resize(Anzahl).Hidden = False
Rows(229).Resize(Anzahl).Hidden = False
Rows(74).Resize(Anzahl * 3).Hidden = False
Gruß Daniel

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Wie kann man das vereinfachen?"