Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Zahl in Tabelle finden + nachzählen

VBA Zahl in Tabelle finden + nachzählen
29.11.2021 08:52:37
Sophie
Hallo,
mir ist in Excel eine Tabelle vorgegeben, nun soll ich dazu ein Makro programmieren. Man soll in eine bestimmte Zelle (C19) eine Zahl n eingeben können und daraufhin soll das Programm diese Zahl n in der Tabelle suchen und in einer anderen Zelle angeben wie oft diese Zahl n in der Tabelle vorkommt und wie viele Zahlen keiner als diese Zahl n sind.
Danke im Voraus, Gruß Sophie

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Zahl in Tabelle finden + nachzählen
29.11.2021 09:03:34
{Boris}
Hi,
ist das eine reine VBA-Übung? Ansonsten ist das eine klassische Aufgabe für die Funktion ZÄHLENWENN (die man natürlich auch in VBA nutzen kann über WorksheetFunction.CountIf(...)).
VG, Boris
AW: VBA Zahl in Tabelle finden + nachzählen
29.11.2021 09:06:06
UweD
Hallo
(D)eine Mustertabelle wäre hilfreich.
ansonsten, angenommen
- in Tabelle2 in A2:F10 stehen deine Zahlen
- die Zahl steht alleine in der Zelle und nicht irgendwo im Text
- verwende diese beiden Formeln

=ZÄHLENWENN(Tabelle2!$A$2:$F$10;$C$19)
=ZÄHLENWENN(Tabelle2!$A$2:$F$10;""&$C$19)
LG UweD
AW: VBA Zahl in Tabelle finden + nachzählen
29.11.2021 09:13:15
UweD
Als VBA

Sub Zählen()
Dim RNG As Range
Dim Suchzelle As Range
Set RNG = Sheets("Tabelle2").Range("A2:F10")
Set Suchzelle = Sheets("Tabelle1").Range("C19")
With Suchzelle
.Offset(0, 1) = WorksheetFunction.CountIf(RNG, .Value)
.Offset(0, 2) = WorksheetFunction.CountIf(RNG, "" & .Value)
End With
End Sub
LG UweD
Anzeige
Was brauchst Du...
29.11.2021 09:36:29
{Boris}
Hi,
...denn nun genau: Definitiv VBA-Lösungen oder Formeln?
Das Thema "Größte Zahl / Zeile / Spalte" hatten wir doch z.B. schon mal hier behandelt. Die Antwort auf Deine konkrete Frage hast Du hier auch erhalten - sowohl per Formel als auch per VBA.
Also: Was brauchst Du noch in welcher Form?
VG; Boris
AW: Was brauchst Du...
29.11.2021 09:42:28
Sophie
Ja, die Antwort von gestern war sehr hilfreich aber heute bin ich an einer andren Aufgabe dran. Die genaue Aufgabenstellung ist :
"In der Zelle C19 kann der Benutzer eine Zahl n eingeben. Schreiben Sie ein Visual-Basic-Makro, das nachzählt, wie oft diese Zahl in der Liste vorkommt, wie viele Zahlen kleiner als n in der Liste stehen und was die Summe alles durch n teilbaren Zahlen ist. Diese Ergebnisse sollen in die entsprechenden Zellen in Spalte C ausgeben werden."
In unserem Skript sind leider nur sehr wenig Befehle und deswegen komme ich nicht weiter.
Gruß Sophie
Anzeige
AW: Was brauchst Du...
29.11.2021 10:25:28
{Boris}
Hi,
so in der Art:

Sub test()
Dim lngSuchwert As Long, rngSuchbereich As Range
Dim C As Range, lngSum As Long
Set rngSuchbereich = Range("F7:FA424")
lngSuchwert = Range("C19")
'zählen
Range("C20") = WorksheetFunction.CountIf(rngSuchbereich, lngSuchwert)
'alle die kleiner sind zählen
Range("C21") = WorksheetFunction.CountIf(rngSuchbereich, "
Wobei mich gerade wundert, dass die Summe aller teilbaren mit der Formel
=SUMMENPRODUKT((REST(F7:FA424;C19)=0)*F7:FA424)
ein anderes Ergebnis bringt - bei der beispielhaft gesuchten Zahl 420 ist dies genau um 420 kleiner als in der VBA-Variante...?!
VG, Boris
Anzeige
AW: Vielen Dank
29.11.2021 11:43:04
Sophie
Danke für die Hilfe, hat super geklappt
Nur für`s Archiv...
29.11.2021 14:03:45
{Boris}
...hatte in der Summenprodukt-Formel einen Denkfehler - korrekt muss sie lauten:
=SUMMENPRODUKT((REST(C19;F7:FA424)=0)*F7:FA424)
Dann passen beide Ergebnisse auch wieder zusammen.
AW: Was brauchst Du...
29.11.2021 10:32:51
UweD
Hallo nochmal
zum Letzten Punkt:
- Streng genommen sind alle Zahlen durch den Wert in C19 teilbar. Jedoch nicht alle ohne Rest
- ich denke es ist Restlos gemeint
Hier mal alles...

Sub Zählen()
Dim RNG As Range
Dim MMit As Range, MMax As Range, Mmin As Range
Dim Suchzelle As Range, c
Dim WF, Z, SSum As Long
Set WF = WorksheetFunction
With Sheets("Tabelle1")
Set RNG = .Range("F7:FA424")
Set MMit = .Range("C4")
Set MMax = .Range("C7")
Set Mmin = .Range("C13")
Set Suchzelle = .Range("C19")
End With
'reset
Union(MMit, MMax.Resize(3, 1), Mmin.Resize(3, 1), Suchzelle.Offset(1).Resize(3, 1)).ClearContents
With MMit
.Value = WF.Average(RNG)
End With
With MMax
.Value = WF.Max(RNG)
Set c = RNG.Find(.Value)
.Offset(1, 0) = c.Row - RNG.Row + 1
.Offset(2, 0) = c.Column - RNG.Column + 1
End With
With Mmin
.Value = WF.Min(RNG)
Set c = RNG.Find(.Value)
.Offset(1, 0) = c.Row - RNG.Row + 1
.Offset(2, 0) = c.Column - RNG.Column + 1
End With
With Suchzelle
.Offset(1, 0) = WF.CountIf(RNG, .Value)
.Offset(2, 0) = WF.CountIf(RNG, "
LG UweD
Anzeige
ein Fehler
29.11.2021 10:45:32
UweD
Es muss heißen

If Z = Int(Z / .Value) * .Value Then
oder wie bei Boris

If Z Mod .Value = 0 Then
LG UweD
AW: Was brauchst Du...
29.11.2021 16:00:22
Michael
Und es könnte nicht sein, dass du dieses ZählenWenn schlicht selber schreiben sollst? Und eben nicht die vorgefertigte Formel benutzen sollst?
Das hier lässt sich schön in Boris' Schleife integrieren:
Oben zunächst die Deklarationen...
Dim intCountIfEqual As Integer
Dim intCountIfLess As Integer
~f~
...dann weiter unten in die Schleife unter den vorhandenen IF-Block:
~f~
If C.Value = lngSuchwert Then
intCountIfEqual = intCountIfEqual + 1
ElseIf C.Value < lngSuchwert Then
intCountIfLess = intCountIfLess + 1
End If
VG
Michael
Anzeige

319 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige