Ergebnis 1 bis 5 von 5
  1. #1
    Registriert seit
    16.07.2018
    Beiträge
    22

    Excel VBA: Zelle in fixer Spalte selektieren

    Hallo zusammen

    In einer Zeile möchte ich immer die Zelle in einer fixen Spalte selektieren/aktivieren. Die Zeile kann ich z.B. mit Selection.Row bestimmen (wenn das überhaupt notwendig ist, wenn/weil die ActiveCell in dieser Zeile).
    Die Zielzelle, die selektiert werden soll, ist immer in Spalte B (z.B.). Wie selektiere ich Zelle Bxxx?
    Ich habe versucht mit intersect gemacht, aber keine Lösung. Offset geht nicht, weil von mehreren Zellen der Zeile zur Zelle Bxxx gesprungen werden soll.

    Danke und schöne Grüsse
    Fritz50

  2. #2
    Registriert seit
    16.07.2018
    Beiträge
    22

    Ranges

    Hallo nochmals
    Ich weiss zwar etwa was ein Range ist, aber der Umgang ist mir noch nicht so vertraut. Da ist z.B. die folgende Zeile:

    Set isect = Application.Intersect(Range("rg1"), Range("rg2"))

    Range kann man ja auf verschiedene Arten darstellen:

    (Set) Bereich = Range("O:AB")
    oder Range (Zelle1:Zelle2) ' so nach Prinzip oben links, unten rechts

    verschiedene Konstrukte geben mir Fehler;
    ActiveCell = Intersect("B:B", Selection.Row) ' Zelle im "Kreuzungspunkt
    ActiveCell = Intersect(Bereich, Selection.Row) ' wenn Set Bereich = Range("B:B")
    Intersect(Selection.B, Selection.Row)
    Intersect(Selection.B, Selection.Row).Select

    Was ich brauche:
    Range (fixe Spalte, Selection.Row) ' Resultat muss eine einzelne Zelle sein

    muss ich vielleicht für rg1 und rg2 zwei Objekte definieren?

    Danke und freundliche Grüsse
    Fritz50

  3. #3
    Registriert seit
    09.08.2007
    Beiträge
    230
    In einer Zeile möchte ich immer die Zelle in einer fixen Spalte selektieren/aktivieren. Die Zeile kann ich z.B. mit Selection.Row bestimmen (wenn das überhaupt notwendig ist, wenn/weil die ActiveCell in dieser Zeile).
    Hallo Fritz

    Wenn ich Dich richtig verstehe, dann so:

    Code:
    Cells(Selection.Row, 2).Activate
    ' oder
    Range("B" & Selection.Row).Activate
    ' statt mit Activate geht es auch mit Select
    Grüsse Niclaus

  4. #4
    Registriert seit
    09.08.2007
    Beiträge
    230

    Intersect

    Grüezi Fritz
    Ich habe Deine beiden Beiträge noch einmal angeschaut. Ich verstehe nicht, was Du konkret willst. Du hast u. a. "Intersect" erwähnt. Dazu folgendes:

    Da ist z.B. die folgende Zeile:
    Set isect = Application.Intersect(Range("rg1"), Range("rg2"))
    muss ich vielleicht für rg1 und rg2 zwei Objekte definieren?
    Hast Du die Zeile etwa gefunden unter
    https://docs.microsoft.com/de-ch/off...tion.Intersect ??

    Das finde ich kein gutes Beispiel. Mach lieber folgendes:

    Code:
    Set isect = Intersect(Range("A4:E4"), Range("C1:C6"))
    If isect Is Nothing Then
     MsgBox "Ranges do not intersect"
    Else
     isect.Select
     MsgBox isect.Address
    End If
    Du kannst auch Objekte definieren, aber nimm andere Namen, denn rg1 und rg2 sind Zellbezüge. Besser also z. B. "Bereich1" und "Bereich2".

    Diese zwei Bereich kannst Du im Menü Formeln mit "Namen definieren" und dann weiter arbeiten mit
    Set isect = Application.Intersect(Range("Bereich1"), Range("Bereich2"))

    Oder Du kannst sie im Makro selber definieren:

    Code:
    Dim Bereich1 As Range, Bereich2 As Range
    Set Bereich1 = Range("A4:E4")
    Set Bereich2 = Range("C1:C6")
    Set isect = Intersect(Bereich1, Bereich2)
    ' Achtung: Bereich1 und Bereich2 hier ohne Anfuehrungszeichen!
    If isect Is Nothing Then
     MsgBox "Ranges do not intersect"
    Else
     isect.Select
     MsgBox isect.Address
    End If
    Grüsse Niclaus

  5. #5
    Registriert seit
    16.07.2018
    Beiträge
    22

    Danke

    Vielen Dank Niclaus
    Der Tipp resp. die Lösung ist so einfach und bringt mir wieder etwas mehr Klarheit.
    Dann habe ich deine Anregungen einmal gelesen, aber noch nicht eingehend studiert.
    Mein Ziel ist ja, von einer Zelle aus eine andere Zelle zu suchen. Die Ausgangspunkte sind zwei Bereiche, eine Spalte Väter oder mehrere Spalten Kinder. Mit Intersect fand/finde ich heraus, von welchem Bereich ich ausgehe und daraus was ich suche (so ergibt sich auch, dass ich Vater nur rückwärts suchen muss oder vom Kind ausgehend seine eigene Zeile nur vorwärts suchen muss.
    Weil ich da die Bereiche mit Intersect bestimmte, dachte ich den "Kreuzungspunkt auch so zu finden (müsste m.E. möglich sein, wahrscheinlich sehr umständlich).

    Eine Zwischenbemerkung: Zwei ähnliche Abfragen sind vom Formular aus möglich.
    Ob ich längerfristig die Tabelle unsichtbar mache und nur noch mit Formularen arbeite, weiss ich noch nicht.
    Es gibt ja auch Abfragen mit dem Ziel einer gefilterten Tabelle (Ahnenlinie).

    Nun habe ich noch eine Anschlussfrage. Weil die Tabelle ja dynamisch ist, d.h. weitere Zeilen angehängt werden können, werden die Bereiche ja grösser. Kann ich das bei der Definition der Bereiche berücksichtigen?
    Bislang habe ich die Bereiche so definiert (nur Spalten):

    Set Bereich = Range("C:C")
    oder Set Bereich = Range("O:AB")
    ich habe nur ein Objekt? "Bereich", weil ich nie beide gleichzeitig anspreche.

    Vielleicht noch zum Suchen der Zelle vom "Kreuzungspunkt" aus. Das mache ich mit einer (Until)-Schleife und einer Befehlszeile "ActiveCell.Offset(+1/-1, 0).Selcet. Das sind i.A. 30-50 Durchgänge. Gibt es da edlere Ansätze?

    Soweit mein Dank und Ergänzungen

    mit besten Grüssen
    Fritz50

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •