Intersect!

.. das wohl mächtigste Werkzeug in Bill Gates' Büro-Sippe. Ob reine Formeln, PowerQuery oder VBA. Hier bleiben kaum Wünsche unerfüllt.
TheTroother
Beiträge: 10
Registriert: 10. Okt 2022, 21:17
Kontaktdaten:

Intersect!

#1

Beitrag von TheTroother »

Guten Tag!

In diversen Bereichen von "learnmicrosoft" habe ich zu Intersect nachgelesen.
Ich habe diesen Befehl noch nie verwendet. Ich kann mich auchnicht erinnern diesen benötigt zu haben.
Wann verwendet man Intersect und was tut das überhaupt?

Freue mich auf einfache und verstädnlcihe Erklärung, wenn das jemand machen möchte
#danke!
theTroother
xlKing
Beiträge: 52
Registriert: 30. Mai 2024, 19:42
Hat sich bedankt: 5 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

Re: Intersect!

#2

Beitrag von xlKing »

Moin,

also die Meisten (auch ich) verwenden Intersect fast ausschließlich im Change- oder SelectionChange-Ereignis. Also in Ereignissen die ein Target mitbringen. Hier kann man einfach prüfen ob das Target innerhalb eines gewünschten Bereichs liegt.

Code: Alles auswählen

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not Intersect(Target, Range("B:B")) Is Nothing Then
    Application.StatusBar = "Die Spalte B wurde angewählt"
  Else
    Application.StatusBar = False
  End If
End Sub
Intersect gibt einfach die sich überschneidenden Zellen zwischen zwei Bereichen zurück.

https://learn.microsoft.com/de-de/offic ... .intersect

Gruß Mr. K.
Folgende Benutzer bedankten sich beim Autor xlKing für den Beitrag:
d'r Bastler
TheTroother
Beiträge: 10
Registriert: 10. Okt 2022, 21:17
Kontaktdaten:

Re: Intersect!

#3

Beitrag von TheTroother »

Hallo!

Ich habe unter anderem diesen Code gefunden.

Code: Alles auswählen

Private Sub Worksheet_Change(ByVal target As Range)
If Intersect(target, Range("E4:E20")) Is Nothing Then Exit Sub
Application.EnableEvents = False
loletzte = Cells(Rows.Count, 2).End(xlUp).Row
Range("B3:E" & loletzte).Sort Key1:=Range("C3"), Order1:=xlDescending
Application.EnableEvents = True
End Sub
Dabei geht es um das Sortieren, wenn sich in Spalte E etwas ändert.
Warum wird hier Intersect verwendet? Ich möchte es verstehen?
Vielleicht wenn sich E10 ändert, E10 ein Teil des Bereiches E4:E20 ist? Bildet sich der Schnittpunkte auch in einer einzigen Spalte also mit den Koordinaten Zeile/Spalte?

Vielleicht möchte mich jemand aufklären.
#Danke!
theTroother
xlKing
Beiträge: 52
Registriert: 30. Mai 2024, 19:42
Hat sich bedankt: 5 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

Re: Intersect!

#4

Beitrag von xlKing »

Hallo Throoter,

Ja, das ist das Gleiche in grün, nur umgekehrt. Die Zeile If Intersect(Target, Range("E4:E20")) Is Nothing Then Exit Sub sagt aus, dass, wenn Target nicht im Range("E4:E20") liegt (Is Nothing), die Sub beendet wird. wenn du also in E10 etwas neues einträgst wird die Zelle E10 an das Target übergeben. E10 liegt somit im Bereich. Die Sub läuft also weiter. In meinem obigen Beispiel habe ich das Ganze mit Not umgedreht. Also wenn Nicht Is Nothing dann liegt E10 im Bereich und die If-Prüfung ergibt True.

In beiden Beispielen wird als Schnittpunkt durch Intersect nur eine Zelle zurückgegeben. Du kannst aber natürlich zwei oder mehr Beliebige Ranges miteinander vergleichen. z.B. gibt Intersect(Range("C10:J20"),Range("F5:G25")) den Range("F10:G20") als Schnittmenge zurück. Wenn es eine Schnittmenge gibt ist das Ergebnis immer ein Range, dessen Zellen du weiterverarbeiten kannst. Gibt es keine Schnittmenge wird Nothing zurückgegeben, so wie immer wenn ein Objekt nicht existiert. Nothing ist bei Objekten der Standard-Nullwert.

Gruß Mr. K.
TheTroother
Beiträge: 10
Registriert: 10. Okt 2022, 21:17
Kontaktdaten:

Re: Intersect!

#5

Beitrag von TheTroother »

Hi!

Danke,


Das bedeutet ich bekomme mit Intersect() ein Objekt zurück (wegen Nothing), kein Range (das ist dann wohl Variant)? Oder vermische ich da alles?
Denn Range ist doch eine Methode vom Auflistungs"objekt" Worksheet?

Es ist nicht dringend, freue mich dennoch auf eine Antwort!

#bitte, #danke!
theTroother
echt toll hier. Hier wird Zeit genommen und verdammt gut erklärt. SXuper :D
xlKing
Beiträge: 52
Registriert: 30. Mai 2024, 19:42
Hat sich bedankt: 5 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

Re: Intersect!

#6

Beitrag von xlKing »

Hi Nochmal,

Range ist in erster Linie ein Typ. du kannst eine Variable als Range-Objekt deklarieren indem du z.B. Dim rng As Range schreibst. Dieser Variablen kannst du dann eine Zelle zuweisen. Wie bei Objektvariablen üblich musst du dafür das Wörtchen Set verwenden. Also Set rng = Range("A1:B2")

Es gibt aber natürlich auch Methoden und Eigenschaften von anderen Objekten, die den Namen Range haben. In diesem Fall gibt diese Eigenschaft oder Methode ein entsprechendes Range-Objekt zurück.

Code: Alles auswählen

MsgBox ActiveSheet.ListObjects(1).Range.Address
In diesem Beispiel hat das Worksheet-Objekt "ActiveSheet" eine Eigenschaft Listobjects, die das erste (1) Listobject zurückgibt. Dieses wiederum hat eine Eigenschaft Range, die ein Range-Objekt zurückgibt. Und das hat schließlich die Eigenschaft Address, die letztendlich ausgegeben wird. Das Range-Objekt ist in diesem Fall eine bestimmte Anzahl an Zellen, in denen die intelligente Tabelle abgelegt ist.

Beim Worksheet-Objekt kannst du in der Range-Eigenschaft eine Adresse hinterlegen, die dann das entsprechende Zellenobjekt oder eben mehrere Zellen zurückgibt.

Mit Intersect bekommst du immer ein Range-Objekt, dieses kann aber den Wert Nothing haben. Das bedeutet, dass keine Zelle passt. Du kannst damit dann also nicht weiterarbeiten um z.B. Eigenschaften wie die Adresse aufzurufen.

Gruß Mr. K.
TheTroother
Beiträge: 10
Registriert: 10. Okt 2022, 21:17
Kontaktdaten:

Re: Intersect!

#7

Beitrag von TheTroother »

DANKE!!!!!!
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste