Frage von Marceloblau01, 61

Sub ping Makro erweitern, ist folgende Aufgabe für dieses Makro machbar und wenn ja wer könnte mir da eventuell helfen?

Hallo liebe Excel Experten,
folgende Aufgabe ,die ich derzeit noch manuell erledige,möchte ich gern von einem Makro erledigen lassen.
Mein Sub ping Makro überprüft beispielsweise Zelle A1, kommt da der Wert 1 hält es an. In den Zellen B1;C1;D1;E1;F1;G1 befinden sich Formeln die einen Wert errechnen. Dann gibt es andere Formeln die die Werte in B1:G1 vergleichen. Zelle A1 prüft alle Ergebnisse der anderen Formeln.Sind alle Ergebnisse ok, dann schreibt A1 eine 1.Hält also Sup ping an, kopiere ich B1:G1 und füge die "Werte" in I1:N1 ein, dann starte ich Sup ping wieder und füge die Werte in I2:N2 usw usw. Eine Formel die mit A1 verknüpft ist prüft natürlich auch ob die Werte in I:N schon vorkommen. Wenn das ein Makro für mich machen könnte wäre das super. Das Makro sollte erst anhalten wenn ("Sup ping") nach 10.000 Versuchen keine Werte die zueinander passen mehr findet. Vielleicht hat ja jemand eine Lösung oder einen Rat.
Vielen Dank im voraus!!

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Ninombre, Community-Experte für Excel, 44

wie sieht denn das Makro konkret aus?

Mit einer for oder while-Schleife kann man die 10000 Versuche abbilden, dazu müsste noch eine Variable verwendet werden, um nacheinander die Ergebnisse in die jeweils nächste Zeile zu kopieren.

Kommentar von Marceloblau01 ,

Das Sub ping Makro bezieht sich auf A1 und läuft 10.000 mal dann hört es auf wenn auf A1 keine 1 kommt, ich kann dir morgen mal das Sub Ping schicken

Kommentar von Marceloblau01 ,

Die Formel in A (in meinem Falle jetzt A65 lautet =WENN(UND(H65=1;U65=0;V65=0;DA65=0;DB65=0;FF65=FP65;FH65=6;FW65=0);1;0)
Das Makro Sub ping lautet
Sub ping 
i = 1
While Cells(65, 1).Value < > 1 '
Cells (10000, 1). Value = Int (( 49 * Rnd) + 1) '
If i > 10000 Then Exit Sub '
i = i + 1
Wend 
MsgBox (i) '
End Sub

Kommentar von Marceloblau01 ,

Das Sub ping Makro habe ich mal für einen Zahlen Generator bekommen, der Zufallszahlen von 1-49 in bestimmten Zellen mit bestimmten Formeln mit dem Ping zum laufen brachte ich habe das einfach übernommen, ich denke dass das Rnd 49 und die Zelle A10000 da garnicht mit rein gehören, vielleicht kann man das ja da jetzt für den anderen Zweck entfernen

Kommentar von Ninombre ,

wenn weiterhin über normale Formeln Zufallszahlen erzeugt werden ist die Funktion mit dem rnd notwendig. Durch die damit eingetragene Zahl werden die Zufallszahlen durch die Formeln neu erzeugt. Das könnte man vermutlich auch komplett ins Makro übernehmen, wenn Du aber bisher damit klar kommst, kann es so bleiben. Die Zeile im Makro kann man vereinfachen, da es nur irgendeine Änderung sein soll, keine näher bestimmte Zufallszahl

So wird der Ablauf immer 10000 x durchlaufen. Es werden beim Wert 1 in A1 die Werte B1:G1 kopiert und ab Spalte I eingefügt

Sub ping()
k = 1 'Zeile für das erste Ergebnis
For i = 1 To 10000
Cells(12000, 1).Value = Rnd 'ist notwendig um die Zufallswerte durch die Formeln zu erneuern
If Cells(1, 1).Value = 1 Then
Range("B1:G1").Copy
Range("I" & k).PasteSpecial (xlValues)
k = k + 1
End If
Next
MsgBox (i)
End Sub
Kommentar von Marceloblau01 ,

Danke, ich werde es gleich mal probieren!

Kommentar von Marceloblau01 ,

Fehlermeldung bei End If

Kommentar von Ninombre ,

hast Du noch was geändert bzw. was (dein Spaltenaufbau ist ja sicherlich anders)? bei mir läuft es ohne Fehler

Kommentar von Marceloblau01 ,

Das geht irgendwie garnicht,
Ich beschreibe noch mal kurz was ich mache wenn ich es manuell mache
Ich drücke auf den Start Button um den Sub ping zum laufen zu bringen
dann laufen die Rechenaufgaben in B:G
Ich könnte auch die Entfernen-Taste drücken da bräuchte ich den Sub ping nicht, aber so geht's schneller.

kommt in A die 1 hält er an.
dann kopiere ich B:G
und füge die Werte in I:N ein,
dann starte ich wieder
Die Ergebnisse kommen immer nur in B1:G1
In I :N wird die Liste hingegen immer länger
sprich , bis I400 :N400 bin ich mal gekommen dann hatte ich keinen Bock mehr

Kommentar von Ninombre ,

dann passiert im Makro aber schon das, was Du sonst von Hand gemacht hast.

In der anderen Antwort hast Du allerdings geschrieben, dass die Formeln nun in Zeile 65 stehen, also A65 abgefragt wird. Das habe ich in der angepassten Form nicht so drin stehen, da wird A1 abgefragt und B1:G1 kopiert.

Kommt eine Fehlermeldung wenn das Makro läuft? ggf. mit F8 zeile für zeile durchgehen, dann siehst Du bei welchem Befehl der Fehler kommt

Kommentar von Marceloblau01 ,

Ich habe die Tabelle so gebaut wie dein Sub Ping aber er will das End If nicht

Kommentar von Ninombre ,

hast Du die Zeilenumbrüche auch so?  Bei der Zeile mit IF darf nach dem then nichts mehr stehen. Sonst kommt in der Tat die Meldung "End if ohne if"

Kommentar von Marceloblau01 ,

Jetzt gehts aber das End If musste ich entfernen

Kommentar von Marceloblau01 ,

Ha jetzt klappt es wunderbar, viiiiiielen Dank
Du bist der größte!!!!

Expertenantwort
von Iamiam, Community-Experte für Excel, 38

ungeprüft:

  • Sub Ping()
  • Dim c
  • for each c in Range("A1:A10000")
  • if c = 1 then Range(c.offset(0, 1) & ":" & c.offset(0, 6)): c.offset(0, 8).pastespecial (xlvalues)
  • next c
  • end sub

Wird allerdings eine Weile dauern!

Kommentar von Iamiam ,

nach den zwei schließenden Klammern und vor dem : (Zeilentrennzeichen) muss noch ein .copy rein, also:

  • Sub Ping()
  • Dim c
  • for each c in Range("A1:A10000")
  • if c = 1 then Range(c.offset(0, 1) & ":" & c.offset(0, 6)).copy: c.offset(0, 8).pastespecial (xlvalues)
  • next c
  • end sub


Kommentar von Marceloblau01 ,

ich bin wegen dem A1:A10.000 etwas verwirrt, vielleicht hast du was falsch verstanden, die Werte in B1:G:1 werden immer nur an dieser Position ermittelt also 1 (wahr) steht immer nur $A$1 die Ergebnisse stehen dann in $I1:$Nxxxx
das Sub ping soll erst nach 10.000 Versuchen aufhören, die Anzahl der möglichen Ergebnisse ist ja am Anfang noch nicht bekannt.

Kommentar von Iamiam ,

ja, das hab ich so verstanden. Um das zu korrigieren, müsste ich Deine Formel in A1 kennen, da ich nach dieser Formel die Auswertung per Makro machen muss.

Oder: die Formel in A1 ist kopierbar/-zu machen/ (geht per Makro auch absolut), dann geht es so wie im Makro geplant und nach Prüfung wird die Formel wieder gelöscht. Ist Spalte A frei bzw frei zu machen? Oder könnte das Makro eine neue Spalte einfügen und nach Durchlauf wieder löschen? (Offset würde sich um jeweils 1 erhöhen, sonst nichts!)

Es gibt eine Menge Optionen, sowas zu machen, aber auch eine Menge Fallstricke, wenn man nichts genaues weiß!!

Kommentar von Marceloblau01 ,

Es gibt in A1 eine =wenn(und(..........);dann1;sonst"") Formel diese bezieht sich auf andere Zellen mit wiederum wenn(und Formeln
Das ist ein wenig kompliziert weil diese Ergebnisse in B1:G1 auf mehrere Kriterien hin überprüft werden

Kommentar von Marceloblau01 ,

Diese Formeln in B1:G1 werden durch ein Ping (Entfernen-Taste) dazu angeregt neu zu rechnen und dann werden die Ergebnisse zueinander überprüft , passen sie zusammen gibt's ein ok sozusagen, es können aber viele Ergebnisse zueinander passen und ich hätte sie gerne alle in einer Tabelle also in I1:Nxxx

Kommentar von Iamiam ,

vermutlich hilft mir das noch nicht weiter bei einer Konzepterstellung, ich werde mich aber heute abend nochmal reinvertiefen.

Vllt kannst aber auch Du aus dem jetzigen konzept schon was verwerten

Kommentar von Marceloblau01 ,

Die Formel in A (in meinem Falle jetzt A65 lautet =WENN(UND(H65=1;U65=0;V65=0;DA65=0;DB65=0;FF65=FP65;FH65=6;FW65=0);1;0)

Das Makro Sub ping lautet

Sub ping
i = 1
While Cells(65, 1).Value < > 1 '
Cells (10000, 1). Value = Int (( 49 * Rnd) + 1) '
If i > 10000 Then Exit Sub '
i = i + 1
Wend
MsgBox (i) '
End Sub

Kommentar von Marceloblau01 ,

Das Sub ping Makro habe ich mal für einen Zahlen Generator bekommen, der Zufallszahlen von 1-49 in bestimmten Zellen mit bestimmten Formeln mit dem Ping zum laufen brachte ich habe das einfach übernommen, ich denke dass das Rnd 49 und die Zelle A10000 da garnicht mit rein gehören, vielleicht kann man das ja da jetzt für den anderen Zweck entfernen

Kommentar von Iamiam ,

Komme heute nicht mehr dazu, das auszuarbeiten, morgen auch nicht.

Aber: ist es Dein Ziel, Dich in Makros anhand dieses Beispiels weiterzubilden, oder bist Du an einer SCHNELLEN (Formel-)Lösung interessiert?

Ein Makro würde nämlich ziemlich lang laufen, bis es die 1000 Zeilen à 6 Spalten durchgenudelt hat.

Eine Matrixformel macht das in einer Sekunde. Hab mich heute nur ziemlich lang bei der Fehlersuche aufgehalten und habe jetzt keine Konzentration mehr dafür.

Das Kopieren: soll das immer nach Zeile 1 (oder jedenfalls an einen fixen Ort)l, weil sowieso nur ein Treffer von Bedeutung ist, oder willszt Du viele Treffer listen (auch mit Zeile, wo, das muss ohnehin per Formel errechnet werden)

Formeln haben den zusätzlichenj Vorteil, dass sie zB von Libre Office gelesen werden können (Makros nicht) und dass andere -ungeübte- User nicht verschreckt werden vor lauter Warnginweisen über die Bedenklichkeiten von Makros.

Die Formel hab ich im Modell fertig, das muss ich jetzt allerdings erweitern von 3 auf 6 Spalten und von 9 auf 999 Zeilen

Kommentar von Iamiam ,

Jetzt habe ich doch mal zwischendurch kurz Zeit gefunden und schlage Dir erst mal eine Formel(Zeile65) mit Hilfsspalte vor:

=H65&U65&V65&DA65&DB65&(FF65=FP65)&FH65&FW65

die muss 10000WAHR60 ergeben, wenn alles mit Deinen Angaben übereinstimmt.

und eine Zelle, benannt Zeile mit

=Vergleich(10000WAHR60;Hilfsspalte;0)

Die zugehörigen Werte erhältst Du mit

=index(B:B;Zeile), das ist nach rechts kopierbar; das ZEILE brauchst Du nicht absolut setzen, das macht xl mit benannten Bereichen automatisch.

Zum Festschreiben musst Du es allerdings zu WERT umsetzen, das geht in diesem Fall nur manuell übers Kontextmenü (Formeln eine Zeile tiefer hinterlegen!)

Muss jetzt wieder weg, für eine Matrixformel oder ein Makro melde Dich nochmal

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten