Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1560to1564
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

Problem mit Schleife

Problem mit Schleife
12.06.2017 14:36:45
Peter
Hallo ihr Excelspezialisten,
seit Stunden suche ich ein Lösung für eine Schleife.
Nachfolgender Code fügt in Tabelle "Buchung_Räume" die Werte ein aufgrund der Daten
in Tabelle "Räume".
Jedoch nur mit Wert aus A4 bzw. C4.
Sub spalte_zeile_variable()
Dim eingabe As String
Dim Zeile As Long
Dim EinfügWert As String
Zelle_A = Worksheets("Räume").Range("C4").Value
Worksheets("Zeiten_Gesamt (2)").Select
With Worksheets("Zeiten_Gesamt (2)")
.Range("G2:G51").Select
Selection.Find(What:=Zelle_A, After:=ActiveCell, LookIn:= _
xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False).Activate
ActiveCell.Offset(0, -1).Select
AZeitSpalte = Selection
End With
eingabe = Worksheets("Räume").Range("A4").Value
EinfügWert = Worksheets("Hilfstabelle").Range("P2").Value
Worksheets("Buchung_Räume").Select
With Worksheets("Buchung_Räume")
Range("A2").Activate
Zeile = Sheets("Buchung_Räume").Columns("A:A").Find(What:=eingabe, After:=ActiveCell, LookIn: _
_
= _
xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Row
'  Sheets("Buchung_Lehrer").Range("B" & Zeile & ":F" & Zeile) = EinfügWert '1
Sheets("Buchung_Räume").Range("B" & Zeile, AZeitSpalte & Zeile) = EinfügWert  '1
End With
End Sub

Wie kann ich eine Schleife aufbauen, mit welcher die Tabelle "Räume" durchlaufen wird und die Werte in
Zelle_A = Worksheets("Räume").Range("C4").Value
eingabe = Worksheets("Räume").Range("A4").Value
durch eine variable ersetzt werden.
Beispielmappe anbei:https://www.herber.de/bbs/user/114216.xlsm
Besten Dank für Eure Hilfe.
Gruss
Peter

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem mit Schleife
12.06.2017 15:02:10
guenni
verstehe die Fragestellung nicht!
Zelle_A ist eine Variable die zu Beginn des Makros mit dem Inhalt einer Zelle belegt wird. - willst Du direkt auf die Zelle referenzieren, suchen wenn die Zelle verändert wird, oder ganz was anderes?
Eingabe ist eine Variable die zu Beginn des Makros mit dem Inhalt einer Zelle belegt wird. - willst Du dass der Wert aus einer Nutzerabfrage eingegeben wird, oder was ähnliches als bei Zelle_A
Gruß,
Günther
AW: Problem mit Schleife
12.06.2017 15:12:12
Peter
Hallo Guenni,
es existiert die Tabelle Räume mit Werte in Spalte A und Werte in Spalte C
Nun soll per Code der Wert aus Tabelle Räume mit denen der Tabelle "Buchung_Räume" verglichen werden.
Mittels Suche nach Zeit in Tabelle "Räume" werden die Zellen z. B. B4 bis je nach Zeit z. B. AA4 aus-
gefüllt werden.
Damit dies für alle Räume geschieht benötige ich noch eine Schleife ect. mit welcher die Werte in A4 bzw. in C4 durch die jeweilige Zeilen-Nr. ersetzt wird.
Daher variable für C4 bzw. A4
Wenn ich manuell C4 und A4 auf C3 bzw. A3 ändere werden die richtigen Daten eingetragen. Hierfür benötige ich jedoch eine automatisch Regelung.
Ich hoffe dass ich mich verständlich ausgedrückt habe.
Besten Dank für Deine Hilfe.
Gruss
Peter
Anzeige
AW: Problem mit Schleife
12.06.2017 16:53:11
guenni

for i=4 to letzteZeile
Zelle_A = Worksheets("Räume").Range("C" & ZeilenNr).Value
eingabe = Worksheets("Räume").Range("A" & ZeilenNr).Value

AW: Problem mit Schleife
12.06.2017 17:19:29
Peter
Hallo Guenni,
besten Dank für Deine Antwort.
Leider habe ich ein Problem. Wo bitte soll for i=4 to letzteZeile eingebaut werden?
Gruss
Peter
AW: Problem mit Schleife
12.06.2017 16:54:58
Piet
Hallo
das Makro laesst sich sicher vereinfachen, ich habe aber noch nicht verstanden was da genau wohin kopiert werden soll?
Sollen in Buchung_Raeume und Buchung_Lehrer keine Uhr-Zeiten eingetragen werden?
Nur der Text: "nicht anwesend", nicht buchbar, "Pause" ?
mfg Piet
Anzeige
AW: Problem mit Schleife
12.06.2017 17:12:55
Peter
Hallo Piet,
es gibt eine Anzahl von Räume und dazugehörige Anfang- und Endzeiten.
Momentan bin ich erst bei den Anfangzeiten.
Wenn ein Raum ab 15.00 Uhr belegt ist, dann sind die Zeiten vorher also Spalte B bis zu dem entsprechenden Zeitpunkt 14.55 also einschl. Spalte Z22 "'nicht buchbar".
Da für mehrere Räume unterschiedliche Anfangzeiten existieren und auch entsprechende Endzeiten,
wird das Makro benötigt.
Es gibt keine Tabelle "Buchung_Lehrer" sondern Buchung_Räume.
Ich weiss das ganze ist sehr kompliziert. Deshalb versuche ich ja ein Programm zu erstellen, da es
manuell extrem zeitaufwendig ist.
Vielleicht hast Du eine bessere Lösung parat.
Ich habe auch schon mal mit Offset gearbeitet.
Vielleicht ist meine Erklärung für Dich jetzt hilfreich.
Gruss
Peter
Anzeige
AW: Problem mit Schleife
13.06.2017 18:03:19
Piet
Hallo Peter
war beschaeftigt, hier mal ein Lösungsversuch. Er basiert auf Cells(j, "x") statt Range.
Das hat den Vorteil das man in einer For Next Schleife mit j die Zeile definieren kann!
Probier mal ob das so klappt wie gewünscht, sonst muss ich es noch mal überarbeiten.
Auf Sheet.Select habe ich verzichtet, braucht man nicht wenn man Set rFind verwendet.
Würde mich freuen wenn meine Idee so funktioniert.
mfg Piet
Sub spalte_zeile_variable()
Dim eingabe As String
Dim Zeile As Long
Dim EinfügWert As String
'neu eingefügt:
Dim rfind As Object, lazRaum As Integer
'LastZell in Räume Spalte C ermitteln
lazRaum = Worksheets("Räume").Range("C500").End(xlUp).Row
'Schleife für alle Anfangs Zeiten
For j = 2 To lazRaum
Zelle_A = Worksheets("Räume").Cells(j, "C").Value
With Worksheets("Zeiten_Gesamt (2)")
Set rfind = .Range("G2:G51").Find(What:=Zelle_A, After:=Range("G2"), _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False)
If Not rfind Is Nothing Then AZeitSpalte = rfind.Offset(0, -1).Value
End With
eingabe = Worksheets("Räume").Cells(j, "A").Value
EinfügWert = Worksheets("Hilfstabelle").Cells(j, "P").Value
With Worksheets("Buchung_Räume")
Zeile = .Columns("A:A").Find(What:=eingabe, After:=Range("A1"), _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row
Sheets("Buchung_Räume").Range("B" & Zeile, AZeitSpalte & Zeile) = EinfügWert
End With
Next j
End Sub

Anzeige
AW: Problem mit Schleife
14.06.2017 15:19:34
Peter
Hallo Piet,
vielen herzlichen Dank für Deine Hilfe.
Nach ganz kleiner Abänderung hat das einwandfrei geklappt.
Bin aber jetzt auf ein Problem in meinem Programm gestossen, welches ich erst noch klären muss.
Ich werde mich bei Dir wieder melden, sofern ich nicht klar komme.
Übrigens noch eine zusätzliche Frage zu diesem Programmteil fällt mir jetzt noch ein:
Wie muss ich das ganze Ausführen, in umgekehrter Richtung.
Ich habe ja auch eine Endzeit. Wie funktioniert das ganze wenn ich eine Endzeit z.B. 17.00 Uhr habe und ich den Bereich von 17.00 Uhr bis letzte Spalte = AQ mit Wert füllen möchte?
Besten Dank für Deine Hilfe, falls Du die Zeit noch investieren möchtest.
Gruss
Peter
Anzeige
AW: Problem mit Schleife
14.06.2017 22:06:16
Piet
Hallo Peter
im Prinzip könnte man fast den gleichen Code noch mal nehmen, nur etwas umgeschreiben.
Im 1. Code sollte man bitte noch diese Zeile anfügen unter IF: - If rfind Is Nothing Then MsgBox ...
If AZeitSpalte = "" Then MsgBox "AZeitSpalte - nicht gefunden": Exit Sub
Ich habe gesehen das die Spalte F am Ende auch mal leer sein kann, ohne Wert kommt Fehlermeldung!
Ich weiss im Augenblick nicht in welcher Spalte man die Endzeit Daten suchen muss, habe Spalte D genommen.
Ich weiss auch nicht ob "eingabe" und "Einfügewert" noch richtig sind? Must du ggf. bitte selbst anpassen.
Sollte es so nicht klappen schauen wir noch mal wie wir es ans laufen bekommen.
mfg Piet
Sub EndZeit_spalte_zeile()
Dim eingabe As String
Dim Zeile As Long
Dim EinfügWert As String
'nachgetragen:
Dim EZeitSpalte     'Anf. Spalte
Dim Zelle_E         'End Zeit
'neu eingefügt:
Dim rfind As Object, lazRaum As Integer
Dim j As Integer
'LastZell in Räume Spalte C ermitteln
lazRaum = Worksheets("Räume").Range("C500").End(xlUp).Row
'Schleife für alle Anfangs Zeiten
For j = 2 To lazRaum
Zelle_E = Worksheets("Räume").Cells(j, "D").Value
With Worksheets("Zeiten_Gesamt (2)")
Set rfind = .Range("D2:D51").Find(What:=Zelle_E, After:=Range("D2"), _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False)
If Not rfind Is Nothing Then EZeitSpalte = rfind.Offset(0, 2).Value
If rfind Is Nothing Then MsgBox "EZeitSpalte - nicht gefunden": Exit Sub
If EZeitSpalte = "" Then MsgBox "EZeitSpalte - nicht gefunden": Exit Sub
End With
eingabe = Worksheets("Räume").Cells(j, "A").Value
EinfügWert = Worksheets("Hilfstabelle").Cells(j, "P").Value
With Worksheets("Buchung_Räume")
Zeile = .Columns("A:A").Find(What:=eingabe, After:=Range("A1"), _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row
Sheets("Buchung_Räume").Range(EZeitSpalte & Zeile, "AO" & Zeile) = EinfügWert
End With
Next j
End Sub

Anzeige
AW: Problem mit Schleife beseitigt
15.06.2017 13:16:52
Peter
Hallo Piet,
vielen, vielen Dank für Deine Hilfe.
Ich habe das Problem jetzt von Dir gelöst bekommen.
Da ich kein Programmierer bin sondern ein Laie bin ich jetzt natürlich wieder auf neue Fehler gestossen.
Sollte ich nicht alleine weiter kommen, werde ich mich erneut an Dich wenden.
Besten Dank und einen schönen Tag.
Gruss
Peter
Problem mit Zusatz zur bisherigen Datei
16.06.2017 10:42:32
Peter
Hallo Piet,
wie schon gesagt, nach kleinen Änderungen passt der von Dir erstelle Code einwandfrei.
Jetzt hätte ich noch eine wichtige Bitte an Dich, falls es nicht zuviel Probleme bereitet.
Mittels Modul1_TestAuEZeit_neu: Makros spalte_zeile_variable_Anfangzeit_neu und
EndZeit_spalte_zeile_neu werden die Werte für die Anfang und Endzeiten ausgefüllt.
Anschliessend benutze ich aus Modul Modul1_TestAuEZeitZusatz:
Makro spalte_zeile_variable_Anfangzeit_neu1
und füge damit "Test mit leer" ein, da diese Zelle leer sein soll.
Mein Programm hat jedoch eine besondere Problematik:
Die Tabelle Buchung_RäumeOrg hat nur 40 auszufüllende Spalten.
Es gibt zwei Besonderheiten:
Es gibt sogenannte zusätzliche Zwischenzeiten und zusätzliche Endzeiten.
Das bedeutet, dass der User beim Erstellen der Datei folgendes auswählt:
Das Anfangdatum und das Enddatum wenn 40 Zeiten genügen. Wenn diese nicht genügen
werden noch Zwischenzeiten ausgewählt max. 20 Min. entspricht 4 Zeitspalten.
Reicht dies ebenfalls nicht werden noch zusätzliche Endzeiten ausgewählt max. 30 Min.
entspricht 6 Zeitspalten immer am Ende.
Das bedeutet, dass sich folgendes ergibt:
Wenn die Zwischenzeit innerhalb der Anfang und Endzeit liegt d. h. der Raum ist besetzt
ist die Zelle der gewählten Zwischenzeit mit - nicht elektronisch buchbar - = Hilfstabelle.range
("P3") auszufüllen, sonst = Hilfstabelle.range("P2).
Das gleiche gilt für die Endzeit.
Wenn die zusätzliche Entzeit gewählt ist und die Endzeit nach der zusätzlichen Endzeit liegt
ist die Spalte mit der zusätzlichen Endzeit mit - nicht elektronisch buchbar - = Hilfstabelle.range
("P3") auszufüllen, sonst = Hilfstabelle.range("P2).
Beispiel:
allgemeine Anfangzeit 14.30 Uhr allgemeine Endzeit 18.00 Uhr
gewählt zusätzliche Zwischenzeit 16.20 Uhr - 16.40 Uhr
gewählt zusätzliche Endzeit 18.00 Uhr - 18.30 Uhr
Raum Anfangzeit Zwischenzeit zusätzlEndzeit Endzeit
Raum 101 15.00 Uhr 16.20 Uhr 18.00 Uhr 18.30
Raum 102 14.30 Uhr 16.20 Uhr 16.25
Raum 103 16.35 Uhr 16.20 Uhr 18.00 Uhr 18.30
Ergebnis in Buchung_Räume:
Raum 101 Z7= "" Z23-Z26=n.e.b Z43 bis Z49=n.e.b
Raum 102 Z1= "" Z23-Z24=n.e.b 16.25=Z24
Raum 103 Z23 bis Z23-Z26=n.e.b Z43 bis Z49=n.e.b
n.e.b. = Hilfstabelle.Range("P2")
meine bisherige Datei anbei:https://www.herber.de/bbs/user/114307.xlsm
Ich hoffe es bereitet Dir nicht zuviel Mühe dies für mich zu erarbeiten.
Besten Dank im Voraus
Gruss
Peter
Anzeige
AW: Problem mit Schleife
17.06.2017 18:51:18
Piet
Hallo Peter
anbei die von mir bearbeitete Beispieldatei mit einem neuen Modul für die Zusatzzeiten.
Ich weiss nicht ob das klappt, ob ich alles richtig verstanden habe, Infos, Fragen findest du in der Mappe.
Sollte es nicht wie gewünscht klappen mir am besten ein Beispieldatei mit Lösungsdaten im Blatt Raumbelegung
ausgefüllt hochladen, wie die Raumbelegung bei gegebenen normalen Zeiten und Zusatzzeiten aussehen muss.
Am besten den Bereich Zusatz Zeiten farblich markieren, damit ich sie von normalen trennen kann.
Denk daran das der Thread bald aus der Forumliste rausfaellt, nicht mehr bearbeitet werden kann!!
mfg Piet
https://www.herber.de/bbs/user/114339.xlsm
Anzeige
AW: Problem mit Schleife fast gelöst
19.06.2017 07:45:23
Peter
Hallo Piet,
besten Dank für Deine Hilfe. Die wertvollen Hinweise, die Du mir gegeben hast werde ich abarbeiten.
Die Grundsätze, die Du mir in dem Code übermittelt hast sind super. Diese werde ich umbauen.
Ich weiss nicht, ob ich das noch schaffe bis der Thread geschlossen wird bzw. bis Deine Tätigkeit
beendet ist.
Ich wünsche Dir einen wunderschönen, erholsamen Urlaub und mein vollstes Verständnis für Deine privaten
Verpflichtungen.
Nochmals besten Dank und alles Gute.
Gruss
Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige