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

Monat auslesen

Monat auslesen
14.08.2023 08:10:30
Christian
Guten Morgen in die Runde,
hi MCO,

ich habe von MCO diesen Code erhalten, um auf einem Reinigungsplan einzelne Tage auslesen zu können ( WVerweis / SVerweis - 10.08.23 / 07:36 Uhr).
Jetzt würde ich das noch für den kompletten Monat benötigen, und weiß leider nicht weiter, wie das hier so ginge. Ich habe mir mit einer Hilfsliste beholfen, in dem ich die Tage komplett kopiere und dann auf einer anderen Liste untereinander eintragen lasse. Das Problem dabei ist aber, wenn zwei mal am Userform "gedrückt" wird, wird auch zweimal der gleiche Tag eingetragen (Userform ist aber auf der hoch geladenen Liste nicht dabei!). Geht das irgendwie, dass ich anhand der Spalte "A" den Monat auswerte? Möglicherweise könnte auch das Datum eingegeben werden (von - bis ), aber da fehlt mir irgendwie der Ansatz.

Danke vorab
Christian


Sub Zimmerreinigungsplan()

Dim row As Single
Dim z As Single
Dim num As Range
Dim sh_rein As Worksheet
Dim sh_Beleg As Worksheet
Set sh_rein = Sheets("Reinigung")
Set sh_Beleg = Sheets("Belegung")

Set gefunden = sh_Beleg.Range("B:B").Find(sh_rein.Range("B1"))
If gefunden Is Nothing Then MsgBox "das Datum gibt´s nicht", vbExclamation, "Fehler": Exit Sub

z = 4
row = gefunden.row
For Each num In sh_Beleg.Range("E5:AA5") 'alle Zimmer durchgehen

If num.Offset(-1, 0) > 0 Then DZ_EZ = num.Offset(-1, 0) 'wg verbundener Zellen ist nur die erste zelle mit einem Wert belegt. daher bleibt der bestehen solange kein neuer Wert kommt.
If num.Offset(-2, 0) > 0 Then Gebäude = num.Offset(-2, 0) 'hier auch

With sh_Beleg.Cells(row, num.Column)
If .Value > "" Then
Select Case .Value
Case "norm": Uhrzeit = "8:00"
Case "late": Uhrzeit = "12:00"
End Select

With sh_rein 'Daten eintragen
.Cells(z, "A") = Gebäude
.Cells(z, "B") = num
.Cells(z, "C") = DZ_EZ
'.Cells(z, "E") = "JA"
.Cells(z, "F") = Uhrzeit
z = z + 1
End With
End If
End With
Next
End Sub


https://www.herber.de/bbs/user/162263.xlsx

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Monat auslesen
14.08.2023 09:31:56
Oberschlumpf
Hi Christian,

du zeigst uns ne Datei, die eigtl gar nicht zu deiner Frage bzgl Userform passt.
Wieso zeigst du uns nicht gleich bitte ne Bsp-Datei, in der sowohl Code als auch Userform enthalten ist?

Ciao
Thorsten
Monat auslesen
14.08.2023 10:10:29
GerdL
Moin Christian,
dass dir MCO Single-Variablen deklariert hat, halte ich für unwahrscheinlich.
'ungetestet:.......................
With sh_rein 'Daten eintragen

If Application.CountIfs(.Range("A:A"), Gebäude, Range("B:B"), num, .Range("C:C"), DZ_EZ) = 0 Then
.Cells(Z, "A") = Gebäude
.Cells(Z, "B") = num
.Cells(Z, "C") = DZ_EZ
'.Cells(z, "E") = "JA"
.Cells(Z, "F") = Uhrzeit
Else
MsgBox "Guckst du!"
End If
'..............
'..............

Gruß Gerd
Anzeige
Monat auslesen
14.08.2023 11:04:41
Christian
Hi,

hat leider nicht funktioniert, aber MCO hat sich ja gemeldet. Und ja, die Single kamen so bei mir an :-)


Gruß
Christian
Monat auslesen
14.08.2023 10:47:59
MCO
Hallo Christian!

Es sieht zwar etwas wild aus, aber mit deiner gewonnen Erkenntnis kannst du das sicher umgestalten.

Das Auslesen geht jetzt für den ganzen Monat. Nächste Forderung von dir wird sein, das Datum mit auszugeben, nächste Forderung: Unterscheidung zwischen den Tagen.
Da ich aber deine Vorstellung nicht kenne, hab ich das Datum mal angehängt und jeden neuen Tag grün markiert. Das wirst du im Code aber erkennen.

Hier der Code dazu (du solltest die Taste "Code .... usw" auch nutzen...)



Sub Zimmerreinigungsplan_mon()

Dim row As Single
Dim z As Single
Dim col As Single
Dim num As Range
Dim sh_rein As Worksheet
Dim sh_Beleg As Worksheet
Set sh_rein = Sheets("Reinigung")
Set sh_Beleg = Sheets("Belegung")

z = 4

With sh_Beleg
For Each num In .Range("E5:AA36") 'alle Zimmer, alle Tage durchgehen
col = num.Column
DZ_EZ = IIf(.Cells(4, col) = "", .Cells(4, col).End(xlToLeft), .Cells(4, col))
Gebäude = IIf(.Cells(3, col) = "", .Cells(3, col).End(xlToLeft), .Cells(3, col))

With num
If .Interior.ColorIndex > xlNone Then 'Zimmer belegt

If .Value = "" Then
Abreise = "Nein"
Uhrzeit = ""
Else
Abreise = "JA"
Select Case .Value
Case "norm": Uhrzeit = "8:00"
Case "late": Uhrzeit = "12:00"
End Select
End If
With sh_rein 'Daten eintragen
.Cells(z, "A") = Gebäude
.Cells(z, "B") = num.End(xlUp)
.Cells(z, "C") = DZ_EZ
.Cells(z, "E") = Abreise
.Cells(z, "F") = Uhrzeit
.Cells(z, "G") = CDate(sh_Beleg.Cells(num.row, "B"))

If .Cells(z, "G") > .Cells(z - 1, "G") And .Cells(z - 1, "G").Interior.ColorIndex = xlNone Then .Range(.Cells(z, "A"), .Cells(z, "G")).Interior.ColorIndex = 4
z = z + 1
End With
End If
End With
Next
End With
End Sub


Meld Dich, wenn du noch Fragen hast...

Gruß, MCO

Anzeige
Monat auslesen
14.08.2023 11:02:18
Christian
Hi MCO,

danke für den Code. Der klappt soweit ganz gut, nur, dass jetzt wieder die mit "Nein" aufgeführt sind. Ich brauche eigentlich nur die, die mit "JA", also die, die tatsächlich gereinigt wurden.
Das mit dem Datum und der Markierung ist eine sehr gute Idee von dir. Danke dafür.


Gruß
Christian



Monat auslesen
14.08.2023 11:42:49
MCO
Hach, dann hatte ich es doch richtig in Erinnerung, dass du nur die "JA" brauchtest.

Dann würde ich es aber komplett von den Zellen abhängig machen, in denen "Late" oder "norm" steht.
Hat den Vorteil, dass wir nur einen Bruchteil Zellen abklappern, bedeutet aber auch, dass, wenn ein Zimmer 3 Wochen belegt ist, nicht einmal geputzt wird....(?)
Außerdem ist die Spalte "Abreise" dann überflüssig, da immer JA drinsteht.
Schau mal, wie du das anwenden möchtest...


Sub Zimmerreinigungsplan_mon()

Dim row As Single
Dim z As Single
Dim col As Single
Dim num As Range
Dim sh_rein As Worksheet
Dim sh_Beleg As Worksheet
Dim DZ_EZ As String
Dim Gebäude As String
Dim Uhrzeit As String

Set sh_rein = Sheets("Reinigung")
Set sh_Beleg = Sheets("Belegung")

z = 4 'Vorbelegung zum Einfügen der Zimmer

'Set Rng = Range("A3").CurrentRegion.Offset(1, 0)
'Rng.Resize(Rng.Rows.Count - 1, Rng.Columns.Count + 4).Clear 'Beschriebenen Bereich löschen

With sh_Beleg
For Each num In .Range("E6:AA36").SpecialCells(xlCellTypeConstants) 'alle Zimmer, alle Tage durchgehen
col = num.Column
DZ_EZ = IIf(.Cells(4, col) = "", .Cells(4, col).End(xlToLeft), .Cells(4, col))
Gebäude = IIf(.Cells(3, col) = "", .Cells(3, col).End(xlToLeft), .Cells(3, col))

With num
Select Case .Value
Case "norm": Uhrzeit = "8:00"
Case "late": Uhrzeit = "12:00"
End Select

With sh_rein 'Daten eintragen
.Cells(z, "A") = Gebäude
.Cells(z, "B") = num.End(xlUp)
.Cells(z, "C") = DZ_EZ
.Cells(z, "E") = "JA"
.Cells(z, "F") = Uhrzeit
.Cells(z, "G") = CDate(sh_Beleg.Cells(num.row, "B"))

If .Cells(z, "G") > .Cells(z - 1, "G") And .Cells(z - 1, "G").Interior.ColorIndex = xlNone Then .Range(.Cells(z, "A"), .Cells(z, "G")).Interior.ColorIndex = 4
z = z + 1
End With
End With
Next
End With
End Sub

Gruß MCO
Anzeige
Monat auslesen
14.08.2023 14:11:03
Christian
Hi MCO,

genau so. Danke für deine Hilfe, ich hoffe das reicht dann auch.


Grüße
Christian
Monat auslesen
14.08.2023 09:47:09
Herbert Grom
Hallo Christian,

außerdem wäre noch interessant, wie das Ergebnis aussehen soll, bzw. was du mit dem Ergebnis machen willst.

Servus
Monat auslesen
14.08.2023 11:03:35
Christian
Hi,

das Ganze wieder auf ein Beispiel zu setzen, war in der schnelle nicht möglich, daher hab ich halt die alte Datei genommen. Sorry dafür.


Gruß
Christian

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige