Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1344to1348
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 S-Verweis

Problem mit S-Verweis
01.02.2014 16:46:43
Maiwe2106
Da ich neu hier bin: Hallo an alle!
Ich habe ein Problem mit meinem VBA SVerweis und bin im Forum leider nicht fündig geworden.
Die Formel für den SVerweis wird richtig eingefügt, jedoch findet er den Wert nicht.
Zunächst der Quellcode:
[\code]
'Es werden die Zeiten des Ofenstillstands in das Tabellenblatt "Ofenstillstand" aufgenommen
Sheets("Ofenstillstand").Activate
'Es werden die alten Inhalte gelöscht und die Tabellenköpfe neu geschrieben
ActiveSheet.UsedRange.Clear
Range("A1").Value = "Zeit"
Range("B1").Value = "Beginn?"
Range("C1").Value = "Ende?"
Range("D1").Value = "Ofenstilltand wegen Störung?"
Range("F1").Value = "Startzeit:"
Range("G1").NumberFormat = "d/m/yy h:mm;@"
Range("H1").Value = "Endzeit:"
Range("I1").NumberFormat = "d/m/yy h:mm;@"
'Es wird die Start- und Endzeit eingefügt
Range("G1").FormulaR1C1 = "=DG_ErgWfs_aufbereitet!R[1]C"
Range("I1").FormulaR1C1 = _
"=DG_ErgWfs_aufbereitet!R[" + Format(letzteZeile_DG_ErgWfs_aufbereitet_Filter - 1) + "]C[-1]"
'Es wird errechnet bis zur wievielten Zeile die Formeln eingefügt werden müssen
Dim anzahl_z As Long 'anzahl der Minuten im Betrachtungsbereich
anzahl_z = ((Range("I1") - Range("G1")) * 24 * 60)
'Einfügen aller Zeiten (minütlicher Abstand) und Formatieren
Dim lauf1 As Date 'Laufvariable die mintülich hochzählt
lauf1 = Range("G1")
Range("A2").Value = lauf1
Range("A3").Value = lauf1 + "00:01:00"
Range("A2:A3").AutoFill Destination:=Range(Cells(2, 1), Cells(anzahl_z + 10, 1)), Type:=xlFillSeries
Range("A:A").NumberFormat = "d/m/yy h:mm;@"
'Einfügen der Formeln, um festzustellen, ob ein Zeitpunkt ein Störbeginn oder ein Störende ist
'Es wird zum letzten Zeitpunkt "WAHR" für einen Störbeginn eingetragen, da die Schleife sonst mit einem Fehler beendet wird
'Das hat keinerlei Auswirkungen auf die Berechnung
Dim letzteZeile_Ofenstillstand As Long
letzteZeile_Ofenstillstand = ActiveSheet.UsedRange.SpecialCells(xlLastCell).Row
Range(Cells(2, 2), Cells(letzteZeile_Ofenstillstand, 2)).FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-1],DG_ErgWfs_aufbereitet!C[5],1,FALSE))=TRUE,"""",TRUE)"
Range(Cells(2, 3), Cells(letzteZeile_Ofenstillstand, 3)).FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-2],DG_ErgWfs_aufbereitet!C[5],1,FALSE))=TRUE,"""",TRUE)"
Cells(letzteZeile_Ofenstillstand, 2).Value = True
'Es wird geprüft, wann eine Störung beginnt bzw. endet und ein entsprechender Wert in Spalte "liegt Störung vor?" geschrieben
Range("B2").Activate
'Errechnen der Anzahl der Störungen aus Zeilenanzahl in "Störbericht_aufbereitet"
Dim Anz_Störungen As Long
Anz_Störungen = letzteZeile_DG_ErgWfs_aufbereitet_Filter - 1
Dim lauf2 As Long 'Laufvariable für die Schleife
Dim zeilenindex_SpalteA As Long
Dim zeilenindex_SpalteB As Long
For lauf2 = 1 To Anz_Störungen
zeilenindex_SpalteA = ActiveCell.Row
Range(Cells(zeilenindex_SpalteA, 3), Cells(letzteZeile_Ofenstillstand, 3)).Select
Selection.Find(True, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _
SearchFormat:=False).Activate
zeilenindex_SpalteB = ActiveCell.Row
Range(Cells(zeilenindex_SpalteA, 4), Cells(zeilenindex_SpalteB, 4)).Value = True
Range(Cells(zeilenindex_SpalteB - 1, 2), Cells(letzteZeile_Ofenstillstand, 2)).Select
Selection.Find(True, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
Next lauf2
[\code]
Nun zur Erklärung:
- in der Tabelle wird fortlaufend die Zeit im minütlichen Abstand (ausgehend von einem Startwert) in die erste Spalte geschrieben
- Dieser Startwert wird aus dem Tabellenblatt "DG_ErgWfs_aufbereitet" entnommen
- jetzt soll mit einem Konstrukt aus Wenn, Istfehler und SVerweis der Wert "Wahr" in die Spalte B geschrieben werden, insofern der Wert in dem Tabellenblatt gefunden wurde
- Leider gibt mir der SVerweis kein korrektes Ergebnis
- Erst sobald ich einen Suchwert markiere, in das Bearbeigungsfeld klicke und den Wert noch mal manuell mit Enter bestätige, funktioniert der S-Verweis
- Ich habe das Vorgehen mal mit einem Makro-Rekorder aufgezeichnet und er gibt mir:
ActiveCell.FormulaR1C1 = "1/6/2014 7:20"
Range("A29").Select
Vielleicht könnt ihr mir ja weiter helfen.
Vielen Dank

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem mit S-Verweis
01.02.2014 16:48:03
Maiwe2106
Ohh, leider sind die Einrückungen verschwunden. Ich hoffe es ist trotzdem lesbar...

AW: Problem mit S-Verweis
01.02.2014 16:55:08
Dani
Hallo Maiwe,
ist der Wert auf den sich der SVERWEIS bezieht eine Zahl oder ein Datum?
Dann probier mal, den Ausgangswert in deiner Formel oder einer Hilfsspalte mit 1 zu multiplizieren. Der SVERWEIS Fehler tritt oft bei importierten Daten auf, da hier oft Zahlen als Text gespeichert werden.
Hoffe das hilft,
Viele Grüße,
Dani

AW: Problem mit S-Verweis
01.02.2014 17:26:28
Maiwe2106
Das Problem ist damit gelöst... manchmal kann es so einfach sein! Danke!

AW: Problem mit S-Verweis
01.02.2014 18:01:05
Maiwe2106
Schade... ich hätte gedacht, das Problem wäre damit gelöst, weil sich im Vorfeld importierte Daten auf deinen Rat hin vom Text in ein Datumsformat umgewandelt haben.
Leider besteht der Fehler an späterer Stelle weiter.
Hinweis: die verglichenen Werte haben das gleiche Datumsformat.
Habt ihr eventuell noch eine andere Idee woran es liegen könnte?

Anzeige
AW: Problem mit S-Verweis
01.02.2014 18:05:15
Hajo_Zi
Du hast schon geprüft das es eine Zahl ist? Text der aussieht wie ein Datum bleibt Text. Mal mit Typ() prüfen.

AW: Problem mit S-Verweis
01.02.2014 18:11:43
Maiwe2106
Sie sind beide vom Typ "1", also Zahl

AW: Problem mit S-Verweis
01.02.2014 18:27:07
Dani
Hallo Maiwe,
wenn das ein Datum ist, dann wird eventuell irgendwo die Uhrzeit mit in der Ausgangszelle gespeichert (aber nicht angezeigt).
Du könntest das Datum in dem Fall dann nochmal mit DATUM(JAHR(Ausgangszelle);MONAT(Ausgangszelle);TAG(Ausgangszelle)) umwandeln. Das entfernt die Uhrzeit. Wenn die Formel einen Fehler gibt, ist es kein Datum.
Grüßle,
Dani

Anzeige
AW: Problem mit S-Verweis
01.02.2014 18:33:06
Maiwe2106
Es ist ein Datum mit dem Format 'd/m/yy h:mm;@'
Ich kann leider nicht auf die Zeitangabe verzichten. Die Zeitangaben sind auch bis auf die Sekunde genau gleich... Verstehe leider überhaupt nicht, warum der SVerweis dennoch nicht funktioniert.
Ich habe auch mal einen SVerweis ohne 'Wenn' und 'Istfehler' ausprobiert - Das Ergebnis ist das gleiche

AW: Problem mit S-Verweis
01.02.2014 18:44:44
Dani
Hallo Maiwe,
wandle mal beide Werte mit "DATWERT" in eine fortlaufende Zahl um - sind die dann unterschiedlich? Dann haben sich vielleicht noch Zehntel- oder Hundertstelsekunden eingeschlichen.
Schau dir mal die Funktionen STUNDE(), MINUTE(), SEKUNDE() an, falls die DATWERT Werte unterschiedlich sind, kannst du sie mit diesen Funktionen auf Sekundengenauigkeit kappen.
Viel Erfolg,
Daniela

Anzeige
AW: Problem mit S-Verweis
01.02.2014 18:54:13
Maiwe2106
Die Daten lassen sich mit Datwert nicht umwandeln. Es kommt als Fehlermeldung #Wert.
Als Wert steht in der zelle (z.B.): 06.01.2014 06:54:00
Stunde, Minute, Sekunde etc. geben den jeweiligen Wert der Zeitangabe an.

AW: Problem mit S-Verweis
01.02.2014 19:02:20
Dani
Machmal Datwert(Zellwert*1)
Wenn die Daten sich mit Datwert nicht umwandeln lassen, sind es keine Datumswerte. Dann hast du irgendwo nicht mit 1 multipliziert, wie in der ersten Antwort vorgeschlagen.

AW: Problem mit S-Verweis
01.02.2014 19:38:50
Erich
Hi Dani,
das ist wohl ein kleiner Irrtum:
Excel-Hilfe:
Mit der Funktion DATWERT wird ein als Text gespeichertes Datum in eine fortlaufende Zahl umgewandelt.
Maiwe hat hier keinen Text, sondern ein Datum (mit Uhrzeit), also eine Zahl.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Problem mit S-Verweis
01.02.2014 18:39:17
Maiwe2106
Ich vermute, dass es an dem Einfügen der Minuten-Zeiten liegt. Wie schon beschrieben, funktioniert der S-Verweis, wenn ich den Suchwert durch das EIngabefeld bestätige. Das aufgezeichnete Makro (für eine Einzelzelle) lieferte: ActiveCell.FormulaR1C1 = "1/6/2014 7:20"

ungenaue Dezimalzahlen
01.02.2014 19:35:41
Erich
Hi,
vermutlich wird dein Problem durch die (in einem endlichen Computer zwangsläufig) ungenaue Darstellung
von Dezimalzahlen verursacht.
Schau dir mal diese Daten an:
 ABCDE
1 Anzeigegleich?DiffWert
2 01.02.2014 11:45:48FALSCH5,11119E-0641671,49013377770
3ungerundet01.02.2014 11:45:48FALSCH5,55551E-0641671,49013888890
4 01.02.2014 11:45:48  41671,49014444430
5     
6gerundet01.02.2014 11:45:48WAHR041671,49013888890
7auf Sek.01.02.2014 11:45:48WAHR041671,49013888890
8 01.02.2014 11:45:48  41671,49013888890

Formeln der Tabelle
ZelleFormel
B2=E2
C2=B2=B3
D2=B3-B2
B3=E3
C3=B3=B4
D3=B4-B3
B4=E4
B6=DM(B2*864)/864
C6=B6=B7
D6=B7-B6
E6=B6
B7=DM(B3*864)/864
C7=B7=B8
D7=B8-B7
E7=B7
B8=DM(B4*864)/864
E8=B8


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
In den Zeilen 2:4 stehen drei ungerundete Zeiten, die in Spalte B gleich oder gar identisch aussehen,
es aber tatsächlich nicht sind.
Viele verschiedene Zahlen (die auf verschiedene Weise berechnet worden sein können),
können alle wie die selbe Uhrzeit aussehen.
Würde man den Wert B2 mit SVERWEIS in B3:B4 suchen - da gäbe es keinen Treffer.
Anders ist das bei B6:B8 - die Werte sind auf dieselbe Weise gerundet - und daher gleich.
DM(B4*864)/864 rundet auf Sekunden - DM auf 2 Nachkommastellen, 86400 ist 24*60*60.
Hilft das schon weiter?
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: ungenaue Dezimalzahlen
01.02.2014 22:20:36
Maiwe2106
Vielen Dank! Nach Rundung aller Werte hat es geklappt...

AW: ungenaue Dezimalzahlen
02.02.2014 19:23:33
Maiwe2106
Ich habe nun alle Daten, die in der Datei verwendet werden auf die volle Minute gerundet. Leider habe ich ein Problem mit der "Find"-Funktion bekommen. Obwohl die Daten vollkommen gleich sind (also auch bis zur x-ten Kommastelle), gibt Find den Laufzeitfehler 91 zurück.
Liegt das am Find-Befehl? Habt ihr eine Alternative dazu?

AW: ungenaue Dezimalzahlen
02.02.2014 19:26:57
Hajo_Zi
Meine Erfahrung für Datum sollte man nicht Find benutzen.
Datum suchen Sub Datum() Dim SuchDatum As Date ' Variiable als Datum Dim VaMatch As Variant ' da Fehler oder Zahl SuchDatum = Date ' Suchdatum zuweisen If Not IsError(Application.Match(CLng(SuchDatum), Rows(2), 0)) Then MsgBox "Datum vorhanden in Spalte " & Application.Match(CLng(SuchDatum), Rows(2), 0) Else MsgBox "Datum nicht vorhanden" End If End Sub Gruß Hajo

Anzeige
AW: ungenaue Dezimalzahlen
02.02.2014 19:31:29
Maiwe2106
Hallo Hajo und Danke für den Hinweis,
leider benutzte ich das Datum, um einen Verweis herzustellen. Es bringt mir also nichts, ein Datum zuzuweisen, sobald es nicht gefunden wurde. Ein Datum (was sogar 1:1 aus der Liste entnommen wird) wird in selbiger nicht mehr gefunden. Aus der Zeile in der das Datum übernommen wird, sollen verschiedene Werte übernommen werden.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige