Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
852to856
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
852to856
852to856
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

problem mit schleife

problem mit schleife
20.03.2007 11:47:00
daniel
hallo,
will folgenden code als schleife realisieren:
(wobei sich lediglich die fett dargestellten stellen jeweils um 1 erhöhen (von 1 auf, von b auf c usw.)
hab es schon ohne schleife versucht, aber der code wird dann zu lang (mehr als 64kb).
bin für jede hilfe dankbar.
gruß daniel
'schreibt den namen des quotienten in zeile A84'
'und soll nur ein mal durchlaufen'
'1. Quotient'
Range("A84").Select
ActiveCell.FormulaR1C1 = "AC C0 / (C16 + C18)"
'folgendes soll alles einmal durchlaufen (bis z.b. DD), fett dargestelltest ändert sich um einen wert'
'1'
Columns("A:A").Select
Selection.Find(What:="c 0").Activate
ActiveCell.Offset(0, 1).Range("A1").Select 'beim nächsten durchlauf 2'
ActiveCell.Copy ([b85]) 'beim nächsten durchlauf c'
Columns("A:A").Select
Selection.Find(What:="c16").Activate
ActiveCell.Offset(0, 1).Range("A1").Select 'beim nächsten durchlauf 2'
ActiveCell.Copy ([b86]) 'beim nächsten durchlauf c'
Columns("A:A").Select
Selection.Find(What:="c18").Activate
ActiveCell.Offset(0, 1).Range("A1").Select 'beim nächsten durchlauf 2'
ActiveCell.Copy ([b87]) 'beim nächsten durchlauf c'
Range("B84").Select 'beim nächsten durchlauf c'
ActiveCell.FormulaR1C1 = "=R[1]C/(R[2]C+R[3]C)"
Range("B85").Select 'beim nächsten durchlauf c'

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: problem mit Frage
20.03.2007 12:33:00
Rudi
Hallo,
was hältst du davon mal auf die Antworten von gestern zu reagieren?
Ich behaupte mal: Dein Problem versteht keiner!
Du wirfst hier ein Stück deines Weges rein ohne dein Ziel zu nennen. So nach dem Motto: Ich bin zwischen Köln und Düsseldorf. Gibt es eine Abkürzung?
Select/ Activate ist fast immer überflüssig.
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe
AW: problem mit schleife
20.03.2007 12:55:45
daniel
rudi,
hast ja recht, bin halt vba neuling.
der code ist ja nur ein auszug aus meinem schon funktionierenden makro.
wobei der rest ja gleich ist, es ändert sich ja immer nur der offset-bezug und der zellbezug. und weil der code in meinem makro nun zu lang ist und die quotienten nur bis zur spalte bo geht (weil der code zu groß ist (größer 64kb), soll das ganze via schleife realisiert werden), mir fehlt nur der richtige ansatz.
es sollen lediglich aus einer tabelle mit ca. 30 parametern 3 (C0, C16 u. C18) herausgesucht werden und
der quotient C0 / (C16 + C18) gebildet werden, und das über viele/alle spalten, die quotienten sollen dann bestenfalls ans ende der tabelle (1. frei zeile) ausgegeben werden.
hoffe mich nun verständlicher ausgedrückt zu haben
gruß daniel
Anzeige
AW: problem mit schleife
20.03.2007 13:14:00
Rudi
Hallo,
hoffe mich nun verständlicher ausgedrückt zu haben

Nein.
Beispielmappe?
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe
AW: problem mit schleife
20.03.2007 13:35:55
Rudi
Hallo,
schön und gut! Und jetzt?
Wenn du eine Lösung willst, solltest du dein Problem genau beschreiben.
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe
AW: problem mit schleife
20.03.2007 13:46:58
daniel
hallo,
noch genauer?
ich versuch's:
in der ersten spalte soll die ausgabe "C0 / (C16 + C18)" erfolgen, in der spalte B der entsprechende
quotient und das bis zur 1. leeren spalte.
da die parameter, die benötigt werden nicht immer an der selben position stehen (weil die anzahl der parameter schwankt), müssen die parameter erst gesucht werden.
1. suchen der parameter
2. quotient berechnen
3. ausgabe des quotienten hinter den letzten parameter.
(und das für jeden datensatz / jede spalte
auch die anzahl der datensätze schwankt, deshalb müsste die schleife solange durchlaufen werden,
bis die erste leere spalte folgt.
(diese bsp-datei wird jeden tag neu mit anderen datensätzen erzeugt, und sieht demnach auch immer anders aus, wobei sich nur die anzahl der datensätze und und reihenfolge der parameter ändert.
ich hoffe, du kannst damit etwas anfangen!
vielen dank
gruß daniel
Anzeige
Ich bin raus o.w.T.
20.03.2007 14:41:05
Rudi
AW: problem mit schleife
20.03.2007 14:10:00
mpb
Hallo Daniel,
Du machst es den Antwortern aber nicht leicht. Wen ich Deine Angaben in diesem und dem vorherigen Thread und in der Beispieldatei richtig verstehe, möchtest Du folgendes:
1. In der Spalte A sollen die Zellen gesucht werden, in denen die Texte "C 0", "C16" und "C18" vorkommen. In Deiner Beispieldatei wären das die Zellen A12, A29 und A32. Ist das so richtig? Welche Zellen sollen gefunden werden, wenn die Einträge "C 0", "C16" und "C18" mehrfach vorkommen? In Deiner Beispieldatei steht z.B. "C 0" auch in den Zellen A64 und A75.
2. In die Zellen B84, C84 usw. soll dann folgende Formel eingetragen werden (Beispiel für die gefundenen Zellen unter 1.):
= B12/(B29+B32)
= C12/(C29+C32)
usw. bis zur letzten besetzten Spalte (in Deiner Beispieldatei bis Spalte Z.
Hierfür möchtest Du eine Schleife verwenden.
Habe ich das so richtig beschrieben? Wenn nein, bitte in ähnlicher Form wie ich es versucht habe das Problem noch einmal neu schildern.
Gruß
Martin
Anzeige
AW: problem mit schleife
21.03.2007 09:12:09
daniel
hallo martin,
ja soweit hast du das richtig verstanden. das C0 in den zellen A64 und A75 auch vorkommt ist unwichtig, es geht nur um C0, nicht um C3/C0!
ich weise nach mal darauf hin, dass die datei die erzeugt wird, jeden tag anders aussieht, deshalb ist es wichtig, dass nach den parametern gesucht wird, da C0 z.b. nicht immer bei A12 liegt.
das makro muss also für jede datei, die neu erzeugt wird verfügbar sein (über PERSONL.xls).
1. parameter suchen (Selection.Find(What:="c 0").Activate)
(ich habe es bisher so gemacht, das ich - nachdem ich die parameter gesucht habe - die werte zur quotientenberechnung nach unten kopiere und dann erst aus diesen werten den quotient berechne und dann die kopierten werte lösche, sodass am ende nur der quotient unten steht, ist vielleicht kompliziert und umständlich und geht sicherlich einfacher.)
wenn der code nicht so lang wäre, würde es auch ohne schleife funktionieren, jedoch wäre eine lösung mit hilfe einer schleife sicher schneller und übersichtlicher.
danke schon mal für deine geduld, und wenn noch etwas unklar sein sollte :) einfach fragen.
gruß daniel
Anzeige
Noch drei Nachfragen
21.03.2007 09:27:00
mpb
Hallo Daniel,
soweit klar. Noch zwei Nachfragen:
1) Du schreibst: "das C0 in den zellen A64 und A75 auch vorkommt ist unwichtig, es geht nur um C0, nicht um C3/C0!". Wenn in Spalte A "C3/C0" eher vorkommt als "C0", dann wird aber die falsche Zelle ausgewählt. Soll also nach " C0 " gesucht werden, d.h. vor und nach dem Suchtext eine Leerstelle? Gilt das auch für die beiden anderen zu suchenden Zellen?
2) Wenn der Tabellenaufbau wechselt, soll das Berechnungsergebnis in die erste freie Zeile unter der Tabelle geschrieben werden?
3) Möchtest Du in der Ergebniszeile Formeln oder Werte stehen haben?
Gruß
Martin
Anzeige
AW: problem mit schleife
21.03.2007 09:45:31
daniel
hallo,
zu 1)
also "C0" kommt immer vor (C16 und C18 auch), es kommt nur häufig vor, dass andere neue parameter
hinzukommen, die aber mit der quotientenberechnung nichts zu tun haben. mit den leerstellen weiss ich nicht genau was du meinst, fakt ist, dass mit folgenden befehlen die richtigen parameter gefunden werden.
Selection.Find(What:="c 0").Activate
Selection.Find(What:="c16").Activate
Selection.Find(What:="c18").Activate
zu 2)
der tabellenaufbau ändert sich nur in sofern, dass es mehr oder weniger spalten (also datensätze) und/oder mehr oder weniger zeilen (also parameter) sind. ja, das ergebnis soll in die erste frei zeile ausgegeben werden, sprich hinter dem letzten parameter.
zu 3)
das ergebnis soll als wert dargestellt werden (oder meinst du damit, dass hinter dem dargestellten wert die formel steht? wenn ja, ist das auch ok, hauptsache man kann die quot. sehen und das ganze dann drucken.
PS: ich muss noch dazu sagen, dass "C0 / (C16 + C18) nur einer von vier quotienten ist :(
hinzu kommen: (C16 + C18) / C2
(C16 + C18:1) / C2
(Val + Leu) / (Phe + Tyr)
ich hoffe, dass ich anhand des ersten quotienten und den aufbau der schleife die restlichen quot. ableiten
kann.
danke
gruß daniel
Anzeige
AW: problem mit schleife
21.03.2007 11:08:00
mpb
Hallo Daniel,
folgendes Makro für den ersten Quotienten:

Sub Quotienten_berechnen()
Application.ScreenUpdating = False
s = Range("IV1").End(xlToLeft).Column
z = Range("A65536").End(xlUp).Row
q1 = Columns("A:A").Find(What:="C 0").Row
q2 = Columns("A:A").Find(What:="C16").Row
q3 = Columns("A:A").Find(What:="C18").Row
For i = 2 To s
Cells(z + 1, i) = Cells(q1, i) / (Cells(q2, i) + Cells(q3, i))
Next i
Application.ScreenUpdating = True
End Sub
Nochmal zur Suche: Das Makro durchsucht die Zellen in Spalte A von oben nach unten danach, ob im "Inhalt" der Zelle der Suchtext, z.B. "C 0" vorkommt. In Deiner Beispieldatei steht in
Zelle A12: AC C 0 MRM
und in
Zelle A64 AC C 5DC/C 0 MRM
In beiden kommt der Text "C 0" vor. Das Makro findet bei dieser Konstellation die Zelle A12 (wie gewünscht). Gäbe es den Eintrag aus A64 z.B. in A8, so würde das Makro A8 als "Fundstelle" ansehen, und dass wäre nach Deinen Vorgaben falsch.
Du musst also darauf achten, dass die zu suchenden Texte eindeutig sind. Wenn Du (um in dem Beispiel zu bleiben) nach " C 0 " suchen würdest, so würde dieser Text mit je einer Leerstelle vor dem "C 0" nur in Zelle A12 gefunden, nicht hingegen in Zelle A64.
Gruß
Martin
Anzeige
AW: problem mit schleife
21.03.2007 11:20:17
daniel
erstmal vielen vielen dank für deine bemühungen,
das makro funktioniert einwandfrei. respekt!!!
nochmal zur suche:
in der regel kommt C0, C16 und auch C18 vor C3/C0 usw.! also wenn von oben nach unten gesucht
wird, müsste eigentlich immer der richtige parameter gefunden werden.
ich hoffe anhand deines makros die anderen quotienten via schleife berechnen zu können.
also nochmal vielen dank,
daniel
AW: problem mit schleife
21.03.2007 11:29:51
daniel
das einzige, was noch hinzuzufügen wäre, ist die ausgabe, welcher quotient ausgegeben wurde.
"C0 / (C16 + C18)" in spalte A vor dem ersten quotienten.
danke
gruß daniel
Anzeige
AW: problem mit schleife
21.03.2007 11:37:51
mpb
Hallo Daniel,

Sub Quotienten_berechnen()
Application.ScreenUpdating = False
s = Range("IV1").End(xlToLeft).Column
z = Range("A65536").End(xlUp).Row
q1 = Columns("A:A").Find(What:="C 0").Row
q2 = Columns("A:A").Find(What:="C16").Row
q3 = Columns("A:A").Find(What:="C18").Row
For i = 2 To s
Cells(z + 1, i) = Cells(q1, i) / (Cells(q2, i) + Cells(q3, i))
Next i
Cells(z + 1, 1) = "C 0/(C16+C18)"
Application.ScreenUpdating = True
End Sub

Gruß
Martin
AW: problem mit schleife
21.03.2007 11:47:13
daniel
danke martin,
hab auch schon die anderen 3 quotienten angefügt, was sogar funktioniert.
jetzt müssten die quotienten nur noch auf 3 stellen nach dem komma gerundet werden.
das ist dann auch wirklich alles :)
gruß daniel
Anzeige
AW: problem mit schleife
21.03.2007 11:56:00
mpb
Hallo Daniel,
wieseo antwortest Du eigentlich nicht zu dem Beitrag auf den Du Dich beziehst? Erschwert das lesen des Threads. Hier das Makro mit und ohne Rundung.

Sub Quotienten_berechnen()
Application.ScreenUpdating = False
s = Range("IV1").End(xlToLeft).Column
z = Range("A65536").End(xlUp).Row
q1 = Columns("A:A").Find(What:="C 0").Row
q2 = Columns("A:A").Find(What:="C16").Row
q3 = Columns("A:A").Find(What:="C18").Row
For i = 2 To s
Cells(z + 1, i) = Cells(q1, i) / (Cells(q2, i) + Cells(q3, i))
Cells(z + 2, i) = Application.WorksheetFunction.Round((Cells(q1, i) / (Cells(q2, i) + Cells(q3, i))), 3)
Next i
Cells(z + 1, 1) = "C 0/(C16+C18)"
Application.ScreenUpdating = True
End Sub
Gruß
Martin
AW: problem mit schleife
21.03.2007 12:13:00
daniel
sorry, war ein versehen...
danke nochmal für alles, hab viel von dir gelernt.
gruß daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige