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

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

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.

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

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.

Anzeige
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

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

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

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige