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

ElseIf Abfrage Funktioniert nicht

ElseIf Abfrage Funktioniert nicht
09.08.2023 12:00:29
Walter Frosch
Ich habe folgendes Problem:
Beim ausführen meines Makros funktioniert die If Abfrage, die ElseIf abfrage jedoch nicht.

Wenn z.B.: Zelle (E1) den Wert: 32,392573 hat
und Zelle H1 den Wert: 32,792573 hat sollte die ElseIf Bedingung erfüllt sein.

Jedoch wird: IfRows.... einfach übersprungen
Bei der If Abfrage gibt es jedoch keine Probleme.

Vielen Dank im Voraus

PS: das *1000000 ist um Probleme mit "," und "." zu umgehen
und ich hab keine Ahnung, warum der Code zwei mal angezeigt wird


 

'Counter festlegen
Dim LC1 As Long
LC1 = 1

'Collection zum sammeln der zu löschenden Element anlegen
Dim RowsToDelete As Range

'Letzte Zeile ermitteln
Dim LastRow As Long
LastRow = getLastRow("DXFOutline")

'Spalten durchlaufen
For LC1 = 1 To LastRow

'Überprüfen ob Zahlen in beiden Zellen sind
If IsNumeric(Cells(LC1, 5).value) And IsNumeric(Cells(LC1, 8).value) Then

'Zeilen löschen, wenn Radius des Kreises = 0.4
If Abs(Cells(LC1, 5).value * 1000000 - Cells(LC1, 8).value * 1000000) = 0.4 * 1000000 Then
If RowsToDelete Is Nothing Then
Set RowsToDelete = Rows(LC1).Resize(2) ' Aktuelle Zeile und die nächste Zeile
Else
Set RowsToDelete = Union(RowsToDelete, Rows(LC1).Resize(2))
End If
'Zeilen löschen, wenn Radius des Kreises = -0.4
ElseIf Abs(Cells(LC1, 8).value * 1000000 - Cells(LC1, 5).value * 1000000) = 0.4 * 1000000 Then
If RowsToDelete Is Nothing Then
Set RowsToDelete = Rows(LC1).Resize(2) ' Aktuelle Zeile und die nächste Zeile
Else
Set RowsToDelete = Union(RowsToDelete, Rows(LC1).Resize(2))
End If
End If

End If

Next LC1

If Not RowsToDelete Is Nothing Then
RowsToDelete.Delete
End If
'Counter festlegen Dim LC1 As Long LC1 = 1 'Collection zum sammeln der zu löschenden Element anlegen Dim RowsToDelete As Range 'Letzte Zeile ermitteln Dim LastRow As Long LastRow = getLastRow("DXFOutline") 'Spalten durchlaufen For LC1 = 1 To LastRow 'Überprüfen ob Zahlen in beiden Zellen sind If IsNumeric(Cells(LC1, 5).value) And IsNumeric(Cells(LC1, 8).value) Then 'Zeilen löschen, wenn Radius des Kreises = 0.4 If Abs(Cells(LC1, 5).value * 1000000 - Cells(LC1, 8).value * 1000000) = 0.4 * 1000000 Then If RowsToDelete Is Nothing Then Set RowsToDelete = Rows(LC1).Resize(2) ' Aktuelle Zeile und die nächste Zeile Else Set RowsToDelete = Union(RowsToDelete, Rows(LC1).Resize(2)) End If 'Zeilen löschen, wenn Radius des Kreises = -0.4 ElseIf Abs(Cells(LC1, 8).value * 1000000 - Cells(LC1, 5).value * 1000000) = 0.4 * 1000000 Then If RowsToDelete Is Nothing Then Set RowsToDelete = Rows(LC1).Resize(2) ' Aktuelle Zeile und die nächste Zeile Else Set RowsToDelete = Union(RowsToDelete, Rows(LC1).Resize(2)) End If End If End If Next LC1 If Not RowsToDelete Is Nothing Then RowsToDelete.Delete End If

26
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ElseIf Abfrage Funktioniert nicht
09.08.2023 12:11:42
Rudi Maintaire
Hallo,
Abs(Cells(LC1, 5).value * 1000000 - Cells(LC1, 8).value * 1000000)
ergibt das gleiche wie
Abs(Cells(LC1, 8).value * 1000000 - Cells(LC1, 5).value * 1000000)

ABS(2-1)=1
ABS(1-2)=1

Gruß
Rudi
AW: ElseIf Abfrage Funktioniert nicht
09.08.2023 12:37:41
Walter Frosch
Hallo,

ah stimmt, danke. Das erklärt aber trotzdem nicht, warum dann das erste If nicht darauf anspricht, da die Bedingung ja eigentlich erfüllt ist oder?
AW: ElseIf Abfrage Funktioniert nicht
09.08.2023 12:57:15
Rudi Maintaire
?????
Beim ausführen meines Makros funktioniert die If Abfrage,
ElseIf Abfrage Funktioniert nicht
09.08.2023 13:32:31
Walter Frosch
Wenn die Werte entsprechend meiner ersten Nachricht sind, wird die If-Anweisung trotzdem nicht ausgeführt obwohl die Rechnung stimmen würde.
Das Problem tritt immer bei den selben Werten auf.
Ich erinnere mich daran, dass es bei C++ beim rechnen mit Gleitkommazahlen zu Problemen kommen kann, da diese oft nicht "exakt" sind.
Kann es sein, dass es ein ähnliches Problem bei vba gibt. Bzw. weißt du eine Lösung für mein Problem.

Bsp Problem - Werte:
E1: 133,127373 H1: 133,527373
E1: 66,586773 H1: 66,986773

Bei anderen Werten (Bsp.: E1: 26,170073 H1: 36,570073) funktioniert es einwandfrei.

Anzeige
ElseIf Abfrage Funktioniert nicht
09.08.2023 14:06:01
Rudi Maintaire
Kann es sein, dass es ein ähnliches Problem bei vba gibt. Bzw. weißt du eine Lösung für mein Problem.
Ja. Das Problem gibt es in allen Programmiersprachen. Die Lösung ist RUNDEN.

ABS(Round(Cells(z,5),6)-Round(Cells(z,8),6))>0.4
oder klassisch
ABS(INT(Cells(z,5)*10^6) -INT(Cells(z,8)*10^6))>400000

Gruß
Rudi
AW: ElseIf Abfrage Funktioniert nicht
09.08.2023 13:24:53
onur
Nur du kannst wissen, ob die Bedingung erfüllt ist, oder nicht, denn nur du hast die Datei vor der Nase...
Ausserdem: was soll der Quatsch mit der 1000000 überhaupt?
If Abs(Cells(LC1, 5).value * 1000000 - Cells(LC1, 8).value * 1000000) = 0.4 * 1000000 Then

ist das Selbe wie
If Abs(Cells(LC1, 5).value  - Cells(LC1, 8).value ) = 0.4  Then

Das ist Hauptschulmathematik (6. Klasse ?)
Anzeige
ElseIf Abfrage Funktioniert nicht
09.08.2023 13:37:52
Walter Frosch
Hallo onur,

Wie in meiner ersten Nachricht schon erwähnt, brauche ich das *1000000, da es sonst Probleme mit dem Vergleich von "." und ","gibt.
AW: ElseIf Abfrage Funktioniert nicht
09.08.2023 13:53:30
onur
"da es sonst Probleme mit dem Vergleich von "." und ","" ??? Du vergleichst also Äpfel mit Birnen (Text mit Zahl) ?
Und warum postest du nicht endlich das KOMPLETTE Makro?
Ich wette, dass da noch irgendwas mit "On Error..." existiert.
ElseIf Abfrage Funktioniert nicht
09.08.2023 14:01:16
Walter Frosch
Nein die Dezimalzahlen in der Tabelle sind mit "," getrennt. Im vba Code muss ich jedoch "." verwenden.
Da das ersetzten von "," mit "." falsche Ergebnisse liefert, bin ich gezwungen es auf diese Art und Weise zu machen.

anbei das ganze Makro:
keine Ahnung warum des Code schon wieder 2 mal hintereinander angezeigt wird



Sub seperate_Outline()
'

Application.ScreenUpdating = False
Application.EnableEvents = False

'alte Outline l�schen
Sheets("DXFOutline").Cells.Clear

'Kopieren des DXFImports
Sheets("DXFDatei").Select
Cells.Select
Selection.Copy
Sheets("DXFOutline").Select
Range("A1").Select
ActiveSheet.Paste

'Counter festlegen
Dim LC1 As Long
LC1 = 1

'Collection zum sammeln der zu l�schenden Element anlegen
Dim RowsToDelete As Range

'Letzte Zeile ermitteln
Dim LastRow As Long
LastRow = getLastRow("DXFOutline")

'Spalten durchlaufen
For LC1 = 1 To LastRow

'�berpr�fen ob Zahlen in beiden Zellen sind
If IsNumeric(Cells(LC1, 5).value) And IsNumeric(Cells(LC1, 8).value) Then

'Zeilen l�schen, wenn Radius des Kreises = 0.4
If Abs(Cells(LC1, 8).value * 1000000 - Cells(LC1, 5).value * 1000000) = 0.4 * 1000000 Then
If RowsToDelete Is Nothing Then
Set RowsToDelete = Rows(LC1).Resize(2) ' Aktuelle Zeile und die n�chste Zeile
Else
Set RowsToDelete = Union(RowsToDelete, Rows(LC1).Resize(2))
End If
End If

End If

Next LC1

If Not RowsToDelete Is Nothing Then
RowsToDelete.Delete
End If

ThisWorkbook.Worksheets("User Interface").Activate


Application.ScreenUpdating = True
Application.EnableEvents = True

MsgBox "Outline wurde erfolgreich getrennt.", vbInformation, "seperate_Outline"


End Sub

Private Function getLastRow(Blatt As String)

ThisWorkbook.Worksheets(Blatt).Activate

Dim TotalRow As Long

getLastRow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

ThisWorkbook.Worksheets("DXFOutline").Activate

End Function
Sub seperate_Outline() ' Application.ScreenUpdating = False Application.EnableEvents = False 'alte Outline l�schen Sheets("DXFOutline").Cells.Clear 'Kopieren des DXFImports Sheets("DXFDatei").Select Cells.Select Selection.Copy Sheets("DXFOutline").Select Range("A1").Select ActiveSheet.Paste 'Counter festlegen Dim LC1 As Long LC1 = 1 'Collection zum sammeln der zu l�schenden Element anlegen Dim RowsToDelete As Range 'Letzte Zeile ermitteln Dim LastRow As Long LastRow = getLastRow("DXFOutline") 'Spalten durchlaufen For LC1 = 1 To LastRow '�berpr�fen ob Zahlen in beiden Zellen sind If IsNumeric(Cells(LC1, 5).value) And IsNumeric(Cells(LC1, 8).value) Then 'Zeilen l�schen, wenn Radius des Kreises = 0.4 If Abs(Cells(LC1, 8).value * 1000000 - Cells(LC1, 5).value * 1000000) = 0.4 * 1000000 Then If RowsToDelete Is Nothing Then Set RowsToDelete = Rows(LC1).Resize(2) ' Aktuelle Zeile und die n�chste Zeile Else Set RowsToDelete = Union(RowsToDelete, Rows(LC1).Resize(2)) End If End If End If Next LC1 If Not RowsToDelete Is Nothing Then RowsToDelete.Delete End If ThisWorkbook.Worksheets("User Interface").Activate Application.ScreenUpdating = True Application.EnableEvents = True MsgBox "Outline wurde erfolgreich getrennt.", vbInformation, "seperate_Outline" End Sub Private Function getLastRow(Blatt As String) ThisWorkbook.Worksheets(Blatt).Activate Dim TotalRow As Long getLastRow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row ThisWorkbook.Worksheets("DXFOutline").Activate End Function
Anzeige
AW: ElseIf Abfrage Funktioniert nicht
09.08.2023 14:03:11
onur
Poste bitte auch mal die Datei.
AW: ElseIf Abfrage Funktioniert nicht
09.08.2023 14:19:25
onur
Da ist aber nix mit "ElseIf" im Makro !
ElseIf Abfrage Funktioniert nicht
09.08.2023 14:24:07
Walter Frosch
Ja das habe ich geändert, da es mir von Rudi in einer vorherigen Antwort geraten wurde.
Lies dir am besten die vorherigen Fragen und antworten durch.
AW: ElseIf Abfrage Funktioniert nicht
09.08.2023 14:25:34
onur
Erzähl mir lieber mal, was das Makro jetzt genau tun soll.....
ElseIf Abfrage Funktioniert nicht
09.08.2023 14:38:42
Walter Frosch
Es soll überprüfen, in welcher Zeile die Differenz der beiden Werte genau 0,4 ist, und dann diese und die darauffolgende Zeile löschen.
Größtenteils funktioniert das auch, aber eben nicht bei allen Werten.
Anzeige
AW: ElseIf Abfrage Funktioniert nicht
09.08.2023 14:57:31
onur
So einfach geht das:
Sub seperate_Outline2()

Dim z
With Worksheets("DXFDatei")
For z = 1000 To 1 Step -1
If IsNumeric(.Cells(z, 5)) Then
If Abs(.Cells(z, 5) - .Cells(z, 8)) = 0.4 Then
.Rows(z).Delete
.Rows(z + 1).Delete
End If
End If
Next z
End With
End Sub
ElseIf Abfrage Funktioniert nicht
09.08.2023 15:04:08
Walter Frosch
Anscheinend hast du den Code nicht ein einziges mal getestet, da er nicht funktioniert.
AW: ElseIf Abfrage Funktioniert nicht
09.08.2023 15:06:27
onur
Ich teste immer die Codes, es hat funktioniert!
Statt zu meckern, solltest du dich bedanken und fragen, was DU evtl falsch gemacht hast !
Anzeige
AW: ElseIf Abfrage Funktioniert nicht
09.08.2023 15:11:12
onur
Der Blattname war falsch:
Sub seperate_Outline2()

Dim z
With Worksheets("DXFOutline")
For z = 1000 To 1 Step -1
If IsNumeric(.Cells(z, 5)) Then
If Abs(.Cells(z, 5) - .Cells(z, 8)) = 0.4 Then
.Rows(z).Delete
.Rows(z + 1).Delete
End If
End If
Next z
End With
End Sub
ElseIf Abfrage Funktioniert nicht
09.08.2023 15:33:24
Walter Frosch
Der Code funktioniert (zumindest bei mir) trotzdem noch nicht.
Dadurch, dass du die Zeilen in der Schleife löschst stimmt der Counter nicht mehr.
Und das Problem, dass manche Zeilen gelöscht werden und manche nicht ist dadurch auch nicht gelöst.
Wahrscheinlich muss ich mir eine komplett andere Lösung überlegen.
Anzeige
AW: ElseIf Abfrage Funktioniert nicht
09.08.2023 15:41:41
onur
Sorry, nur ein Tippfehler:
Sub seperate_Outline2()

Dim z
With Worksheets("DXFOutline")
For z = 1000 To 1 Step -1
If IsNumeric(.Cells(z, 5)) Then
If Abs(.Cells(z, 5) - .Cells(z, 8)) = 0.4 Then
.Rows(z + 1).Delete
.Rows(z).Delete
End If
End If
Next z
End With
End Sub
ElseIf Abfrage Funktioniert nicht
09.08.2023 14:17:04
Rudi Maintaire
Nein die Dezimalzahlen in der Tabelle sind mit "," getrennt. Im vba Code muss ich jedoch "." verwenden.
Das kommt daher, dass VBA ENGLISCH ist.
Man muss nichts ersetzen/ umwandeln. Das wird korrekt ausgelesen. Wenn in einer Zelle 15,38 steht, ist das in VBA 15.38.
Anders ist es, wenn in einer Zelle ein Text steht, der wie eine Zahl aussieht. Das kommt bei Importen schon mal vor.

Gruß
Rudi
Anzeige
ElseIf Abfrage Funktioniert nicht
09.08.2023 14:40:01
Walter Frosch
Ja das dachte ich auch, wenn ich jedoch das * 1000000 weglasse, funktioniert es nicht mehr.
ElseIf Abfrage Funktioniert nicht
09.08.2023 14:42:05
Rudi Maintaire
dann hast du 'Textzahlen', die durch die Multiplikation umgewandelt werden. +0 oder *1 sollte auch reichen.
ElseIf Abfrage Funktioniert nicht
09.08.2023 14:54:10
Walter Frosch
nein funktioniert leider nicht. *1000000 ist das einzige was funktioniert
dann bleib dabei
09.08.2023 15:05:52
Rudi Maintaire
was zählt, ist dass es funktioniert.
Ich kenn ja deine Daten nicht.

Gruß
Rudi

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige