Anzeige
Archiv - Navigation
1352to1356
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

Werte Prüfen, bei Ungültigkeit überspringen

Werte Prüfen, bei Ungültigkeit überspringen
17.03.2014 22:45:47
mkroes
Hallo Miteinander,
in einer for-Schleife prüfe ich aus n Arrays Werte mittels If-Schleifen und schreibe diese in eine Zeile. Sind diese ungültig, überspringe ich und nehm den nächsten Wert. Problem: Durch das überspringen entstehen mir leere Zeilen, was ich aber nicht haben möchte. Bitte daher um Ideen wie ich eine fortlaufende Ausgabe ohne Leerzeilen generieren kann.

For i = 1 To WB.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row 'bis zur letzten Zeile der  _
ersten Spalte aus der Importdatei
If ((InStr(1, myDatenImport(i, 2), "P2", vbTextCompare) = 1)
Position = InStr(1, myDatenImport(i, 2), "_", vbTextCompare)
Sheets(2).Cells(j + 10 + myletzteZeile, 6) = (Left(myDatenImport(i, 2), Position - 1))
Sheets(2).Cells(j + 10 + myletzteZeile, 5) = (Right(myDatenImport(i, 2), Len(myDatenImport(i,  _
2)) - Position)) 'Bezeichnung (5)
Sheets(2).Cells(j + 10 + myletzteZeile, 4) = myDatenImport(i, 4) 'Menge (4)
ElseIf (ZeichenZählen(myDatenImport(i, 2), "_") = 2) Then
PositionAnfang = InStr(1, myDatenImport(i, 2), "_", vbTextCompare)
PositionEnde = InStrRev(myDatenImport(i, 2), "_", -1, vbTextCompare)
Sheets(2).Cells(j + 10 + myletzteZeile, 5) = (Mid(myDatenImport(i, 2), PositionAnfang + 1,  _
PositionEnde - PositionAnfang - 1)) 'Bezeichnung (5)
Sheets(2).Cells(j + 10 + myletzteZeile, 6) = (Right(myDatenImport(i, 2), Len(myDatenImport(i,  _
2)) - PositionEnde)) 'Bestellnummer (6)
Sheets(2).Cells(j + 10 + myletzteZeile, 7) = (Left(myDatenImport(i, 2), PositionAnfang - 1)) ' _
Hersteller (7)
Sheets(2).Cells(j + 10 + myletzteZeile, 4) = myDatenImport(i, 4) 'Menge (4)
Else
i = i
'Spasseshalber könnte man hier noch versuchen den/die Fehler zu beschreiben (z.B. Anzahl "_" >  _
2 etc.)
MsgBox ("In Zeile " & i & " Bedingungen nicht erfüllt")
End If
Next
Danke!
Gruß Rico

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte Prüfen, bei Ungültigkeit überspringen
18.03.2014 07:46:17
fcs
Hallo Rico,
in der 1. If-Zeile fehlt noch irendwas, zumindest das Then am Ende.
irgenwo im restlichen Code erhöhst oder setzt du den Zeilen-Wert mit der Variablen "J" oder "myletzteZeile". Dadurch entstehen dann Leerzeilen, wenn keine der Bedingungen in deiner Schleife efüllt wird.
Diese Erhöhung um 1 bei jedem Treffer musst du nach der If- und der ElseIf-Zeile einbauen.
Gruß
Franz

AW: Werte Prüfen, bei Ungültigkeit überspringen
18.03.2014 10:05:07
mkroes
Hallo Franz,
habe auf die schnelle gestern Abend was probiert und leider den falschen Stand eingefügt. Hab das ganze mal korrigiert.
For i = 1 To WB.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row 'bis zur letzten Zeile der  _
ersten Spalte aus der Importdatei
If ((InStr(1, myDatenImport(i, 2), "P2", vbTextCompare) = 1) Then
Position = InStr(1, myDatenImport(i, 2), "_", vbTextCompare)
Sheets(2).Cells(i + 10 + myletzteZeile, 6) = (Left(myDatenImport(i, 2), Position - 1))
Sheets(2).Cells(i + 10 + myletzteZeile, 5) = (Right(myDatenImport(i, 2), Len(myDatenImport(i,  _
_
2)) - Position)) 'Bezeichnung (5)
Sheets(2).Cells(i + 10 + myletzteZeile, 4) = myDatenImport(i, 4) 'Menge (4)
ElseIf (ZeichenZählen(myDatenImport(i, 2), "_") = 2) Then
PositionAnfang = InStr(1, myDatenImport(i, 2), "_", vbTextCompare)
PositionEnde = InStrRev(myDatenImport(i, 2), "_", -1, vbTextCompare)
Sheets(2).Cells(i + 10 + myletzteZeile, 5) = (Mid(myDatenImport(i, 2), PositionAnfang + 1,  _
PositionEnde - PositionAnfang - 1)) 'Bezeichnung (5)
Sheets(2).Cells(i + 10 + myletzteZeile, 6) = (Right(myDatenImport(i, 2), Len(myDatenImport(i,  _
_
2)) - PositionEnde)) 'Bestellnummer (6)
Sheets(2).Cells(i + 10 + myletzteZeile, 7) = (Left(myDatenImport(i, 2), PositionAnfang - 1)) ' _
_
Hersteller (7)
Sheets(2).Cells(i + 10 + myletzteZeile, 4) = myDatenImport(i, 4) 'Menge (4)
Else
i = i
'Spasseshalber könnte man hier noch versuchen den/die Fehler zu beschreiben (z.B. Anzahl "_" >   _
_
2 etc.)
MsgBox ("In Zeile " & i & " Bedingungen nicht erfüllt")
End If
Next

Eine Idee war mittels einer eigenen Variablen j, die nur bei korrekter Ausgabe inkrementiert wird, zu arbeiten. Das hatte mich aber nicht weiter gebracht. :( Aber lese ich das so raus, das du das auch so lösen würdest?
Irgendwie hab ich immer das Gefühl, das das was ich Code ziemlich umständlich und unleserlich ist.
Gruß
Rico

Anzeige
AW: Werte Prüfen, bei Ungültigkeit überspringen
18.03.2014 11:08:09
fcs
Hallo Rico,
also ich würde das jetzt wie folgt lösen/vereinfachen:
1. Vor der For-Next-Schleife wird die letzte Zeile mit Daten in Scheet(2) ermittelt
Ich hab dazu mal die Spalte 6 mit der Bezeichnung genommen.
2. Falls die +10 Zeilen -warum auch immer- erforderlich sind dann werden sie dazu gezählt.
3. In der For-Next-Schleife wird bei jedem Treffer (If/ElseIf-Fall ist erfüllt)
die letzte Zeile um 1 erhöht. Danach werden die Daten aus dem Importblatt im Sheets(2) eingetragen.
Gruß
Franz
  With Sheets(2)
'letzte ausgefüllte Zeile in Spalte 5 "Bezeichnung"
myletzteZeile = .Cells(.Rows.Count, 5).End(xlUp).Row
myletzteZeile = myletzteZeile + 10 '? erforderlich ?
For i = 1 To WB.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row 'bis zur letzten Zeile _
der ersten Spalte aus der Importdatei
If InStr(1, myDatenImport(i, 2), "P2", vbTextCompare) = 1 Then
Position = InStr(1, myDatenImport(i, 2), "_", vbTextCompare)
myletzteZeile = myletzteZeile + 1
.Cells(myletzteZeile, 6) = Left(myDatenImport(i, 2), Position - 1)
.Cells(myletzteZeile, 5) = _
Right(myDatenImport(i, 2), Len(myDatenImport(i, 2)) - Position) 'Bezeichnung (5)
.Cells(myletzteZeile, 4) = myDatenImport(i, 4) 'Menge (4)
ElseIf ZeichenZählen(myDatenImport(i, 2), "_") = 2 Then
PositionAnfang = InStr(1, myDatenImport(i, 2), "_", vbTextCompare)
PositionEnde = InStrRev(myDatenImport(i, 2), "_", -1, vbTextCompare)
myletzteZeile = myletzteZeile + 1
.Cells(myletzteZeile, 5) = Mid(myDatenImport(i, 2), _
PositionAnfang + 1, PositionEnde - PositionAnfang - 1) 'Bezeichnung (5)
.Cells(myletzteZeile, 6) = Right(myDatenImport(i, 2), _
Len(myDatenImport(i, 2)) - PositionEnde) 'Bestellnummer (6)
.Cells(myletzteZeile, 7) = Left(myDatenImport(i, 2), _
PositionAnfang - 1) ' Hersteller (7)
.Cells(myletzteZeile, 4) = myDatenImport(i, 4) 'Menge (4)
Else
'Spasseshalber könnte man hier noch versuchen den/die Fehler zu beschreiben _
(z.B. Anzahl "_" > 2 etc.)
MsgBox ("In Zeile " & i & " Bedingungen nicht erfüllt")
End If
Next
End With

Anzeige
AW: Werte Prüfen, bei Ungültigkeit überspringen
18.03.2014 23:11:36
mkroes
Sodele,
deine Variante hat mir weitergeholfen. Thx!
Die + 10 waren ein Offset, der nach meiner Variante noch nötig war.
Gruß
Rico

93 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige