Anzeige
Archiv - Navigation
1600to1604
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

Vlookup oder Alternative

Vlookup oder Alternative
13.01.2018 09:55:10
URH
Hallo und Guten Morgen,
vor ein paar Tagen begann ich eine Dienstplan-Vorlage (https://www.herber.de/bbs/user/118916.xlsm) zu erstellen bei der nun die Arbeitszeiten in einem markierten Bereich eingetragen werden sollen.
Dies gelingt soweit, jedoch nur mit der jeweiligen Anfangszeit.
So wie ich jetzt herausfand läßt VLookup wohl nur ein Argument für "Col_index_num" zu. Nun benötige ich jedoch auch den Wert direkt daneben, der dann in Endzeit eingetragen werden soll.
Funktionieren sollte das bestenfalls so, daß der Benutzer aus der Liste in A3 die "Schicht" auswählt und anschließend einen beliebig langen Bereich, z.B. in Spalte C markiert. Mit wird dann die jeweilige Anfangs- und Endzeit eingetragen.
Wie schon beschrieben funktioniert das, jedoch nur mit der Anfangszeit.
Ideal, um Fehler zu vermeiden, wäre natürlich, wenn eine "Eingabe" bzw. Markierung nur in den "A-Spalten" vorgenommen werden kann, da die "E-Spalten" automatisch gefüllt und die "S-Spalten" berechnet werden.
Bei der Auswahl von freien Tagen, Urlaub, Krank oder FoBi bin ich mir noch nicht ganz sicher wo ich diesen Eintrag am besten platziere - das jeweilige Kürzel dazu in dem Fall in der "S-Spalte"!?
Vielleicht hat jemand einen piffigeren Vorschlag.
Ich freu mich über jeden Rat und Hilfe.
Gruß, URH

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Vlookup oder Alternative
13.01.2018 11:28:29
Peter(silie)
Hallo,
wenn du eine Alternative zu VLookUp suchst, dann empfehle ich folgende Dinge:
1. Range in Array umwandeln.
("tmp() = your_range.Value" wenn keine Datumswerte dabei sind, dann "tmp() = your_range.Value2")
2. falls nötig mit Application.Transpose arbeiten
(https://msdn.microsoft.com/de-de/vba/excel-vba/articles/worksheetfunction-transpose-method-excel)
3. Application.Match verwenden
(https://msdn.microsoft.com/de-de/vba/excel-vba/articles/worksheetfunction-match-method-excel)
oder einfach mit einer schleife durchgehen und auf Werte prüfen.
AW: Vlookup oder Alternative
13.01.2018 11:59:38
fcs
Hallo Peter,
hier fehlte dem guten URH einfach die Erfahrung im Umgang mit den Funktionen unter VBA.
Man muss die Funktion VLOOKUP hier "einfach" nur 2 mal anwenden und dabei den Spalte-Parameter anpassen und die beiden Werte in 2 Variablen speichern, dann kommt man weiter.
Gruß
Franz
Anzeige
AW: Vlookup oder Alternative
13.01.2018 11:49:24
fcs
Hallo URH,
man kann die Ende-Zeit in eine 2. Variable übernehmen und dann nacheinander die beiden Spalten ausfüllen.
Die Selektion eines korrekten Eingabebereichs (nur Zellen in einer Spalte selektiert UND in Zeile 5 der Spalte steht ein "A" kann man durch eine entsprechende Prüfung sicherstellen.
Auch die Auswahl von "Krank", "Urlaub", "Freizeit", "Fortbildung" kann man durch eine entsprechende Prüfung abfangen.
Beim Eintragen des Kürzels in die "S"-Spalte wird es etwas komplizierter.
Falls jemand die Eingabe wieder in eine Arbeitszeit korriegiert, dann muss in der S-Spalte die Formel wieder hergestellt werden, wird statt eingetragener Arbeitszeit eine der anderen Optionen eintragen möchte dann muss in A-und E-Spalte der Eintrag wieder gelöscht werden.
Ich hab das Makro "WriteVal" mal entsprechend angepasst.
In deinem Makro "Beschleunigen" ist noch ein Fehler.
Application.Calculation hat nicht die Werte True und False sondern 3 verschiedene nummerische Werte
xlCalculationManual=-4132
xlCalculationAutomatic=-4105
xlCalculationSemiautomatic=2
Ich hab das Makro jetzt so angepasst, dass zumBeschleunigen zwischen Manuel und Automatik umgeschaltet wird. Meisten steuert man es so, dass der aktuelle Berechnungsmodus in einer Variablen zwischengespeichert wird, zum Beschleunigen wird auf Manuel umgeschaltet und beim Rücksetzen der Beschleunigung wird der Berechnungsmodus wieder auf den gespeicherten Wert gesetzt.
Gruß
Franz
Noch ein Hinweis:
Wenn du hier eine Datei hochlädst, dann füge den Link in eine separate Zeile ein oder du muss vor und nach dem Link ein Leerzeichen einfügen. Sonst wird der Link nicht als aktiver Hyperlink in deiner Frage/Antwort dargestellt.
Function Beschleunigen(ByVal BGesetzt As Boolean)
BGesetzt = Not BGesetzt
With Application
.ScreenUpdating = BGesetzt
.AskToUpdateLinks = BGesetzt
.EnableEvents = BGesetzt
If BGesetzt Then
.Calculation = xlCalculationAutomatic
Else
.Calculation = xlCalculationManual
End If
.DisplayAlerts = BGesetzt
End With
End Function
Sub WriteVal()
Dim oVal As Variant
Dim oVal2 As Variant
Dim rAC As Range
'Prüfen, ob nur eine Spalte selektiert ist und in Zeile 5 ein A steht
Set rAC = Selection
If rAC.Columns.Count = 1 And ActiveSheet.Cells(5, rAC.Column) = "A" Then
oVal = Application.WorksheetFunction.VLookup(Tabelle1.Range("A3"), _
Tabelle2.Range("D1:F10"), 2, False)
If IsNumeric(Left(Tabelle1.Range("A3"), 2)) Then 'Arbeitszeiten
oVal2 = Application.WorksheetFunction.VLookup(Tabelle1.Range("A3"), _
Tabelle2.Range("D1:F10"), 3, False)
rAC.Value = oVal
rAC.Offset(0, 1).Value = oVal2
'ggf Formel in S-Spalte wieder herstellen
If Not rAC.Offset(0, 2).HasFormula Then
rAC.Offset(0, 2).FormulaR1C1 = "=RC[-1]-RC[-2]"
End If
Else
'Freizeit, Urlaub,Krank,Fortbildung etc
rAC.Offset(0, 2).Value = oVal
rAC.ClearContents
rAC.Offset(0, 1).ClearContents
End If
Else
MsgBox "Bitte nur Zellen in einer Spalte für Eingabe von Anfangszeiten " _
& "(A in Zeile 5) selektieren", _
vbOKOnly, "Prüfen Eingabebereich"
End If
Set rAC = Nothing
End Sub

Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige