Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1964to1968
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 <= einem Wert werden nicht erkannt

Werte <= einem Wert werden nicht erkannt
27.02.2024 19:20:55
Frank
Guten Abend an Alle,

ich habe ein seltsames Problem. Ich möchte mittels VBA herausfinden, ob Werte zwischen bestimmten Bereichen liegen. Ich habe Werte die genau 1 sind und mir diese auch per MsgBox bzw. im Direktbereich ausgeben lassen. Dort steht immer der Wert 1. Wenn ich nun die If Abfrage mache, dann springt VBA dort immer drüber, obwohl der Wert = 1 ist. Wisst ihr eventuell woran das liegen könnte?

If FlatLevel_ges(i, j) > 0 And FlatLevel_ges(i, j) = 1 Then

SP01 = SP01 + 1
End If


Vielen Dank und viele Grüße
Frank

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte <= einem Wert werden nicht erkannt
27.02.2024 19:30:37
JoWE
Hallo Frank,
was soll man da tun?
Raten, im Trüben fischen oder würfeln vielleicht.
Wir kennen Deine Daten nicht.
Du erwähnst sie aber zeigst sie nicht. Genau das könnte jedoch nützlich sein.
Gruß
Jochen
AW: Werte <= einem Wert werden nicht erkannt
27.02.2024 21:22:57
Piet
Hallo

statt Datei hochladen benutze ich einfach meinen Kopf um sowas zu testen. Hier mein Testaufbau.
Weil ich nicht wusste was FlatLevel_ges(i, j) ist, habe ich den Test mit Cells(i, j) durchgeführt.
Das Ergebnis ist einwandfrei, es wird bei 1 um 1 hochgezält! Was nicht wirklich überraschend ist!

Dafür gibt es nur eine einzige Erklärung! - Bitte mal selbst überprüfen.
Der Wert in FlatLevel_ges(i, j) muss kleiner als 0 sein, ein negativer Wert!

mfg Piet

Sub test()

i = 2: j = 2: SP01 = 0
'If FlatLevel_ges(i, j) > 0 And FlatLevel_ges(i, j) = 1 Then
If Cells(i, j) > 0 And Cells(i, j) = 1 Then
SP01 = SP01 + 1
End If
MsgBox SP01
End Sub
Anzeige
AW: Werte <= einem Wert werden nicht erkannt
28.02.2024 01:47:58
Onur
"Der Wert in FlatLevel_ges(i, j) muss kleiner als 0 sein, ein negativer Wert! "
Oder aber gleich 0.
AW: Werte <= einem Wert werden nicht erkannt
28.02.2024 11:54:46
JoWE
tja, manchmal genügt es ja tatsächlich einfach nur den Kopf zu benutzen.
Und doch ist das bei unbekannter Datenlage häufig eben gleichwohl "Würfeln"
AW: Werte <= einem Wert werden nicht erkannt
28.02.2024 12:10:18
Frank
Hallo JoWE,

ich verstehe deine Antwort nicht. Ich habe meinen Kopf auch benutzt. Und dennoch die Datei hochgeladen. Wenn ich die Daten einlese und bspw. alle Werte zischen Null und kleiner gleich 1 zählen möchte, dann zählt VBA genau einen Wert. Die Zählenwenns Funktion zählt im Datenblatt 14 Mal eine Zahl in dem angegebenen Bereich.

Und wenn ich nun in das Datenblatt gehe und mir per bedingter Formatierung alle Zahlen markiere die = 1 sind und diese Zellen eine 1 eingebe und die Sub nochmal laufen lassen, dann zählt auch VBA 14 mal die 1. Und das ist das was ich nicht verstehe, weil ja auch davor eine 1 drin steht. Ich hoffe das ich, mein Anliegen klar erläutern konnte.

Viele Grüße
Frank
Anzeige
AW: Werte <= einem Wert werden nicht erkannt
28.02.2024 12:11:18
Frank
.
AW: Werte <= einem Wert werden nicht erkannt
28.02.2024 12:20:39
JoWE
Frank, Du warst damit nicht gemeint, ich bezog mich damit auf einen anderen Beitrag.
Gruß
Jochen
Erkunden der AVL-Baumdatenstruktur in C++
28.02.2024 23:14:57
billy21
Liebe C++-Enthusiasten,

AVL-Bäume sind ausgewogene binäre Suchbäume, die eine effiziente Speicherung und Abfrage geordneter Daten in der Informatik ermöglichen. Das Beherrschen von AVL-Baumimplementierungen in C++ erfordert jedoch ein solides Verständnis der AVL-Baumeigenschaften, Rotationsoperationen und allgemeiner Operationen wie Einfügen, Löschen und Suchen. Diese Frage befasst sich mit den Feinheiten von AVL-Baumimplementierungen in C++ und konzentriert sich auf Implementierung, Ausgleich und häufige Anwendungsfälle.

Szenarioübersicht:

AVL-Bäume bieten eine ausgewogene Alternative zu standardmäßigen binären Suchbäumen und gewährleisten eine effiziente Datenspeicherung und -abfrage mit logarithmischer Zeitkomplexität. Diese Frage zielt darauf ab, AVL-Baumimplementierungen in C++ zu untersuchen und Best Practices für eine effiziente Implementierung und Nutzung aufzudecken.

Hier ist der Codeausschnitt:

// Example implementation of an AVL tree in C++

#include

class AVLNode {
public:
int data;
AVLNode* left;
AVLNode* right;
int height;
AVLNode(int value) : data(value), left(nullptr), right(nullptr), height(1) {}
};

class AVLTree {
private:
AVLNode* root;
public:
AVLTree() : root(nullptr) {}

int getHeight(AVLNode* node) {
if (node == nullptr) {
return 0;
}
return node->height;
}

int getBalanceFactor(AVLNode* node) {
if (node == nullptr) {
return 0;
}
return getHeight(node->left) - getHeight(node->right);
}

AVLNode* rightRotate(AVLNode* y) {
AVLNode* x = y->left;
AVLNode* T = x->right;

x->right = y;
y->left = T;

y->height = std::max(getHeight(y->left), getHeight(y->right)) + 1;
x->height = std::max(getHeight(x->left), getHeight(x->right)) + 1;

return x;
}

// Additional AVL tree operations (insertion, deletion, searching) can be implemented here
};

int main() {
// Example usage of an AVL tree
AVLTree avlTree;
// AVL tree operations can be performed here
return 0;
}


Kernpunkte der Diskussion:

AVL-Baumeigenschaften: Besprechen Sie die Eigenschaften von AVL-Bäumen in C++, einschließlich Ausgleichsfaktor, Höhenausgleich und Selbstausgleichseigenschaft. Entdecken Sie, wie AVL-Bäume ihre ausgewogene Struktur während Einfüge- und Löschvorgängen aufrechterhalten, und befassen Sie sich mit Techniken zur Durchsetzung des Gleichgewichts.

AVL-Baumrotationen: Entdecken Sie Rotationsoperationen in AVL-Bäumen in C++, einschließlich Einzelrotationen (Linksrotation, Rechtsrotation) und Doppelrotationen (Links-Rechts-Rotation, Rechts-Links-Rotation). Besprechen Sie, wie diese Rotationen AVL-Bäume wieder ins Gleichgewicht bringen und ihre strukturelle Integrität sicherstellen.

AVL-Baumoperationen: In C++ gehören zu den allgemeinen AVL-Baumoperationen das Einfügen, Löschen und die Elementsuche. Besprechen Sie, wie diese Prozesse durchgeführt und im Hinblick auf Effizienz optimiert werden, und berücksichtigen Sie dabei Aspekte wie Baumbalance und Rotationsansätze.

AVL-Baumanwendungen: Besprechen Sie die praktische Verwendung von AVL-Baumdatenstrukturen in der C++-Programmierung. Entdecken Sie Anwendungsfälle wie sortierte Datenspeicherung, Datenbankindizierung und ausgewogene binäre Suche und erklären Sie, wie AVL-Bäume verwendet werden, um komplizierte Herausforderungen in verschiedenen Bereichen zu bewältigen, wie hier gezeigt (https://www.scaler.com/topics/course/cpp-data-structures/).

Danke
Ich hoffe, jemand wird helfen
Anzeige
AW: Erkunden der AVL-Baumdatenstruktur in C++
28.02.2024 23:53:37
Onur
Gehts noch?
Hier ist ein VBA-Forum UND was hat dein "Beitrag" mit dem Thema zu tun?
AW: Werte <= einem Wert werden nicht erkannt
28.02.2024 12:30:25
Frank
Okay, danke Jochen.
AW: Werte <= einem Wert werden nicht erkannt
28.02.2024 16:04:06
peter
Hallo

Deine 1 Werte sind leider einen Hauch größer als 1 und werden daher nicht erkannt.
Zum probieren:



Sub Test()
With Worksheets("1")
Debug.Print ("Zelle H5: " & .Range("H5").Value & " Zelle H5-1: " & .Range("H5").Value - 1)
' Ergebnis: Zelle H5: 1 Zelle H5-1: 0
Debug.Print ("Zelle BH8: " & .Range("BH8").Value & " Zelle BH8-1: " & .Range("BH8").Value - 1)
' Ergebnis Zelle BH8: 1 Zelle BH8-1: 1,77635683940025E-15
End With
End Sub



Peter
Anzeige
AW: Werte <= einem Wert werden nicht erkannt
28.02.2024 18:34:25
Frank
Guten Abend Peter,

deine Antwort hatte ich leider übersehen. Vielen herzlichen Dank dafür. Dann stellt sich mir die Frage, wieso sie die Zahl in Excel als 1 dargestellt wird. Selbst wenn auf wissenschaftlich und 20 Nachkommastellen anzeigen lasse für BH5, dann ist es eine 1. Und Zählenwenns erkennt 14 mal die Eins. Aber es ist erst einmal schön, dass das offensichtlich das Problem ist.
Seltsamerweise meinte Piet, dass bei ihm in VBA 14 Mal die Eins gezählt wird. Also müsste ich, um die selben Ergebnisse wie in Excel zu erhalten die zu untersuchenden Wert von der Obergrenze abziehen und dann auf 1 Stelle nach dem Komma runden. Und wenn dass dann Null ergibt, gehört der Wert noch zu Eins.
Dennoch finde ich es unlogisch, wenn Zählenwenns etwas anderes zählt, als ich mit meiner > = Abfrage.

Aber nochmals vielen lieben Dank, dass hat mir sehr weitergeholfen.
Viele Grüße
Frank
Anzeige
AW: Werte <= einem Wert werden nicht erkannt
28.02.2024 18:53:28
Piet
Nachtrag

zur Kontrolle bin ich mit der Find Methode durchs Blatt gegangen, mit der Option exakte Übereinstimmung.
Dort wo 1,00 steht sehe ich auch in der Bearbeitungsleiste nur eine 1 stehen, ohne Kommastellen dahinter.

mfg Piet
AW: Werte <= einem Wert werden nicht erkannt
28.02.2024 18:55:46
peter
Hallo Frank

Eine simple Änderung und Du kommst zu Deinem gewünschten Ergebnis



Global Arr() As Single


Definierst Du als Double kommt wieder die selbe fehlerhafter Berechnung

Peter

AW: Werte <= einem Wert werden nicht erkannt
28.02.2024 09:09:50
Frank
Guten Morgen Piet,

vielen Dank für deine Nachricht. Das habe ich auch gemacht. Trotzdem zählt VBA etwas anderes. Ich lade die Datei jetzt trotzdem mal hoch. Entweder bin ich blind oder wie, aber ich finde gerade nicht das Problem.

https://www.herber.de/bbs/user/167376.xlsm

Viele Grüße
Frank
Anzeige
AW: Werte <= einem Wert werden nicht erkannt
28.02.2024 09:17:17
Frank
Nachtrag: Ich habe mir jetzt mit einer bedingten Formatierung in der Matrix alle Werte anzeigen lassen, die genau 1 sind.
Wenn ich dort diese Zellen per Hand neu überschreibe und eine 1 eintrage, dann werden die Anzahl in VBA richtig ermittelt. Das Problem betrifft aber auch die anderen Zahlen. Sehr eigenartig.
AW: Werte <= einem Wert werden nicht erkannt
27.02.2024 21:24:37
Piet
Nachtrag - der Fehler wird nicht auftreten wenn du diesen Code änderst:
If FlatLevel_ges(i, j) = 1 Then SP01 = SP01 + 1
AW: Werte <= einem Wert werden nicht erkannt
28.02.2024 15:31:37
Piet
Hallo Frank

ich habe in deinen Code am Ende einen Summentest eingefügt. Der zeigt mir das offenbar alles stimmt.
Prüfe es bitte selbst noch mal im Direkfenster nach. Bei SP01 erhalte ich den Wert 14. Gesamtsumme 1117

mfg Piet



Debug.Print SP01 + SP12 + SP23 + SP34 + SP45 + SPg5

Debug.Print SP01
Debug.Print SP12
Debug.Print SP23
Debug.Print SP34
Debug.Print SP45
Debug.Print SPg5
Erase Arr
End sub
Anzeige
AW: Werte <= einem Wert werden nicht erkannt
28.02.2024 16:16:59
Frank
Hallo Piet,

den Test gebe ich bereits im Debug Fenster aus. Bei mir kommen auch 1117 raus. Aber die Einzelwerte stimmen nicht. Du hast an dem Code nichts weiter verändert?

Userbild

Ich finde das sehr merkwürdig.

Viele Grüße
Frank
AW: Werte <= einem Wert werden nicht erkannt
28.02.2024 16:51:52
peter
Hallo

Ich hab Dir bereits geschrieben, deine 1 ist leider rechnerisch einen Hauch größer.

Peter
AW: Werte <= einem Wert werden nicht erkannt
28.02.2024 18:49:01
Piet
Hallo Frank

nein, ich habe deinen Code nicht verändert. Und für den Kollegen, es gibt tatsächlich auch exakte 1,00 Werte.
Ich lade dir meine Testdatei hoch, ein altes Excel 2003 Format, weil ich keine neue Version auf dem Laptop habe.
Der Effekt ist sicher seltsam, ich weiss nicht ob es an meiner alten Version liegen kann??? Prüfe es bitte selbst.
https://www.herber.de/bbs/user/167399.xls

mfg Piet
Anzeige
AW: Werte <= einem Wert werden nicht erkannt
27.02.2024 19:51:28
Frank
Guten Abend Jochen,

das tut mir leid. Ich dachte es gibt dafür eine simple Erklärung. Ich werde eine Datei vorbereiten und hochladen.

Viele Grüße,
Frank

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige