Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1012to1016
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

Formelergebnis als Bedingung

Formelergebnis als Bedingung
24.09.2008 22:50:10
Kai
Hallo zusammen,
ich habe folgendes Makro:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$G$22" Then
If Target.Value 


Es funktioniert auch gut, wenn ich eine absolute Zahl in der Zelle eingebe. Allerdings soll das Ergebnis folgender Formel ausgewertet werden:
=ZÄHLENWENN(A23:A26;"")
Steht in Zelle G22 anstatt der absoluten Zahl die Formel funktioniert das Makro leider nicht mehr.
Was muss ich ändern?
Vielen Dank für Eure Bemühungen!
Gruß Kai

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formelergebnis als Bedingung
24.09.2008 23:55:43
Erich
Hallo Kai,
die Änderung eines Formelwerts löst kein Worksheet_Change-Ereignis aus,
wohl aber Eingaben im Bereich A23:A26. Du kannst bei Eingaben in diesem Bereich den Wert in G22 prüfen.
Probier mal die beiden folgenden Varianten (einzeln, nicht beide auf einmal):

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A23:A26")) Is Nothing Then _
Rows("1:22").Hidden = Cells(22, 7) 

Die erste Variante geht davon aus, dass "Torschützen gesamt" der Name des aktiven Blattes ist.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Formelergebnis als Bedingung
25.09.2008 00:08:00
Kai
Hallo Erich,
der Teil funktioniert:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A23:A26")) Is Nothing Then Exit Sub
Sheets("Torschützen gesamt").Rows("1:22").Hidden = Cells(22, 7) 


Allerdings sollten die Zellen ja auch wieder eingeblendet werden, wenn die Bedingung nicht zutrifft.
ich muss das ganze auch für Ich fand meine urspüngliche Lösung so lange, deshalb hatte ich nicht alles gepostet.
Hier vielleicht doch zur besseren Veranschaulichung:
If Target.Address = "$G$22" Then
If Target.Value Sheets("Torschützen gesamt").Rows("1:22").Hidden = True
Else
Sheets("Torschützen gesamt").Rows("1:22").Hidden = False
End If
If Target.Value Sheets("Torschützen gesamt").Rows("4").Hidden = True
Else
Sheets("Torschützen gesamt").Rows("4").Hidden = False
End If
If Target.Value Sheets("Torschützen gesamt").Rows("5").Hidden = True
Else
Sheets("Torschützen gesamt").Rows("5").Hidden = False
End If
If Target.Value Sheets("Torschützen gesamt").Rows("6").Hidden = True
Else
Sheets("Torschützen gesamt").Rows("6").Hidden = False
End If
If Target.Value Sheets("Torschützen gesamt").Rows("7").Hidden = True
Else
Sheets("Torschützen gesamt").Rows("7").Hidden = False
End If
If Target.Value Sheets("Torschützen gesamt").Rows("8").Hidden = True
Else
Sheets("Torschützen gesamt").Rows("8").Hidden = False
End If
If Target.Value Sheets("Torschützen gesamt").Rows("9").Hidden = True
Else
Sheets("Torschützen gesamt").Rows("9").Hidden = False
End If
If Target.Value Sheets("Torschützen gesamt").Rows("10").Hidden = True
Else
Sheets("Torschützen gesamt").Rows("10").Hidden = False
End If
If Target.Value Sheets("Torschützen gesamt").Rows("11").Hidden = True
Else
Sheets("Torschützen gesamt").Rows("11").Hidden = False
End If
If Target.Value Sheets("Torschützen gesamt").Rows("12").Hidden = True
Else
Sheets("Torschützen gesamt").Rows("12").Hidden = False
End If
If Target.Value Sheets("Torschützen gesamt").Rows("13").Hidden = True
Else
Sheets("Torschützen gesamt").Rows("13").Hidden = False
End If
If Target.Value Sheets("Torschützen gesamt").Rows("14").Hidden = True
Else
Sheets("Torschützen gesamt").Rows("14").Hidden = False
End If
If Target.Value Sheets("Torschützen gesamt").Rows("15").Hidden = True
Else
Sheets("Torschützen gesamt").Rows("15").Hidden = False
End If
If Target.Value Sheets("Torschützen gesamt").Rows("16").Hidden = True
Else
Sheets("Torschützen gesamt").Rows("16").Hidden = False
End If
If Target.Value Sheets("Torschützen gesamt").Rows("17").Hidden = True
Else
Sheets("Torschützen gesamt").Rows("17").Hidden = False
End If
If Target.Value Sheets("Torschützen gesamt").Rows("18").Hidden = True
Else
Sheets("Torschützen gesamt").Rows("18").Hidden = False
End If
If Target.Value Sheets("Torschützen gesamt").Rows("19").Hidden = True
Else
Sheets("Torschützen gesamt").Rows("19").Hidden = False
End If
If Target.Value Sheets("Torschützen gesamt").Rows("20").Hidden = True
Else
Sheets("Torschützen gesamt").Rows("20").Hidden = False
End If
If Target.Value Sheets("Torschützen gesamt").Rows("21").Hidden = True
Else
Sheets("Torschützen gesamt").Rows("21").Hidden = False
End If
If Target.Value Sheets("Torschützen gesamt").Rows("22").Hidden = True
Else
Sheets("Torschützen gesamt").Rows("22").Hidden = False
End If
End If
Vielen Dank für Deine Hilfe und Grüße Kai

Anzeige
AW: Formelergebnis als Bedingung
25.09.2008 00:50:00
Erich
Hallo Kai,
erst mal drei Fragen:
1)
Verstehe ich das richtig, dass bei Änderung von G22 auf einem Tabellenblatt
Zeilen in dem anderen Tabellenblatt "Torschützen gesamt" ein- bzw. ausgeblendet werden sollen?
Oder findet das alles doch innerhalb eines Tabellenblattes statt?
2)
Wie könnte die Formel =ZÄHLENWENN(A23:A26;"<>") Werte über 4 annehmen?
In deiner Prozedur fragst du bis "kleiner als 20" ab. Was, wenn G22 größer oder gleich 20 ist?
(Nebenbei: Warum verwendest du nicht ANZAHL2(...) anstelle von ZÄHLENWENN(...) ?)
3)
Verstehe ich die Logik so richtig?
Wenn G22 = 0, dann Zeilen 1:22 ausblenden
Wenn G22 = 1, dann Zeilen 1:3 einblenden, Zeilen 4:22 ausblenden
Wenn G22 = 2, dann Zeilen 1:4 einblenden, Zeilen 5:22 ausblenden
Wenn G22 = 3, dann Zeilen 1:5 einblenden, Zeilen 6:22 ausblenden
...
Wenn G22 = 18, dann Zeilen 1:20 einblenden, Zeilen 21:22 ausblenden
Wenn G22 = 19, dann Zeilen 1:21 einblenden, Zeile 22 ausblenden
Wenn G22 = 20, dann Zeilen 1:22 einblenden
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort - und erst mal gute Nacht!
Anzeige
AW: Formelergebnis als Bedingung
25.09.2008 01:01:02
Kai
Hi Erich
zu 1) hast du richtig verstanden, sie sollen auf einem anderen Tabellenblatt ausgeblendet werden
zu 2) Anzahl2 geht auch ka warum ich es nicht gemacht habe. ich habe das Problem 2 x in meiner Tabelle und habe die falsche Formel kopiert, die richtige ist: =ZÄHLENWENN(A2:A21;"") oder eben =ANZAHL2(A2:A21)
zu 3) die Logik hast du sehr gut und richtig erklärt!
GN8 Kai
AW: Formelergebnis als Bedingung
25.09.2008 11:27:00
Erich
Hallo Kai,
probier mal

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A2:A21")) Is Nothing Then Exit Sub
With Sheets("Torschützen gesamt")
If Cells(22, 7) = 0 Then
.Rows("1:22").Hidden = True
Else
.Rows("1:" & Cells(22, 7) + 2).Hidden = False
If Cells(22, 7) 

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Formelergebnis als Bedingung
25.09.2008 12:45:56
Kai
HI Erich,
leider funktioniert es nicht, egal was rauskommt, es sind immer alle Zellen ausgeblendet.
Gruß Kai
AW: Formelergebnis als Bedingung
25.09.2008 12:49:31
Kai
Sorry Erich!!!!!!
Klappt perfekt, vielen herzlichen Dank !!!
Gruß Kai
AW: Formelergebnis als Bedingung
25.09.2008 13:08:48
Kai
HI Erich,
ich dachte ich bekomm es hin, aber leider klappt es nicht :-(
es bezieht sich alles wieder auf Zelle G22 nur soll jetzt im Tabellenblatt Torschützenspielt. folgendes passieren:
Wenn G22 = 0, dann Spalte 1:41 ausblenden
Wenn G22 = 1, dann Spalte 1:3 einblenden, Spalte 4:41 ausblenden
Wenn G22 = 2, dann Spalte 1:5 einblenden, Spalte 6:41 ausblenden
Wenn G22 = 3, dann Spalte 1:7 einblenden, Spalte 8:41 ausblenden
...
Wenn G22 = 20, dann Spalte 1:41 einblenden
Vielen Dank für deine umfassende Hilfe!
Viele Grüße Kai
Anzeige
AW: Formelergebnis als Bedingung
25.09.2008 13:42:56
Erich
Hallo Kai,
probier mal

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A2:A21")) Is Nothing Then Exit Sub
With Sheets("Torschützenspielt")   ' heißt das Blatt wirklich so?
If Cells(22, 7) = 0 Then
.Rows("1:41").Hidden = True
Else
.Rows("1:" & 2 * Cells(22, 7) + 1).Hidden = False
If Cells(22, 7) 

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

AW: Formelergebnis als Bedingung
25.09.2008 13:56:00
Kai
Hallo Erich,
es funktioniert, nur diesmal sollten Spalten ausgeblendet werden und nicht Zeilen.
Ein Frage die damit eigentlich nichts zu tun hat, weil ich immer gerne alles nachvollziehe was ich mache, warum hast du : wksS.Rows genommen, ist das irgendwie vorgegeben? Was wäre wenn man noch weitere Blätter hat wo man Zeilen ausblenden möchte? Den Rest habe ich verstanden.
Viele grüße Kai
Anzeige
AW: Formelergebnis als Bedingung
25.09.2008 14:42:00
Erich
Hallo Kai,
sorry, das mit den Spalten habe ich nicht bemerkt, war aber kein Problem für dich.
Der Name wksS ist so entstanden: wks steht für WorkSheet, S für "...spielt",
als Pendant zu "Torschützen gesamt", das per With-Klammer erledigt ist.
Namen sind natürlich Schall und Rauch. Bei kleinen Programmen bevorzuge ich meist kurze Namen,
die aber doch ein wenig sprechend sein sollen.
Du kannst dur dazu z. B. mal anschauen:
VBA in Excel - Grundlagen: Namenskonventionen
Wenn du weitere Blätter einbeziehen willst, kannst du das mit weiteren wksX, wksY, ... analog machen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Formelergebnis als Bedingung
25.09.2008 14:51:21
Kai
Hi Erich,
doch leider ist das mit den Spalten ein Problem für mich, hatte nur Rows durch Columns ersetzt, aber das ist ja noch nicht die Lösung des Problems.

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A2:A21")) Is Nothing Then Exit Sub
intG = Cells(22, 7)
Set wksS = Sheets("Torschützen Spielt.")
With Sheets("Torschützen gesamt")
If intG = 0 Then
.Rows("1:41").Hidden = True
wksS.Columns("1:22").EntireColumn.Hidden = True
Else
.Rows("1:" & 2 * intG + 1).Hidden = False
wksS.Columns("1:" & 2 * intG + 1).EntireColumn.Hidden = False
If intG 


Vielen Dank für die ausführliche Erklärung, hat mir sehr geholfen!
Gruß Kai

Anzeige
AW: Formelergebnis als Bedingung
25.09.2008 17:23:00
Erich
Hi Kai,
Spalten sind (normalerweise) nicxht mit Zahlen, sondern mit Buchstaben beschriftet.
Deshalb funzt Columns("1:5") nicht, dafür aber Columns("A:E").
Man kann aber die Spalten nicht nur mit dem Namen, sondern auch mit dem Index (ohne Gänsefüße) ansprechen:
Columns(1) ist Columns("A").
Mehrere aufeinander folgende Spalten bekommt man dann mit
Range(Columns(1), Columns(5)) ist Columns("A:E")
oder mit.
Columns(1).Resize(, 5)
Das habe ich hier verwendet:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim intG As Integer, wksS As Worksheet
If Intersect(Target, Range("A2:A21")) Is Nothing Then Exit Sub
intG = Cells(22, 7)
Set wksS = Sheets("Torschützenspielt")
With Sheets("Torschützen gesamt")
If intG = 0 Then
.Rows("1:41").Hidden = True
wksS.Columns(1).Resize(, 22).Hidden = True
Else
.Rows("1:" & 2 * intG + 1).Hidden = False
wksS.Columns(1).Resize(, 2 * intG + 1).Hidden = False
If intG 

Noch ein Tipp:
Wenn ein Bereich schon eine oder mehrere ganze Spalten umfasst, ist ".EntireColumn" überflüssig.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Formelergebnis als Bedingung
25.09.2008 21:25:25
Kai
Vielen Dank Erich du warst mir eine riesige Hilfe!!!
Es läuft perfekt!
Viele Grüße Kai
AW: Formelergebnis als Bedingung
30.09.2008 00:12:00
Kai
Hallo, leider benötige ich in dieser Sache nochmal Hilfe, mein ganzes Makro sieht nun wie unten folgt aus, wobei der fettmakierte Teil zusammen noch nicht funktioniert. Ausserdem habe ich 2 Bedingungen, wann Zeilen in einem Blatt ausgeblendet werden sollen. Allerdings funktioniet das ganze nicht, da ja immer nur eine BEdingung ausgeführt wird, da else immer alles wieder einblendet. Die erste Bedingung bezieht sich immer auf den Spieltag und die Makros die Fett makiert sind beziehen sich immer auf die Spieleranzahl. Ausserdem versuche ich noch 2 weitere Sachen in das Makro einzuarbeiten, aber leider ohne Erfolg, ich versuche die beiden mal nach dem Makro zu beschreiben.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$28" Then
If Target.Value 
If Intersect(Target, Range("A2:A21")) Is Nothing Then Exit Sub
intG = Cells(22, 7)
Set wksS = Sheets("Torschützen Spielt.")
Set wksT = Sheets("Spieltagausw.")
With Sheets("Torschützen gesamt")
If intG = 0 Then
.Rows("1:41").Hidden = True
wksT.Rows("3:16").Hidden = True
wksT.Rows("21:34").Hidden = True
wksT.Rows("39:52").Hidden = True
wksT.Rows("57:70").Hidden = True
wksT.Rows("75:88").Hidden = True
wksT.Rows("93:106").Hidden = True
wksT.Rows("111:124").Hidden = True
wksT.Rows("129:142").Hidden = True
wksT.Rows("147:160").Hidden = True
wksT.Rows("165:178").Hidden = True
wksT.Rows("183:196").Hidden = True
wksT.Rows("201:214").Hidden = True
wksT.Rows("219:232").Hidden = True
wksT.Rows("237:250").Hidden = True
wksT.Rows("255:268").Hidden = True
wksT.Rows("273:286").Hidden = True
wksT.Rows("291:304").Hidden = True
wksT.Rows("309:322").Hidden = True
wksT.Rows("327:340").Hidden = True
wksT.Rows("345:358").Hidden = True
wksT.Rows("363:376").Hidden = True
wksT.Rows("381:394").Hidden = True
wksT.Rows("399:412").Hidden = True
wksT.Rows("417:430").Hidden = True
wksT.Rows("435:448").Hidden = True
wksT.Rows("453:466").Hidden = True
wksT.Rows("471:484").Hidden = True
wksT.Rows("489:502").Hidden = True
wksT.Rows("507:520").Hidden = True
wksT.Rows("525:538").Hidden = True
wksT.Rows("545:556").Hidden = True
wksT.Rows("561:574").Hidden = True
wksT.Rows("579:592").Hidden = True
wksT.Rows("597:610").Hidden = True
wksT.Rows("615:628").Hidden = True
wksT.Rows("633:646").Hidden = True
wksT.Rows("651:664").Hidden = True
wksT.Rows("669:682").Hidden = True
wksS.Columns(1).Resize(, 22).Hidden = True
Else
.Rows("1:" & 2 * intG + 1).Hidden = False
wksT.Rows("3:" & 2 * intG + 1).Hidden = False
wksT.Rows("21:" & 2 * intG + 19).Hidden = False
wksT.Rows("39:" & 2 * intG + 37).Hidden = False
wksT.Rows("57:" & 2 * intG + 55).Hidden = False
wksT.Rows("75:" & 2 * intG + 73).Hidden = False
wksT.Rows("93:" & 2 * intG + 91).Hidden = False
wksT.Rows("111:" & 2 * intG + 109).Hidden = False
wksT.Rows("129:" & 2 * intG + 127).Hidden = False
wksT.Rows("147:" & 2 * intG + 145).Hidden = False
wksT.Rows("165:" & 2 * intG + 163).Hidden = False
wksT.Rows("183:" & 2 * intG + 181).Hidden = False
wksT.Rows("201:" & 2 * intG + 199).Hidden = False
wksT.Rows("219:" & 2 * intG + 217).Hidden = False
wksT.Rows("237:" & 2 * intG + 235).Hidden = False
wksT.Rows("255:" & 2 * intG + 253).Hidden = False
wksT.Rows("273:" & 2 * intG + 271).Hidden = False
wksT.Rows("291:" & 2 * intG + 289).Hidden = False
wksT.Rows("309:" & 2 * intG + 307).Hidden = False
wksT.Rows("327:" & 2 * intG + 325).Hidden = False
wksT.Rows("345:" & 2 * intG + 343).Hidden = False
wksT.Rows("363:" & 2 * intG + 361).Hidden = False
wksT.Rows("381:" & 2 * intG + 379).Hidden = False
wksT.Rows("399:" & 2 * intG + 397).Hidden = False
wksT.Rows("417:" & 2 * intG + 415).Hidden = False
wksT.Rows("435:" & 2 * intG + 433).Hidden = False
wksT.Rows("453:" & 2 * intG + 451).Hidden = False
wksT.Rows("471:" & 2 * intG + 469).Hidden = False
wksT.Rows("489:" & 2 * intG + 487).Hidden = False
wksT.Rows("507:" & 2 * intG + 505).Hidden = False
wksT.Rows("525:" & 2 * intG + 523).Hidden = False
wksT.Rows("545:" & 2 * intG + 543).Hidden = False
wksT.Rows("561:" & 2 * intG + 559).Hidden = False
wksT.Rows("579:" & 2 * intG + 577).Hidden = False
wksT.Rows("597:" & 2 * intG + 595).Hidden = False
wksT.Rows("615:" & 2 * intG + 613).Hidden = False
wksT.Rows("633:" & 2 * intG + 631).Hidden = False
wksT.Rows("651:" & 2 * intG + 649).Hidden = False
wksT.Rows("669:" & 2 * intG + 667).Hidden = False
wksS.Columns(1).Resize(, 2 * intG + 1).Hidden = False
If intG 
End Sub


Da wenn der Wert 0 ist eh alles ausgeblendet werden soll, kann ich den Teil, der fett und kursiv ist so umschreiben? wksT.Rows("3:682").Hidden = True
Ausserdem möchte ich noch folgendes in das Makro aufnehmen:
Das Makro ist in Datenerfassung.
Im Datenblatt Spielerausw. wenn in Blatt Datenerfassung Zelle G,22
0= dann Zeilen 1 bis 880 ausblenden
1= dann Zeilen 1 bis 44 einblenden 45 bis 880 ausblenden
2= dann Zeilen 1 bis 88 einblenden 89 bis 880 ausblenden
3= dann Zeilen 1 bis 132 einblenden 133 bis 880 ausblenden
....
18= dann Zeilen 1 bis 792 einblenden 793 bis 880 ausblenden
19= dann Zeilen 1 bis 836 einblenden 837 bis 880 ausblenden
20= dann Zeilen 837 bis 880 einblenden
Im Datenblatt Torspielerausw. wenn in Blatt Datenerfassung Zelle c,23
=0 dann Zeilen 1 bis 176 ausgeblendet
=1 dann Zeilen 1 bis 44 eingeblendet 45 bis 176 ausgeblendet
=2 dann Zeilen 1 bis 88 eingeblendet 89 bis 176 ausgeblendet
=3 dann Zeilen 1 bis 132 eingeblendet 133 bis 176 ausgeblendet
=4 dann Zeilen 1 bis 176 eingeblendet
Hoffe mir kann jemand helfen, deshalb schonmal vielen Dank!
Viele Grüße Kai

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige