Zählen
- Excel
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.
-
-
-
Hallo xpecidy!
Vielen Dank für Deine schnelle Hilfe. Aber es funktioniert so leider nicht. Ich hab das Problem auch nicht richtig dargestellt. Sorry.
Ich versuche es noch mal.
Es geht darum, Zellenwerte in einem bestimten Bereich zu zählen. Der Bereich "E3:E5" befindet sich im Arbeitsblatt "MANAGER-BASIS". Das Suchkriterium ist zB. "Daimler". Erscheint der Begriff im oben genanten Bereich, so soll er gezählt werden. Verläßt der Begriff den Bereich wieder so soll das Zählergebnis erhalten bleiben. Der Begriff ist nun zwar nicht mehr im genanten Bereich, aber er war einmal dar. Genau das soll gezählt werden. Wie oft war er in diesem Bereich?
Das Zählergebnis selbst soll im Arbeitsblatt "Analyse" in der Zelle "B11" erscheinen.
Ich hoffe das ganze ist jetzt besser zu verstehen und hoffe ferner, dass diese Art zu zählen überhaupt möglich ist. Sollte tatsächlich kein Weg nach Rom führen, teile es mir doch bitte kurz mit.
Mit freundlichen Grüssen
Cutter
Edit by hal2000:
- Die Farbe ROT ist der Moderation vorbehalten.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „hal2000“ ()
-
-
-
Hallo,
du suchst die Formel SUMMENPRODUKT(). Beispiel:
Quellcode
- Tabelle1:
- _|____E____|
- 1| Apfel |
- 2| Daimler |
- 3| Birne |
- 4| Daimler |
- Tabelle2:
- _|_B__|
- 5| 10 |
- 6| 5 |
- 7| 2 |
- 8| 23 |
- ZÄHLENWENNN(Tabelle1.E1:E3;"Daimler") = 2
- SUMMENPRODUKT((Tabelle1.E1:E3="Daimler")*1) = 2
- SUMMENPRODUKT((Tabelle1.E1:E3="Daimler")*(Tabelle2.B5:B8)) = 28
- SUMMENPRODUKT((Tabelle1.E1:E3="Daimler")*1;Tabelle2.B5:B8) = 28
Damit kann man selektiv summieren oder zählen, auch wenn das Kriterium NICHT im selben Bereich liegt wie die Werte. Das ist bei ZÄHLENWENN() und SUMMEWENN() erforderlich.Gruß
hal2000
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „hal2000“ ()
-
Hallo hal2000!
Vielen Dank für Deine Bemühungen. Aber wir reden aneinander vorbei. Schau dir den Text oben noch einmal genau an. Es geht nicht um Summen hier wird nichts addiert und nichts multipliziert. Hier wird nur gezählt. Nämlich, wie oft ein bestimter Begriff in einem vorgegebenen Bereich gewesen ist.
Gruss Cutter -
-
Es soll also eine Art Einmalberechnung sein. Dann verlierst du allerdings die Möglichkeit der Aktualisierung. Es gibt keine Formel dafür, aber du kannst es manuell anstoßen: Zelle mit der Zählenwenn-Formel auswählen und F2-F9-ENTER drücken. Dann kannst du den Begriff aus der Liste entfernen und der berechnete Wert bleibt erhalten. Die Formel ist dann aber auch weg.Gruß
hal2000
-
Servus in die Runde,
je nach dem, wie die Werte in die Zellen kommen, sollte man das mit globalen Variablen lösen können.
Theorie:
- Beim Aktivieren der Mappe prüft man den IST-Stand in dem vorgegebenen Bereich.
- Beim ändern einer Zelle (oder mehrere) prüfen, ob die Änderung im vorgegebenen Bereich erfolgt
- Ist die Änderung im vorgegebenen Bereich erfolgt, überprüfe die neuen Werte mit den gespeicherten
- Schreibe die Summe der Änderungen in die vorgegebene Zelle
- Schreibe die neuen Werte in das globale Array
Praxis:
Spoiler anzeigen
Visual Basic-Quellcode
- Option Explicit
- Private Sub Workbook_Activate()
- Set vBereich = ThisWorkbook.Sheets("Tabelle1").Range("E3:E5")
- Set vZielZelle = ThisWorkbook.Sheets("Tabelle1").Range("H2")
- vSuchbegriff = "Daimler"
- vArrayErmittelnundvergleichen False
- End Sub
- Private Sub Workbook_Deactivate()
- Set vBereich = Nothing
- Set vZielZelle = Nothing
- End Sub
Visual Basic-Quellcode
- Public vArr(2) As Boolean 'Anzahl der Zellen die durchsucht werden
- Public vSuchbegriff As String 'Suchbegriff
- Public vBereich As Range 'Bereich in dem die Suchbegriffe stehen
- Public vZielZelle As Range 'Zelle in der aufsummiert wird
- Sub vArrayErmittelnundvergleichen(vVergleichen As Boolean)
- Dim cell As Range
- Dim i, j As Byte
- 'Gespeicherte Werte mit aktuellen vergleichen
- If vVergleichen = True Then
- For Each cell In vBereich.Cells
- If vArr(i) = False And (cell.Value = vSuchbegriff) Then _
- vZielZelle.Value = vZielZelle.Value + 1
- i = i + 1
- Next
- End If
- 'Aktuelle Werte speichern
- For Each cell In vBereich.Cells
- vArr(j) = cell.Value = vSuchbegriff
- j = j + 1
- Next
- End Sub
lg MarkusDanke an alle, die ihr Wissen freiwillig teilen und stets so kompetent & höflich sindDieser Beitrag wurde bereits 1 mal editiert, zuletzt von „xpecidy“ ()
- Beim Aktivieren der Mappe prüft man den IST-Stand in dem vorgegebenen Bereich.
-
-
Hallo liebe Leute!
Erst mal vielen Dank an alle die sich hier echt bemühen. Ich glaube wir müssen hier weiter ausholen.
Ich bin Börsianer und beschäftige mich mit den 30 Dax-Werten. Diese 30 Dax-Werte habe ich mit "Externe Daten >> Neue Webabfrage" von Ariva.de in Excel geladen. Diese Werte werden alle 60 Sekunden aktualisiert. Und so geschieht es, dass zB. die Daimler-Aktie in der Tabelle mal ganz oben und mal ganz unten ist. Oben ist der Bereich E3:E7 und unten ist der Bereich E9:E13. Erscheint Daimler in den Bereichen, so soll Daimler gezählt werden. Die Zellen in den Bereichen sind alle mit Formeln unterlegt.
Damit fällt "Worksheet_Change" also aus.
Inzwischen hatt man mir nun erklärt, dass das Problem mit "Worksheet_Calculate" zu lösen wäre.
Das heißt, wenn zB. Daimler im Bereich "E3:E7" erscheint dann soll ein Makro aufgerufen werden. Dazu habe ich hier ein kleines Tool welches leider nicht funktioniert.
Private Sub Worksheet_Calculate()
If Range("E3:E7").Value = "Daimler" Then
Call DaimlerO
End If
End Sub
Das Makro selbst funktioniert perfekt. Aber es wird nicht aufgerufen. Was stimmt mit dem Bedingungssatz nicht?
Vieleicht kennt sich jemand mit "Worksheet_Calculate" besser aus.
Gruss Cutter -
-
Cutter2 schrieb:
Damit fällt "Worksheet_Change" also aus.
Du willst wissen, ob Daimler in die Top5 kommt?
Oder was ist dein Problem?
Visual Basic-Quellcode
- Private DaimlerCount As Integer
- Private Sub Worksheet_Change(ByVal Target As Range)
- Set TopRange = Range("B39:B43")
- If Not Intersect(Target, TopRange) Is Nothing Then
- Debug.Print Target.Address
- If Not TopRange.Find("Daimler") Is Nothing Then DaimlerCount = DaimlerCount + 1
- Debug.Print DaimlerCount
- End If
- End Sub
--
If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
-- -
Hallo in die Runde,
so ganz scheint sich der Fragende auch nicht klar zu sein, was er wünscht?!
Ich habe die Problematik so verstanden, dass in den angegebenen Bereichen ein Wort gesucht wird und wie bei einem Besucherzähler hochgezählt wird.
Wenn ein Wort bereits gezählt wurde, soll dieses nicht erneut gezählt/aufaddiert werden, wenn sich eine andere Zelle ändert.
Mein Code sollte das tun. Ich habe es nochmal mit den geänderten Bereichen sowie "Calculate" angefügt. Warum jetzt "Call DaimlerO" aufgerufen wird
und was sich dahinter verbirgt entzieht sich meiner Kenntnis. Vielleicht erhalten wir da eine Aufklärung? Mein Code zählt in der Zelle H2 fortlaufend.
Wenn es kürzer/effektiver geht, will ich gerne dazulernen!!!!! :wacko:
Spoiler anzeigen
Visual Basic-Quellcode
- Option Explicit
- Private Sub Workbook_Activate()
- Set vTbl = ThisWorkbook.Sheets("Tabelle1")
- Set vBereich = Union(vTbl.Range("E3:E5"), vTbl.Range("E9:E13"))
- Set vZielZelle = vTbl.Range("H2")
- vSuchbegriff = "Daimler"
- vArrayErmittelnundvergleichen False
- End Sub
- Private Sub Workbook_Deactivate()
- Set vBereich = Nothing
- Set vZielZelle = Nothing
- Set vTbl = Nothing
- End Sub
Spoiler anzeigen
Visual Basic-Quellcode
- Public vTbl As Worksheet
- Public vArr(7) As Boolean 'Anzahl der Zellen die durchsucht werden
- Public vSuchbegriff As String 'Suchbegriff
- Public vBereich As Range 'Bereich in dem die Suchbegriffe stehen
- Public vZielZelle As Range 'Zelle in der aufsummiert wird
- Sub vArrayErmittelnundvergleichen(vVergleichen As Boolean)
- Dim cell As Range
- Dim i, j As Byte
- 'Gespeicherte Werte mit aktuellen vergleichen
- If vVergleichen = True Then
- For Each cell In vBereich.Cells
- If vArr(i) = False And (cell.Value = vSuchbegriff) Then _
- vZielZelle.Value = vZielZelle.Value + 1
- i = i + 1
- Next
- End If
- 'Aktuelle Werte speichern
- For Each cell In vBereich.Cells
- vArr(j) = cell.Value = vSuchbegriff
- j = j + 1
- Next
- End Sub
Danke an alle, die ihr Wissen freiwillig teilen und stets so kompetent & höflich sind -
-
Ähnliche Themen
-
Zahlwörter aus Zahlen??? Ruby in VBA?
chrischi3101 - - Visual Basic for Applications (VBA) -
3 Zahlen aufsteigerd sortieren
Anfaenger189 - - Visual Basic for Applications (VBA)