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

sverweis in schleife unter Bedingung

sverweis in schleife unter Bedingung
16.06.2021 16:30:17
Fred
Hallo Excel-Profis,
ich habe da mal wieder so ein Problem was ich nicht selber lösen kann.
Im Blatt "ArchivExport" wird durch eine Schleife, Namen in "Spalte H" abgearbeitet. Das funktioniert bestens.
Das Problem:
Es soll zu jedem abgearbeiteten Namen noch zusätzlich gewisse Werte entsprechend zugeordnet werden.
Die Werte stehen in der Matrix "X2:AA8"
Aber wie ?
Ich könnte nun noch einen ganzen Roman drüber schreiben,- kann bitte ein Profi auf das Elend schauen und mir eventuell eine Lösung anbieten?!
https://www.herber.de/bbs/user/146644.xlsb
Die bereits vorhandenen Makros laufen fehlerfrei, sieht ein bischen schräg im Ergebnis aus, da ich sehr vieles wegen upload-limit löschen mußte ...
Gruss
Fred

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: sverweis in schleife unter Bedingung
17.06.2021 10:13:39
Fred
Hallo Excel Profis,
nun habe ich das gewünschte Ergebnis (addieren der gezählten Farben und in gewünschte Zeile zuordnen) mit vba selbst auf die Reihe bekommen.
Die Matrix "X2:AA7" scheint "überflüssig" zu sein,- aber ich habe diese dennoch genutzt.
Der vba-Zusatz :

If .Cells(3, 22) = "clean Sheet" Then .Cells(lngC, 19) = .Cells(3, 23)
If .Cells(3, 22) = "clean Sheet" Then .Cells(lngC, 20) = .Cells(2, 25)
If .Cells(3, 22) = "clean Sheet" Then .Cells(lngC, 21) = .Cells(2, 26)
If .Cells(3, 22) = "clean Sheet" Then .Cells(lngC, 22) = .Cells(2, 27)
If .Cells(3, 22) = "beide treffen nicht" Then .Cells(lngC, 19) = .Cells(3, 23)
If .Cells(3, 22) = "beide treffen nicht" Then .Cells(lngC, 20) = .Cells(3, 25)
If .Cells(3, 22) = "beide treffen nicht" Then .Cells(lngC, 21) = .Cells(3, 26)
If .Cells(3, 22) = "beide treffen nicht" Then .Cells(lngC, 22) = .Cells(3, 27)
If .Cells(3, 22) = "win to Nil" Then .Cells(lngC, 19) = .Cells(3, 23)
If .Cells(3, 22) = "win to Nil" Then .Cells(lngC, 20) = .Cells(4, 25)
If .Cells(3, 22) = "win to Nil" Then .Cells(lngC, 21) = .Cells(4, 26)
If .Cells(3, 22) = "win to Nil" Then .Cells(lngC, 22) = .Cells(4, 27)
If .Cells(3, 22) = "win 1 halftime" Then .Cells(lngC, 19) = .Cells(3, 23)
If .Cells(3, 22) = "win 1 halftime" Then .Cells(lngC, 20) = .Cells(5, 25)
If .Cells(3, 22) = "win 1 halftime" Then .Cells(lngC, 21) = .Cells(5, 26)
If .Cells(3, 22) = "win 1 halftime" Then .Cells(lngC, 22) = .Cells(5, 27)
If .Cells(3, 22) = "win 2 halftime" Then .Cells(lngC, 19) = .Cells(3, 23)
If .Cells(3, 22) = "win 2 halftime" Then .Cells(lngC, 20) = .Cells(6, 25)
If .Cells(3, 22) = "win 2 halftime" Then .Cells(lngC, 21) = .Cells(6, 26)
If .Cells(3, 22) = "win 2 halftime" Then .Cells(lngC, 22) = .Cells(6, 27)
If .Cells(3, 22) = "über 2,5" Then .Cells(lngC, 19) = .Cells(3, 23)
If .Cells(3, 22) = "über 2,5" Then .Cells(lngC, 20) = .Cells(7, 25)
If .Cells(3, 22) = "über 2,5" Then .Cells(lngC, 21) = .Cells(7, 26)
If .Cells(3, 22) = "über 2,5" Then .Cells(lngC, 22) = .Cells(7, 27)
If .Cells(3, 22) = "über 3,5" Then .Cells(lngC, 19) = .Cells(3, 23)
If .Cells(3, 22) = "über 3,5" Then .Cells(lngC, 20) = .Cells(8, 25)
If .Cells(3, 22) = "über 3,5" Then .Cells(lngC, 21) = .Cells(8, 26)
If .Cells(3, 22) = "über 3,5" Then .Cells(lngC, 22) = .Cells(8, 27)
https://www.herber.de/bbs/user/146654.xlsb
Meine Abschlussfrage wäre noch;
Ist der Code so wie ich diesen geschrieben habe OK und optimal,- oder kann man da etwas verbessern?
Gruss
Fred
Anzeige
AW: sverweis in schleife unter Bedingung
17.06.2021 19:42:11
Yal
Hallo Fred,
sagen wir mal so: wenn der Code funktioniert und Du verstehst den Code, dann ist es für dich gut.
Ich würde den Code anders schreiben: alles was sich wiederholt, sollte nur einmal vorkommen. Die Wiederholungsmuster müssen erkannt werden.
Zum Beispiel:
_ Zelle (lngC, 19) wird immer mit dieselbe Wert aus 3|23 befüllt. Warum prüfen, ob Clean, win or whatever?
_ wo die Information geholt werden, die geschrieben werden, unterscheiden sich nur duch die Spaltennummer. Muster ist immer derselbe.
_ pro Block könntest nur einen If haben

If ... Then
abc
def
End If
_ wenn es immer gegen dasselbe getestet wird, kann man ein select case verweden

.Cells(lngC, 19) = .Cells(3, 23)
Select Case .Cells(3, 22)
Case "clean Sheet": Spalte = 2
Case "beide treffen nicht": Spalte = 3
Case "win to Nil": Spalte = 4
Case "win 1 halftime": Spalte = 5
Case "win 2 halftime": Spalte = 6
Case "über 2,5": Spalte = 7
Case "über 3,5": Spalte = 8
End Select
.Cells(lngC, 20) = .Cells(Spalte, 25)
.Cells(lngC, 21) = .Cells(Spalte, 26)
.Cells(lngC, 22) = .Cells(Spalte, 27)
VG
Yal
Anzeige
AW: sverweis in schleife unter Bedingung
18.06.2021 10:23:19
Fred
Hallo Yal,
vielen Dank für deine "Schreibweise" und Erklärung. Dein Code-Beispiel wird selbst bei den angegebenen,- wenigen abzuarbeitenden Zeilen gefühlt eine Sekunde schneller "abgearbeitet". Die Zeit der Bearbeitung hat aber in meiner Aufgabe ( maximal 50 Zeilen) weniger Bedeutung. Für zukünftige Lösungen finde ich deine Herangehensweise natürlich viel effizienter und werde am Wochenende mich nochmals mit deinem Makro auseinandersetzen.
Noch bin ich auf einem VBA-Level, vergleichbar mit einem Einkauf im Supermarkt. Wo ich meinen Einkauf nach Einkaufszettel in den Einkaufswagen lege und fünfmal durch den Supermarkt laufe :-)
Vielen Dank für dein Feedback und ein schönes Wochenende!
Gruss
Fred
Anzeige
Vielen Dank für die Rückmeldung.
18.06.2021 10:48:02
Yal
Hallo Fred,
schön, wenn ich Dir helfen könnte.
Der Weg zum VBA Profi ist eine lange, macht sich aber Schritt für Schritt. Wenn man dabei von einigen Abkürzungen oder Sackgassen erfährt, kommt man (wenn diese richtig verstanden worden sind) schneller voran.
Die Verarbeitungsgeschwindigkeit wird am meisten durch die Anzeige in Excel gebremst. Es hilft, wenn viel sichtbares passiert, vor und nach der Bearbeitung einen ScreenUpdating-Anweisung zu platzieren:

Sub DaWirdVielesEinzelAngezeigt()
Application.ScreenUpdating = False
Application.ScreenUpdating = True
End Sub
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige