Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1424to1428
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wie kann man das vereinfachen?

Wie kann man das vereinfachen?
17.05.2015 19:05:38
Peter
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

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wie kann man das vereinfachen?
17.05.2015 19:18:27
Daniel
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

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

AW: Wie kann man das vereinfachen?
17.05.2015 19:50:28
Daniel
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

AW: Wie kann man das vereinfachen?
17.05.2015 19:33:25
Peter
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!!

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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige