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

WVerweis / SVerweis

WVerweis / SVerweis
10.08.2023 07:36:20
Christian
Guten Morgen Excel-Profis,

ich hab mir da eine Aufgabe gestellt, der ich scheinbar nicht gewachsen bin, bzw. vergisst man so schnell.

Ich habe mal beispielhaft einen Belegungsplan in Tabelle1. Auf Tabelle2 möchte ich eine Reinigung anhand des Datums (Zelle B1) auswerten. Dabei soll im Belegungsplan in der Spalte B nach dem Datum gesehen werden und dann nach rechts die jenigen Zimmer übertragen werden, die "dran" sind. Dabei soll das Gebäude (A oder B) aus Zeile 3, das Zimmer (EZ/DZ) aus Zeile 4 und die Nummer des Zimmers aus Zeile 5 sowie die Uhrzeit (norm/late) aus der Zelle übertragen werden.
Vermutlich ist es, da ja nach rechts gesucht wird, ein WVerweis, ich bin aber schon bei der Suche nach dem Datum gescheitert....

Vielleicht weiß ja jemand von euch, wie das zu bewerkstelligen ist.

Danke
Christian


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

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: nachgefragt ...
10.08.2023 08:57:18
neopa C
Hallo Christian,

... sollen als Ergebnis nur ZNr 10 mit norm und ZNr 14 mit late gefunden werden? Nur dann gibt es eine Formellösung, andernfalls sind Deine Angaben nicht eindeutig bzw. müßte dafür in jeder farbig hinterlegten Zelle auch norm/late stehen oder es ist mit Formeln nicht lösbar sondern nur mit VBA.

Gruß Werner
.. , - ...
AW: nachgefragt ...
10.08.2023 12:20:56
Christian
Servus,

es sollen alle Zimmer gefunden werden, bei denen an einem bestimmten Tag das Datum und der Inhalt "norm" bzw. "late" drin steht. Das Ganze sollte mit Gebäude, Zimmernummern und Uhrzeit ausgegeben werden. Ja/Nein könnte ich mir über die Befüllung der Uhrzeit ja sonst holen (wennleer...)

Gruß
Christian
Anzeige
AW: wen dem so sein soll ...
10.08.2023 19:24:06
neopa C
Hallo Christian,

... dann könnte ich Dir auch eine Formellösung aufzeigen, wenn eine solche von Dir noch angestrebt sein sollte. Ist das der Fall?

Gruß Werner
.. , - ...
VBA-Lösung
10.08.2023 09:25:03
MCO
Moin Christian!

Ich hab´s nur mit VBA hinbekommen.
Einen Formelansatz hatte ich auch, aber der war mit den fortgeschrittenen Funktionen von O365, also wenig hilfreich für dich.

Daher hier meine VBA-Lösung.




-ABCDEF
1Datum:05.01.2023
2
3Gebäude ZimmernummerEinzel- oder DoppelzimmerAbreiseUhrzeit
4A10EinzelzimmerJA08:00
5A14EinzelzimmerNein
6A18EinzelzimmerNein
7A20EinzelzimmerJA12:00
8B306DoppelzimmerNein

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 .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
.Cells(z, "C") = DZ_EZ
.Cells(z, "E") = Abreise
.Cells(z, "F") = Uhrzeit
z = z + 1
End With
End If
End With
Next
End Sub


Aus deiner xlsx-Datei wird dann natürlich eine xlsm

Viel Erfolg!
Gruß, MCO
Anzeige
AW: WVerweis / SVerweis
10.08.2023 19:39:32
daniel
Hi

beisspielsweise so, hier mal für die Zimmernummern, bei denen am jeweiligen Tag bei der Belegung etwas eingetragen ist:

=WENNFEHLER(INDEX(Belegung!$5:$5;AGGREGAT(15;6;SPALTE(Belegung!$E$5:$AA$5)/(INDEX(Belegung!$E$6:$AA$36;VERGLEICH($B$1;Belegung!$B$6:$B$36;0);0)>"");ZEILE(A1)));"")


das Aggregat liefert dir die Spaltennummer, dh anderen Infos kannst du dir dann holen, in dem du beim ersten Index eine andere Zeile einträgst, allerdings muss die Info dann in jeder Zelle stehen, nicht so wie bei dir.
oder du machst eine Hilfstabelle, in der zu jeder Zimmernummer die Daten wie Gebäude, Einzel oder Doppel hinterlegt sind und spielst die dann über die Zimmernummer zu.

Gruß Daniel
Anzeige
AW: WVerweis / SVerweis
11.08.2023 06:47:51
Christian
Hi Daniel,

danke für deine Formel.
Ich speicher die mal ab, falls ich wieder mal so etwas in der Art habe. Über VBA ist es etwas komfortabler und v.a. "löschsicher".

Trotzdem danke für deine Hilfe

Gruß
Christian
AW: VBA-Lösung
10.08.2023 12:32:11
Christian
Hi MCO,

ich habe den Code gerade mal ausgeführt. Das schaut ganz gut aus.
Mir ist nur aufgefallen, dass ich eigentlich die Aufschlüsselung "Nein" gar nicht benötige (sorry). Es würde vollkommen ausreichen, wenn die Zimmer aufgeführt sind, die gereinigt werden müssten, also die mit Markierung und Text.

Im Code sehe ich, zumindest denke ich mir das, nur die Abfrage nach "Farbmarkierung". Leider finde ich nicht, wie ich das weg bekomme.


Gruß
Christian
Anzeige
AW: VBA-Lösung, Nur ABreise
10.08.2023 16:39:44
MCO
Hallo Christian!

Dann sieht es so aus:
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


Die verminderte Anforderung bringt dich übrigens deiner Formellösung verdammt nah!

Gruß, MCO
Anzeige
AW: VBA-Lösung, Nur ABreise
11.08.2023 06:44:06
Christian
Hi MCO,

danke, genau das ist es.
Zwecks Formel, schaue ich mal.

Danke für deine Hilfe.


Grüße
Christian
AW: VBA-Lösung, Nur ABreise
11.08.2023 11:12:35
Christian
HI MCO,

eine (hoffentlich) letzte Frage.
Wie sehe denn der Code aus, wenn ich mir z.B. den Januar komplett für alle Gebäude auswerten möchte. Da müsste vermutlich bei "Set gefunden" etwas geändert werden. Ich habe es mit einem Verweis auf den Januar probiert, da kommt aber dann deine MsgBox.

Hmm.

Gruß
Christian

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige