Thema Datum  Von Nutzer Rating
Antwort
05.09.2020 19:49:02 Marcel Gärtner
NotSolved
05.09.2020 20:16:00 X-Post
NotSolved
05.09.2020 21:21:43 Gast59106
NotSolved
05.09.2020 21:30:13 Mase
NotSolved
06.09.2020 10:54:46 Marcel Gärtner
NotSolved
06.09.2020 11:48:48 Marcel Gärtner
NotSolved
06.09.2020 12:21:11 Gast74419
NotSolved
10.09.2020 12:08:58 Marcel Gärtner
NotSolved
10.09.2020 19:44:57 Gast74419
NotSolved
10.09.2020 19:51:28 Marcel Gärtner
NotSolved
10.09.2020 20:05:28 Gast31171
NotSolved
10.09.2020 20:19:27 für ein Datenpaar
NotSolved
10.09.2020 20:25:28 Mase, bist du das?xD
NotSolved
10.09.2020 20:26:39 Mase
NotSolved
10.09.2020 20:28:36 :o)
NotSolved
10.09.2020 20:33:55 Mase
NotSolved
10.09.2020 21:31:07 Marcel Gärtner
NotSolved
Blau für ein Datenpaar
10.09.2020 22:56:24 Gast81822
NotSolved
11.09.2020 15:26:58 Gast63092
NotSolved
11.09.2020 15:59:29 für ein Datenpaar ?
NotSolved
11.09.2020 19:19:17 Gast81711
NotSolved
13.09.2020 03:37:52 Gast254
NotSolved

Ansicht des Beitrags:
Von:
Gast81822
Datum:
10.09.2020 22:56:24
Views:
962
Rating: Antwort:
  Ja
Thema:
für ein Datenpaar

Naja, das beantwortet meine Frage nicht ganz, aber man kann ein Prinzip erkennen. ;)


Nochmal die Zahlenreihenfolge 1 , 4 , 7 , 10 , 13 , 16 , 19 , 22 , 25 , 28

Diese Zahlenreihe zeichnet aus, dass das Folgeergebnis das vorherige Ergebnis plus 3 ist.

Ausgangszustand      : 1

Schleifendurchgang 1: 1 + 3 = 4

Schleifendurchgang 2: 4 + 3 = 7

Schleifendurchgang 3: 7 + 3 = 10

Schleifendurchgang 4: 10 + 3 = 13

usw.


Wir haben also ein Muster erkannt: "Neues Ergebnis" = "Altes Ergebnis" + 3

Das als Schleife umzusetzen, nunja, da gibt es verschiedene Wege:

 

(1) Wenn man weiß wieviel Wiederholungen (in unserem Beispiel sind es 5 Zahlen), dann die Zählschleife

  Dim i As Long

  'Ausgabe: 1, 4, 7, 10, 13
  Cells(1, 1).Value = 1 'Ausgangszustand
  For i = 2 To 5 ' 1 + 5-2 = 4 ; Schleife wird 4 mal durchlaufen
    Cells(i, 1).Value = Cells(i - 1, 1).Value + 3
  Next

ginge auch so:

  Dim i As Long
  Dim j As Long
  
  j = 1
  
  'Ausgabe: 1, 4, 7, 10, 13
  For i = 1 To 13 Step 3
    Cells(j, 1).Value = i
    j = j + 1
  Next

oder so:

  Dim i As Long
  
  'Ausgabe: 1, 4, 7, 10, 13
  For i = 1 To 5
    Cells(i, 1).Value = 1 + (3 * (i - 1))
  Next

(2) Mit der Do-Loop Schleife ginge das auch, die wird allerdings meist nur dann genommen, wenn man nicht weiß wie oft man den Teil in der Schleife wiederholen muss. Man kann mit ihr aber auch eine For-Schleife "nachbauen". Macht nur wenig Sinn / ließt sich auch nicht so schön, wenn man sie dafür missbraucht.

  Dim i As Long
  
  i = 1
  
  'Ausgabe: 1, 4, 7, 10, 13
  Cells(i, 1).Value = 1 'Ausgangszustand
  Do
    i = i + 1
    Cells(i, 1).Value = Cells(i - 1, 1).Value + 3
  Loop While Cells(i, 1).Value < 13 'solange wie das Ergebnis kleiner 13 ist

oder auch so:

  Dim i As Long
  
  'Ausgabe: 1, 4, 7, 10, 13
  Do
    i = i + 1
    Cells(i, 1).Value = 1 + (3 * (i - 1))
  Loop While Cells(i, 1).Value < 13

 

Es gibt sicher noch andere Wege diese Zahlenfolge zu erzeugen. Ich will dir hier nur klar machen dass es mehrere Möglichkeiten gibt.

Worauf es nur ankommt ist sich Gedanken darüber zu machen:

  1. Kennt man die Anzahl der Schleifendurchgänge => For-Schleife
  2. Kennt man die Anzahl der Schleifendurchgänge NICHT => Do-Loop

Zum zweiten Problem:

Ich habe dir ja eine Prozedur gegeben, die nur für ein Datensatz funktioniert. (was übrigens beabsichtigt war; wird dir immer mal wieder vorkommen)

Wenn es für einen funktioniert, funktioniert es in der Regel auch für mehrere, wenn man es an den richtigen Stellen anpasst.

 

Einfachstes Beispiel, welches mir in den Sinn kommt:

Sub Aufrufen()
  
  Call Makro_von_Jemanden
  
End Sub

Sub Makro_von_Jemanden()
  
  '<hier steht cool anzusehender Code von GastXY>
  
  Call MsgBox("Hallo du Typ!", vbInformation)
  
  '<oh wow, hier steht noch mehr cooler Code von GastXY>
  
End Sub

Jetzt willst du aber nicht - aus welchen Gründen auch immer - diese Meldung angezeigt bekekommen, sondern du willst sie beim Aufrufen der Prozedur anpassen.

Wir führen also eine neue Variable ein. Steht sie im Funktions-Kopf, nennt man das übrigends dann einen Parameter (Namen sind wie immer frei wählbar):

Option Explicit

Sub Aufrufen()
  
  'Rückgabe der Funktion wird hier nicht verwertet
  Call Makro_von_Jemanden("*Grunz* Du verdammt smarter Typ du!")
  
End Sub

'Aus der Sub (=Prozedur) wurde hier eine Funktion gemacht.
'Eine Funktion hat, gegenüber einer Sub, einen Rückgabewert.
'Den Datentyp der Funktions-Rückgabe kann man festlegen - hier z.B. Long
Function Makro_von_Jemanden(Parameter As String) As Long
  
  '<hier steht cool anzusehender Code von GastXY - unverändert von mir>
  
  Call MsgBox(Parameter, vbInformation)
  
  '<oh wow, hier steht noch mehr cooler Code von GastXY - unverändert von mir>
  
  'Funktionsrückgabe
  Makro_von_Jemanden = 42 'hier einfach als Beispiel eine Zahl
  
End Function

Worum es also nun letztendlich geht ist:

  1. Schleife bauen, die eine Zahlenreihe erzeugt, welche den Zeilenindex einer Zelle repräsentiert (oben geklärt)
  2. innerhalb der Schleife das Makro von weiter oben im Thema aufrufen, welches den Scrapper-Fauxpas korrigiert; dafür muss ein Parameter definert werden und in dem genannten Makro an die Stelle gesetzt werden, wo er benötigt wird (siehe Beispiel oben)

In der Schleife schaut es also z.B. so aus:

Call BlaBlubb_ich_fixe_was_ich_im_Scraper_verbockt_habe(Worksheets("Tabelle1").Range("A" & SchleifenIndex))

Wenn du aus der Prozedur eine Funktion machst und du die Funktion den korrigierten Ausdruck zurückgeben läßt (der derzeit in Zelle A5 geht), dann kannst du z.B. schreiben:

Cells(SchleifenIndex, 1).Value = BlaBlubb_ich_fixe_was_ich_im_Scraper_verbockt_habe(Worksheets("Tabelle1").Range("A" & SchleifenIndex))

 

Grüße


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
05.09.2020 19:49:02 Marcel Gärtner
NotSolved
05.09.2020 20:16:00 X-Post
NotSolved
05.09.2020 21:21:43 Gast59106
NotSolved
05.09.2020 21:30:13 Mase
NotSolved
06.09.2020 10:54:46 Marcel Gärtner
NotSolved
06.09.2020 11:48:48 Marcel Gärtner
NotSolved
06.09.2020 12:21:11 Gast74419
NotSolved
10.09.2020 12:08:58 Marcel Gärtner
NotSolved
10.09.2020 19:44:57 Gast74419
NotSolved
10.09.2020 19:51:28 Marcel Gärtner
NotSolved
10.09.2020 20:05:28 Gast31171
NotSolved
10.09.2020 20:19:27 für ein Datenpaar
NotSolved
10.09.2020 20:25:28 Mase, bist du das?xD
NotSolved
10.09.2020 20:26:39 Mase
NotSolved
10.09.2020 20:28:36 :o)
NotSolved
10.09.2020 20:33:55 Mase
NotSolved
10.09.2020 21:31:07 Marcel Gärtner
NotSolved
Blau für ein Datenpaar
10.09.2020 22:56:24 Gast81822
NotSolved
11.09.2020 15:26:58 Gast63092
NotSolved
11.09.2020 15:59:29 für ein Datenpaar ?
NotSolved
11.09.2020 19:19:17 Gast81711
NotSolved
13.09.2020 03:37:52 Gast254
NotSolved