none
Excel: Adresse des Schnittpunktes berechnen RRS feed

  • Frage

  • Hallo, ich möchte den Schnittpunkt berechnen. Habe nur die Anfangskoordinaten (=AK) zB. Zeile: A11 und Endkoordinaten (=EK) Spalte: L2. Im Schnittpunkt dieser Koordinaten steht die Zelle L11.

    Wie kann ich mit VBA eine Sub schreiben die mir, nur aufgrund der Angaben der Punkte A11 und L2, den Cursor auf die Zelle L11 setzt? 

    Dies ist nur ein Besipiel. Die Sub sollte so programmiert sein, dass ich nur die AK und die EK eingeben muss, damit der Cursor immer auf die daraus resultierende Zelle springt.

    Bitte um einen Tipp. Danke.

    Grüße

    Peter

    Montag, 9. August 2010 13:00

Antworten



  • Sub Test()
       GeheZumSchnittpunkt [A11], [L2]
    End Sub
     
    Sub GeheZumSchnittpunkt(AK As Range, EK As Range)
       Cells(AK.Row, EK.Column).Select
    End Sub

    Peter

    • Als Antwort vorgeschlagen Robert BreitenhoferModerator Montag, 9. August 2010 14:33
    • Als Antwort markiert PeterMP Montag, 9. August 2010 17:19
    • Tag als Antwort aufgehoben PeterMP Montag, 9. August 2010 18:38
    • Als Antwort markiert PeterMP Dienstag, 10. August 2010 07:50
    Montag, 9. August 2010 14:25
  • Hallo Peter,

    bitte nochmals um Hilfe.

    Das habe ich daraus gemacht. Jedoch die Adressen werden nicht an die Sub GeheZumSchnittpunkt übergeben.

    Sub Test()

        myColumn = Cells.Find(Date).Address(False, False)
        myRow = Cells.Find("Iris").Address(False, False)

       GeheZumSchnittpunkt [myColumn], [myRow]
    End Sub


    Private Sub GeheZumSchnittpunkt(AK As Range, EK As Range)
       Cells(AK.Row, EK.Column).Select
    End Sub

    Grüße

    Peter

    • Als Antwort markiert PeterMP Dienstag, 10. August 2010 07:50
    Montag, 9. August 2010 18:40

  • In den eckigen Klammern dürfen nur konstante Strings stehen. Variablen werden nicht ausgewertet. Du müsstest die Adressen mit Range(...) auswerten und damit zurück in Range-Ausdrücke verwandeln, wie sie die Funktion GeheZumSchnittpunkt erwartet. Etwa so:

        GeheZumSchnittpunkt Range(myColumn), Range(myRow)

    Das ist aber erstens eine doppelte Konvertierung (Range -> Adresse -> Range) und zweitens nicht ungefährlich. Wenn z.B. "Iris" mal nicht gefunden wird, liefert schon die .Address-Methode einen Laufzeit-Fehler. Besser Du arbeitest gleich mit den Range-Objekten die .Find liefert und prüfst diese auf Nothing um sicher zu stellen, dass überhaupt etwas gefunden wurde. Etwa so:

    Sub Test2()
        Dim myColumn As Range
        Dim myRow    As Range

        Set myColumn = Cells.Find(Date)
        Set myRow    = Cells.Find("Iris")

        If Not myColumn Is Nothing And Not myRow Is Nothing Then
            GeheZumSchnittpunkt myColumn, myRow
        End If
    End Sub

    Peter

    • Als Antwort markiert PeterMP Dienstag, 10. August 2010 07:50
    Montag, 9. August 2010 19:57

Alle Antworten



  • Sub Test()
       GeheZumSchnittpunkt [A11], [L2]
    End Sub
     
    Sub GeheZumSchnittpunkt(AK As Range, EK As Range)
       Cells(AK.Row, EK.Column).Select
    End Sub

    Peter

    • Als Antwort vorgeschlagen Robert BreitenhoferModerator Montag, 9. August 2010 14:33
    • Als Antwort markiert PeterMP Montag, 9. August 2010 17:19
    • Tag als Antwort aufgehoben PeterMP Montag, 9. August 2010 18:38
    • Als Antwort markiert PeterMP Dienstag, 10. August 2010 07:50
    Montag, 9. August 2010 14:25
  • Danke.
    Montag, 9. August 2010 17:19
  • Hallo Peter,

    bitte nochmals um Hilfe.

    Das habe ich daraus gemacht. Jedoch die Adressen werden nicht an die Sub GeheZumSchnittpunkt übergeben.

    Sub Test()

        myColumn = Cells.Find(Date).Address(False, False)
        myRow = Cells.Find("Iris").Address(False, False)

       GeheZumSchnittpunkt [myColumn], [myRow]
    End Sub


    Private Sub GeheZumSchnittpunkt(AK As Range, EK As Range)
       Cells(AK.Row, EK.Column).Select
    End Sub

    Grüße

    Peter

    • Als Antwort markiert PeterMP Dienstag, 10. August 2010 07:50
    Montag, 9. August 2010 18:40

  • In den eckigen Klammern dürfen nur konstante Strings stehen. Variablen werden nicht ausgewertet. Du müsstest die Adressen mit Range(...) auswerten und damit zurück in Range-Ausdrücke verwandeln, wie sie die Funktion GeheZumSchnittpunkt erwartet. Etwa so:

        GeheZumSchnittpunkt Range(myColumn), Range(myRow)

    Das ist aber erstens eine doppelte Konvertierung (Range -> Adresse -> Range) und zweitens nicht ungefährlich. Wenn z.B. "Iris" mal nicht gefunden wird, liefert schon die .Address-Methode einen Laufzeit-Fehler. Besser Du arbeitest gleich mit den Range-Objekten die .Find liefert und prüfst diese auf Nothing um sicher zu stellen, dass überhaupt etwas gefunden wurde. Etwa so:

    Sub Test2()
        Dim myColumn As Range
        Dim myRow    As Range

        Set myColumn = Cells.Find(Date)
        Set myRow    = Cells.Find("Iris")

        If Not myColumn Is Nothing And Not myRow Is Nothing Then
            GeheZumSchnittpunkt myColumn, myRow
        End If
    End Sub

    Peter

    • Als Antwort markiert PeterMP Dienstag, 10. August 2010 07:50
    Montag, 9. August 2010 19:57
  • Also jetzt läuft es. Vielen Dank für die Hilfe.

    Grüße

    Peter

    Dienstag, 10. August 2010 07:50