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

Forumthread: VBA Zellenwert suchen und nebenstehenden ausgeben

VBA Zellenwert suchen und nebenstehenden ausgeben
17.02.2015 09:36:11
Dieter
Hallo liebes Herber Forum,
folgender Aufbau ist gegeben:
Hallo -- 14 (Fasst die Werte A,B,C,D zusammen)
A -- 2
B -- 3
C -- 4
D -- 5
Hallo -- 12 (Fasst die Werte E,B,C,D zusammen)
E -- 2
B -- 3
C -- 4
D -- 3
Hallo
...
Anmerkung: Bei den Werten (A,B,C,D... handelt es sich nicht um Spaltenindizes sondern um Wertbeschreibungen bzw Namen!)
Ich benötige ein Makro, dass in einer Schleife alle "Hallo" sucht und dann die Werte, der darunterstehenden Zellen (bis zum nächsten Hallo!) sucht und Addiert bzw. darauf hin neben dem Hallo ausgibt.
Hier:
A+B+C+D = 2+3+4+5 = 14
bzw.
E+B+C+D = 2+3+4+3 = 12
Hat jemand einen Lösungsvorschlag für mich?
Um Hilfe bin ich überaus dankbar,
MfG,
Dieter Nasch

Anzeige

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Braucht kein VBA
17.02.2015 10:13:40
Klaus
Hallo Dieter,
deine Werte stehen ab A1. Die Zusammenfassung immer rechts von "Hallo" ermittelt folgende Formel:
=WENN(A1="Hallo";SUMME(INDEX(A:A;ZEILE()+1):INDEX(A:A;ZEILE()-1+VERGLEICH("Hallo";A2:A$1048576;))); "")
Grüße,
Klaus M.vdT.

wenn es immer genau 4 ...
17.02.2015 10:15:36
Klaus
... Werte sind die nach dem "Hallo" stehen, geht das auch kürzer:
=WENN(A1="Hallo";SUMME(INDEX(A:A;ZEILE()+1):INDEX(A:A;ZEILE()+4));"")
Grüße,
Klaus M.vdT.

Anzeige
AW: wenn es immer genau 4 ...
17.02.2015 10:28:27
Dieter
Schönen guten Tag,
ich habe mein Problem einfacher ausgedrückt als es eigentlich ist.
Es geht um eine Tabelle mit mehreren Hundert solcher Hallo's, ebenfalls variiert die Zahl der Zellen die Addiert werden muss.
Folgender Code wird derzeit verwendet: Sub Hallofinden() Dim strSuche As String Dim rngFound As Range Dim strFirstAddress As String Dim i As Long i = 5 strSuche = "Hallo" Set rngFound = Columns(2).Find(What:=strSuche, After:=Cells(Rows.Count, 2), LookIn:=xlValues, _ LookAt:=xlWhole) If rngFound Is Nothing Then Exit Sub strFirstAddress = rngFound.Address Do Cells(i, 4).Value = rngFound.Offset(, 1).Value Set rngFound = Columns(2).FindNext(rngFound) i = i + 1 Loop While rngFound.Address strFirstAddress Dieser Code spuckt bisher alle Nebenstehenden Werte in einem von mir vordefinierten Bereich (ab D5) aus.
Das Makro soll eben die Arbeit, die bisher immer Manuell durchgeführt wurde, abnehmen. Hierzu soll es die "Überschriften" namens "Hallo" finden und alle "Unterpunkte" namens "A,B,C,D..." bis zur nächsten Überschrift addieren und ausgeben.
MfG,
Anton Huber

Anzeige
Hallo in Spalte B
17.02.2015 10:41:35
Erich
Hi Dieter - Anton - Witzbold?, :-)
aus deinem Code ergibt sich, dass die Texte ("Hallo" u.a.) wohl in Spalte B stehen.
Wo stehen nun die zu addierenden Werte?
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

AW: Hallo in Spalte B
17.02.2015 10:47:10
Dieter
Hallo,
hoppala, da hat sich der Fehlerteufel eingeschlichen. Dieser Account wird von mir und meinem Kollegen abwechselnd genutzt, der sich ein Büro mit mir teilt. Deshalb das durcheinander der Namen :)
Die Namen stehen in Spalte B, die Werte in Zeile C.
MfG,
Dieter Nasch

Anzeige
AW: Hallo in Spalte B
17.02.2015 10:58:03
Klaus
Hallo Dieter,
meine erste Formel löst dein Problem. Falls nicht, zeige bitte eine Musterdatei.
Grüße,
Klaus M.vdT.

AW: Hallo in Spalte B
17.02.2015 11:18:52
Dieter
Hallo,
Der Ansatz ist wirklich klasse und funktioniert mit einer Ebene wunderbar.
Hier ein etwas ausführlicheres Beispiel, da wir es hier mit mehreren Ebenen zu tun haben:

Die Datei https://www.herber.de/bbs/user/95811.xlsx wurde aus Datenschutzgründen gelöscht


Ich hätte direkt von Anfang an ein konkretes Beispiel posten sollen - vergesse manchmal dass ihr alle hier ja so fit in Excel seid, dass für mich komplexes für euch ein Kinderspiel ist :)
MfG,
Dieter Nasch

Anzeige
AW: Hallo in Spalte B
17.02.2015 11:49:44
Klaus
Hi Dieter,
aus deiner Erklärung habe ich es so verstanden:
https://www.herber.de/bbs/user/95812.xlsx
Deckt sich aber nicht 100% mit deinen Mustervorgaben. Wenn das noch nicht passt, erkläre bitte die Logik genauer.
Grüße,
Klaus M.vdT.

Anzeige
AW: Hallo in Spalte B
17.02.2015 12:59:05
Dieter
Hallo,
wir kommen dem ganzen immer näher.
Das Problem ist folgendes:
Wir haben hier ja verschiedene Ebenen - Hallo3 bis Hallo 6.
Die Ebenen sind so gestaffelt, dass Hallo6 ALLE Hallo 5 beinhalten soll, bis die nächste Hallo 6 Ebene beginnt. Dieser Wert ist genauso hoch, wie die Summe aller Werte OHNE Ebene.
Die Ebene Hallo 5 soll alle Hallo4 Ebenen beinhalten, bis die nächste Hallo5 oder Hallo6 Ebene erscheint. Ebenso beinhaltet Hallo5 sogesehen alle Werte OHNE Ebene eben bis zur nächsten gleichen oder höher gestellten Ebene.
Das gleiche Prinzip soll für die Hallo4 Ebene (Alle Hallo3 Ebenen) angewandt werden. Mit dem Makro von Erich G. findet man schon mal alle Hallo3 und addiert die dazugehörigen Werte bis zum nächsten Hallo3, jedoch macht die Funktion nicht bei Hallo4/Hallo5/Hallo6 halt.
Ich denke dass dieser Ansatz der vielversprechendere Ist, da ich ja eine Tabelle bekomme die schon Werte eingetragen hat. Wenn ich darauf eine Formel anwenden muss, überschreibe ich die schon vorhandenen Werte.
Hier nochmal das Makro von Erich G.:
Option Explicit
Sub HalloAdd()
Dim lngQ As Long, arQ, zz As Long, dSum As Double
lngQ = Cells(Rows.Count, 2).End(xlUp).Row
arQ = Cells(1, 1).Resize(lngQ, 2)
For zz = lngQ To 1 Step -1
If arQ(zz, 1) = "Hallo3" Then
Cells(zz, 2) = dSum
dSum = 0
Else
dSum = dSum + Cells(zz, 2)
End If
Next zz
End Sub
Dieses Makro schafft es, die Hallo3 Werte OHNE Ebene bis zum nächsten Hallo3 zu addieren - jedoch macht es leider vor keinem Hallo4/Hallo5/Hallo6 halt.
Es wäre perfekt wenn dieses Makro so umgeschrieben werden könnte, dass zuerst ein Hallo3 gesucht wird und bei Hallo3/Hallo4/Hallo5/Hallo6 gestoppt wird, danach die Hallo4 (Stop bei Hallo4/Hallo5/Hallo6), dann die Hallo5 (Stop bei Hallo5/Hallo6) und zum Schluss die Hallo6 (Stop bei Hallo6).
Ich hoffe ich konnte das ganze verständlich darstellen und drücke mich nicht wirr aus - Ich danke dir/euch schon mal für die aufgebrachte Mühen. Wirklich sehr sehr nett von dir bzw euch allen!
MfG,
Dieter Nasch

Anzeige
AW: Hallo in Spalte B
17.02.2015 13:03:40
Dieter
aus versehen zugemacht, entschuldigt den Doppelpost.

AW: Hallo in Spalte B
17.02.2015 13:13:37
Klaus
Ok, wir nähern uns Dieter :-)
folgende Formel in einer Hilfsspalte löst die Aufgabe:
=WENN(LINKS(A2;5)="Hallo";SUMME(B1:INDEX(B:B;WENNFEHLER(ZEILE()+VERGLEICH(A2;$A3:$A$1048576;); 1048576)));B2)
Per Makro würde ich das genauso lösen, einfach die Formel per Makro schreiben und in Werte umwandeln.
Sub Makro1()
Const fRow As Long = 2
Dim lRow As Long
Const sFrei As Long = 8 'Spalte H ist frei --- oder eine andere Spalte nehmen
With ActiveSheet
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range(.Cells(fRow, sFrei), .Cells(lRow, sFrei)).FormulaR1C1 = _
"=IF(LEFT(RC[-7],5)=""Hallo"",SUM(R[-1]C[-6]:INDEX(C[-6],IFERROR(ROW()+MATCH(RC[-7],R[1] _
C1:R" & .Rows.Count & "C1,)," & .Rows.Count & "))),RC[-6])"
.Cells(1, sFrei).EntireColumn.Copy
.Cells(1, 2).PasteSpecial xlPasteValues
.Cells(1, sFrei).EntireColumn.ClearContents
End With
End Sub
Grüße,
Klaus M.vdT.

Anzeige
AW: Hallo in Spalte B
17.02.2015 13:35:01
Dieter
Das klappt schon mal nicht schlecht! Folgendes Problem:
https://www.herber.de/bbs/user/95818.xlsx
Ich bekomme die Datei schon vor-ausgefüllt und muss quasi die Rechnungen überprüfen, ob sie stimmen. Wenn ich deine Formel verwende, werden sie quasi doppelt addiert - wie kann ich das umgehen?
Ich hab jetzt mal in Spalte 2 das ganze so ausgefüllt, wie ich es normalerweise ausfülle. Einfache Summenformeln, aber halt im richtigen Dokument bei über 300 Spalten. Dafür gehen meist locker ein paar Arbeitsstunden drauf :/
Ausserdem - warum addiert die Formel in F33 in meinem Dokument 1700? Darunter stehen gar keine Werte mehr?
MfG,
Anton Huber

Anzeige
AW: Hallo in Spalte B
17.02.2015 13:37:37
Dieter
Der Kollege hat den Thread leider erneut geschlossen, deshalb leider wieder ein Doppelpost.
MfG,
Dieter Nasch

AW: Hallo in Spalte B
17.02.2015 15:01:17
Klaus
Das doppelt addieren kommt, weil du in B1 anfängst zu addieren statt in B2. Hier die richtige Formel:
=WENN(LINKS(A2;1)="X";SUMME(B2:INDEX(B:B;WENNFEHLER(ZEILE()+VERGLEICH(A2;$A3:$A$1048576;); 1048576))) ;B2)
Die Hilfsspalte ist auch nicht mehr notwendig. Ich hab dir das hochgeladen:
https://www.herber.de/bbs/user/95823.xlsx
Die Spalte F einfach Kopieren / Inhalte einfügen nach Spalte B. Wenn du magst per Makro.
In den Spalten G bis P habe ich gemalt, damit ersichtlich ist wo die Ergebnisse herkommen.
Ist das Ergebnis für X4 in Zeile 7 richtig? X4 zieht sich von Zeile 7 bis Zeile 11, da steht Initial ja nichts drin und die Lösung ist 0.
In Zeile 10 steht jetzt aber X5. Das hat keinen Partner mehr, zeiht darum die gesamte Menge ab Zeile 10 und ergibt 93710.
Jetzt steht aber in Zeile 10 die Zahl 93710, also müsste X4 nicht mehr 0 ergeben sondern 93710. Dies ist ein Zirkelbezug.
Grüße,
Klaus

Anzeige
AW: Hallo in Spalte B
18.02.2015 09:12:38
Dieter
Hallo und guten Morgen,
Zurück im Büro kann ich folgendes sagen:
Der Zirkelbezug entsteht meiner Meinung nach dadurch, dass es nur ein Ausschnitt ist. Im großen Dokument hat jedes X seine(n) Partner und es endet auf X2 Ebene (X2 = Elemente wie "Du/3A/A1/15").
Das Problem, dass ich habe, ist dass die Formel bei mir im Großen Dokument Werte doppelt, dreifach oder sogar fünffach nimmt, ein Beispiel:
X6 Sollwert: 2.107.603
X6 Seinwert mit Formel: 10.538.018
genau 5x so viel (die Abweichung von 3 lasse ich mal außen vor, kommt von den Kommastellen ;) )!
Das liegt daran, dass ich die Datei so vom Server Beziehe, dass die X6/X5/X4/X3 Werte schon eingetragen sind - die Formel soll diese Quasi nur überprüfen. Im jetzigen Aufbau greifft sie dann aber doppelt oder dreifach zu. Dies lässt sich ganz einfach demonstrieren, indem man die Soll-Werte in Spalte B mit einträgt - und dann stimmen die Ergebnisse leider nicht mehr in Spalte F.
https://www.herber.de/bbs/user/95833.xlsx
MfG,
Dieter Nasch

Anzeige
Bahnhof :-)
18.02.2015 10:02:53
Klaus
Hallo Zusammen,
ich habe mehrere Lösungsansätze gezeigt, weiter unten gibt es einen VBA-Lösungsansatz. Formel kann man (per VBA) mit ihren Werten ersetzen.
Ich vermute, dein "großes" Dokument sieht wieder anders aus als deine Musterdatei. Wenn du nicht zeigst was du hast oder es exakt erklärst, kann ich dir auch nicht helfen! In den Musterdateien habe ich deine Anfrage jeweils beantwortet, meine Frage nach der doppelt-Zählung von überlappenden Bereichen blieb aber unbeantwortet.
Jetzt sagst du, das stehen schon Werte die nur überprüft werden sollen - bis vorher war die Aufgabe, die Formeln in die Zellen rein zu schreiben.
Vielleicht kommt ein Teil der Verwirrung auch daher, dass ihr zu zweit schreibt?
Auf jedem Fall verstehe ich nur Bahnhof :-) Ich an eurer Stelle würd mal die echte Datei hochladen, natürlich vorher alle sensiblen Informationen ersetzen (Artikelnummern in 123456, Namen in Max Mustermann, Firmenlogos löschen). Vielleicht fällt dann ja der Groschen.
Grüße,
Klaus M.vdT.

Anzeige
AW: Bahnhof :-)
18.02.2015 10:12:39
Dieter
Hallo!
Wie es der Zufall so will - die Formel klappt nun!
Das "große" Dokument ist eigentlich nur dahingehend anders, dass es größer ist - haha :)
Ich umgehe das ganze jetzt einfach dadurch, dass ich per Makro einen Filter setze und darauf hin alle voreingefüllten X6/X5/X4/X3 levels lösche (da diese eh zum Teil falsch sind, deshalb müssen wir sie ja korrigieren) - die Formel berechnet daraufhin alle neu fein brav und richtig, habe es gerade bei über 300 Zeilen kontrolliert :)
Du glaubst nicht wie viel Arbeit du uns damit hier erspart hast - vielen Herzlichen Dank!!
Wünsche dir noch einen schönen Tag und ich danke dir vielmals für deine aufgebrachte Zeit.
MfG,
Dieter Nasch

Anzeige
Danke für die Rückmeldung! Schön ...
18.02.2015 10:30:33
Klaus
... dass es doch noch geklappt hat, und schön dass es per Formel geht und ohne VBA!
Grüße,
Klaus M.vdT.

VBA-Lösung
17.02.2015 10:26:06
Erich
Hi Dieter,
aus deinem Beitrag wird der Tabellenaufbau nixcht wirklich klar. Was bedeuten die "--"?
Stehen die Texte ("Hallo" und andere) in Spalte A, Werte in Spalte B?
In dieser Tabelle wurden die gelben Zellen per VBA gefüllt:
 AB
1 0,00001
2Hallo0,011
3 0,001
4 0,01
5Hallo1111
6 1
7 10
8 100
9 1000
10Hallo1100000
11 100000
12 1000000
13Hallo0
14  


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
Hier die Routine:

Option Explicit
Sub HalloAdd()
Dim lngQ As Long, arQ, zz As Long, dSum As Double
lngQ = Cells(Rows.Count, 2).End(xlUp).Row
arQ = Cells(1, 1).Resize(lngQ, 2)
For zz = lngQ To 1 Step -1
If arQ(zz, 1) = "Hallo" Then
Cells(zz, 2) = dSum
dSum = 0
Else
dSum = dSum + Cells(zz, 2)
End If
Next zz
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Werte in Excel mit VBA suchen und nebenstehenden ausgeben


Schritt-für-Schritt-Anleitung

Um in Excel mit VBA einen bestimmten Zellenwert zu suchen und den danebenstehenden Wert auszugeben, kannst du folgendes Makro verwenden.

  1. Öffne den VBA-Editor: Drücke ALT + F11.
  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle "Einfügen" -> "Modul".
  3. Kopiere den folgenden Code in das Modul:
Option Explicit
Sub HalloAdd()
    Dim lngQ As Long, zz As Long, dSum As Double
    lngQ = Cells(Rows.Count, 2).End(xlUp).Row ' Bestimme die letzte Zeile in Spalte B
    For zz = lngQ To 1 Step -1
        If Cells(zz, 1).Value = "Hallo" Then
            Cells(zz, 2).Value = dSum ' Ausgabe der Summe neben "Hallo"
            dSum = 0 ' Zurücksetzen der Summe
        Else
            dSum = dSum + Cells(zz, 2).Value ' Werte addieren
        End If
    Next zz
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Führe das Makro aus: Drücke ALT + F8, wähle "HalloAdd" und klicke auf "Ausführen".

Das Makro sucht nach dem Text "Hallo" in Spalte A und gibt die Summe der danebenstehenden Werte in Spalte B aus.


Häufige Fehler und Lösungen

  • Fehler: "Typen unverträglich"

    • Stelle sicher, dass die Zellen, die addiert werden sollen, keine Textwerte enthalten. Verwende Val() oder CDbl() um sicherzustellen, dass nur numerische Werte verarbeitet werden.
  • Fehler: "Laufzeitfehler 1004"

    • Überprüfe, ob deine Daten in der richtigen Spalte angeordnet sind. Das Makro geht davon aus, dass die Werte in Spalte B stehen.
  • Doppelte Addition

    • Achte darauf, dass deine Daten strukturiert sind. Wenn bereits Summen in der Spalte stehen, kann es zu doppelten Additionen kommen.

Alternative Methoden

Neben VBA kannst du auch einfache Excel-Formeln verwenden, um ähnliche Ergebnisse zu erzielen:

  • Formel zur Summierung: Wenn die Daten in Spalte A und B stehen, kannst du in Zelle C1 die folgende Formel verwenden:
=WENN(A1="Hallo";SUMME(B1:INDEX(B:B;VERGLEICH("Hallo";A:A;0)-1));"")

Diese Formel summiert alle Werte unter dem "Hallo" bis zum nächsten "Hallo".


Praktische Beispiele

Stell dir vor, du hast folgende Daten:

A B
Hallo 14
A 2
B 3
C 4
D 5
Hallo 12
E 2
B 3
C 4
D 3

Wenn du das Makro HalloAdd ausführst, wird in der Spalte B neben den "Hallo"-Zellen die Summe der Werte (14 und 12) ausgegeben.


Tipps für Profis

  • Verwende Named Ranges: Um die Handhabung deiner Daten zu vereinfachen, verwende benannte Bereiche. Dadurch wird der Code lesbarer und wartungsfreundlicher.
  • Fehlerbehandlung: Implementiere On Error Resume Next im VBA-Code, um Laufzeitfehler zu vermeiden und um sicherzustellen, dass dein Makro auch bei unerwarteten Eingaben weiterläuft.
  • Optimierung: Bei größeren Datenmengen kann es sinnvoll sein, die Bildschirmaktualisierung mit Application.ScreenUpdating = False zu deaktivieren, um die Ausführungsgeschwindigkeit zu erhöhen.

FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, um nach einem anderen Text zu suchen? Du musst nur den Text "Hallo" im Code durch den gewünschten Suchtext ersetzen.

2. Funktioniert das Makro in allen Excel-Versionen? Ja, das VBA-Makro funktioniert in Excel 2010 und späteren Versionen.

3. Was mache ich, wenn meine Daten in einer anderen Spalte stehen? Ändere die Spaltenreferenz im Code (Cells(zz, 1) und Cells(zz, 2)), um sie an die neuen Positionen anzupassen.

4. Kann ich das Makro automatisieren? Ja, du kannst das Makro so einstellen, dass es bei bestimmten Ereignissen (z. B. beim Öffnen der Datei) automatisch ausgeführt wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige