Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1348to1352
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

Kann mir jemand diesen Code erklären ?

Kann mir jemand diesen Code erklären ?
28.02.2014 22:24:36
rieckmann
Hallo,
ich habe einen Code gefunden der meine Vorstellungen ziemlich nahe kommt,
nur muss er noch für mich angepasst werden, weil er so bei mir nicht funktioniert.
Ich habe ein Leerzeichen zwischen Text und Zahl.
Könnte mir jemand kurz die Zeilen ab "For" erklären ?
Gruß
Fred
Hier war die Aufgabenstellung:
Wie kann ich jetzt für jede Buchstabenkombination die letzte Nummer ermitteln.
z.B.
XXX12349
XXX12346
YYY12347
YYY12345 

und hier der Code:
Sub test()
Dim c As Range
Dim xgroß As Long
Dim ygroß As Long
For Each c In Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
If Left(c.Value, 3) = "XXX" Then
If Right(c, Len(c) - 3) > xgroß Then xgroß = Right(c, Len(c) - 3)
Else
If Right(c, Len(c) - 3) > ygroß Then ygroß = Right(c, Len(c) - 3)
End If
Next
MsgBox "Größter XXX Wert : " & xgroß
MsgBox "Größter YYY Wert : " & ygroß
End Sub

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Vielleicht kann ich es
28.02.2014 23:52:34
Sheldon
Hallo Fred,
die For-Each-Schleife durchläuft jede Zelle im Bereich A1 bis zur der Zelle in Spalte A, die als letzte noch befüllt ist.
Nacheinander wird nun jede Zelle der Objektvariable c zugewiesen, so dass die Zelle über die Objektvariable angesprochen werden kann.
Nun prüfen die If-Then-Prüfungen, ob die jeweils gerade zu durchlaufende Zelle mit "XXX" beginnt oder mit "YYY". Ist das der Fall, wird in der Variable xgroß, bzw. ygroß, jeweils der Zahlenwert der Zelle gespeichert, der sich hinter den gesuchten drei Buchstaben befindet. Ist der Zahlenwert der Zelle nicht größer als der gespeicherte Wert in der Variable xgroß bzw. ygroß, so wird der Wert der Variable behalten, ansonsten durch den Wert der Zelle ersetzt.
Am Ende, wenn also alle Zellen in Spalte A mit Daten drin durchlaufen sind, werden die beiden ermittelten größten Werte per Messagebox ausgegeben.
Gruß
Sheldon

Anzeige
AW: Vielleicht kann ich es
01.03.2014 09:42:08
rieckmann
Hallo Sheldon,
vielen Dank für deine Erklärung.
Ich habe gerade einiges ausprobiert , aber bekomme es nicht hin.
Bei mir sind die Daten in folgenden Format:
Alto. 512
Alto. 23
Harb. 631
Harb. 14
Alto. 9999
Harb. 514
Habe den Code so angepasst, aber er scheint mit den durcheinander angeordneten Daten nicht klar zu kommen.
Sub Schaltfläche2_Klicken()
Dim c As Range
Dim xgroß As Long
Dim ygroß As Long
For Each c In Range("B1:B" & Cells(Rows.Count, 1).End(xlUp).Row)
If Left(c.Value, 6) = "Alto. " Then
If Right(c, Len(c) - 6) > xgroß Then xgroß = Right(c, Len(c) - 6)
Else
If Right(c, Len(c) - 6) > ygroß Then ygroß = Right(c, Len(c) - 6)
End If
Next
MsgBox "Größter Alto. Wert : " & xgroß & "     Größter Harb. Wert : " & ygroß
End Sub

Gruß
Fred
usw.
was muss ich da im Code anpassen ?

Anzeige
höchster Wert aus String ...
01.03.2014 10:10:55
Matthias
Hallo Fred
Hat mir dann doch keine Ruhe gelassen ...
https://www.herber.de/bbs/user/89487.xls
Option Explicit
Sub ml()
Dim Wert&, MyTab&, i&, j&, x&, zahl&
Const Spalte = 15
For x = 1 To 3 'Blätter
For j = 1 To 1073 'Zeilen anpasse/einlesen
If Left(Worksheets(x).Cells(j, Spalte), 4) = "Alt." Then 'anpassen!
For i = Len(Worksheets(x).Cells(j, Spalte)) To 1 Step -1
If IsNumeric(Mid(Worksheets(x).Cells(j, Spalte), i, Len(Worksheets(x).Cells(j, Spalte)) +  _
1 - i)) Then
zahl = LTrim(Mid(Worksheets(x).Cells(j, Spalte), i, Len(Worksheets(x).Cells(j, Spalte)) + _
1 - i)) * 1
If Abs(zahl) > Wert Then
Wert = Abs(zahl)
MyTab = x
End If
End If
Next
End If
Next j
Next x
MsgBox "Maximalwert =" & Wert, vbInformation, "in Tabelle (" & MyTab & ")"
End Sub
Gruß Matthias

Anzeige
AW: höchster Wert aus String ...
01.03.2014 10:45:51
rieckmann
Hallo Matthias,
toll das du dich dem Poblem noch einmal angenommen hast.
Vielen Dank dafür
Das funktioniert super.
Werde mir zwei Schaltflächen anlegen.
Die eine für das auslesen von "Alto." u. die andere für das auslesen von "Harb."
Also zwei Codes daraus machen.
Oder ich versuche beide Abfragen in einem Code zusammenzufügen.
Dann muss ich wohl zwei mal verschiedene Variabeln benutzen.
Gibt es eine Art Platzhalter-Funktion so dass man nur den Anfangsbuchstaben plus Platzhalter eingeben muss z.B. "A*" oder so ?
Auch die Anzeige in welchem Tabellenblatt die Nummer ist finde ich toll.
Nun wünsche ich dir das ganze Wochenende Ruhe beim Fußball !
Gruß
Fred

Anzeige
Version 2 -> habe fertig ;-)
01.03.2014 17:52:45
Matthias
Hallo Fred
Danke für Deine Rückmeldung
Gibt es eine Art Platzhalter-Funktion so dass man nur den Anfangsbuchstaben plus Platzhalter eingeben muss z.B. "A*" oder so ?
Platzhalter ist nicht nötig.
Man übergibt einfach den String in eine Variable
z.B. so:
Krzl = InputBox("Bitte Suchbegriff eingeben", "Suche ...", "A")

und später dann so weiter ...
If Left(Worksheets(x).Cells(j, Spalte), Len(Krzl)) = Krzl Then
So brauchst Du also nur eine Schaltfläche
Die Version 2 ist bereits fertig, mit einem kleinen BonusCode ;-)
Wenn Du nicht klar kommst, kann ich sie hochladen.
Also einfach wieder melden.
Gruß Matthias

Anzeige
AW: Version 2 -> habe fertig ;-)
01.03.2014 20:09:25
rieckmann
Hallo Matthias,
habe es probiert, aber bekomme es nicht hin mit einer Schaltfläche.
Momentan habe ich zwei Schaltflächen u. 2 Codes.
Die eine für Alto u. die andere für Harb.
Ich habe diese Zeile umgeändert
If Left(Worksheets(x).Cells(j, Spalte), 1) = "H" Then
So wird alles mit dem Anfangs-Buchstaben "H" durchsucht.
Zumindest klappt es so !!!
Wäre toll wenn du mir die Version 2 zukommen lässt !
Gruß
Fred

AW: bitte hier, Version 2 ...
01.03.2014 21:58:55
rieckmann
Hallo Matthias,
das übersteigt ja meine Vorstellungen.
Das mit der Zeile ist eine super Idee.
Hätte ich auch drauf kommen können !!!
Das kann ich super für meine Zwecke gebrauchen.
Hut ab, und danke dafür.
Gruß
Fred

Danke für Deine Rückmeldung ...
01.03.2014 22:23:19
Matthias
Hallo Fred
Nun muß man nur noch pro Tabellenblatt die letzte Zelle in Spalte("O") festlegen
und im Code unterbringen ...
... aber das mach ich heute nicht mehr.
Gute N8
Gruß Matthias

AW: Danke für Deine Rückmeldung ...
01.03.2014 22:33:49
rieckmann
Also ich habe 3000 Zeilen angegeben,
und es läuft zügig / schnell ab !
Allerdings, wenn man auf Nachfrage auch gleich zur ersten leeren Zeile in einem Blatt springen kann,
wäre das auch ne tolle Sache.
Oder wofür möchtest du die letzte Zeile in "O" festlegen ?
Gruß und gute Nacht
Fred

Anzeige
:-) das der Code so schnell ist ...
02.03.2014 03:38:16
Matthias
Hallo
Das der Code so schnell ist ...
... hatte ich selbst nicht erwartet, Fred.
Also ich habe 3000 Zeilen angegeben,
und es läuft zügig / schnell ab !

Wenn das ok für Dich ist, dann lassen wirs doch so.
Schön das ich Dir am Ende doch noch helfen konnte :-)
Gruß Matthias

AW: :-) das der Code so schnell ist ...
02.03.2014 08:52:55
rieckmann
Hallo Matthias,
also für mich ist das so wie es ist super.
Allerdings habe ich hier zu hause einen schnellen Rechner.
Auf der Arbeit könnte es zu Geschwindigkeitsproblemen kommen.
Das werde ich morgen ausprobieren.
Nochmals vielen Dank für deine Geduld, Zeit und Mühe
Gruß
Fred

Anzeige
AW: :-) das der Code so schnell ist ...
02.03.2014 10:10:56
rieckmann
Hallo Matthias,
eine Kleinigkeit ist mir noch aufgefallen !
Bei der MSG-Box wird oben z.B. "in Tabelle (5) Zeile 154" angezeigt.
Kann man das ändern so dass der Name des Tabellenblattes angezeigt wird ?
z.B. "in Tabelle (Tabellenblatt "Daten") Zeile 154"
Gruß
Fred

AW: Version 3
02.03.2014 11:51:33
rieckmann
Daumen hoch !
Gruß
Fred

Danke für Deine Rückmeldung ... owT
02.03.2014 11:52:48
Matthias

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige