Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zelle mithilfe von zwei Variablen suchen

Forumthread: Zelle mithilfe von zwei Variablen suchen

Zelle mithilfe von zwei Variablen suchen
zwei
Hallo Leute
Ich schreibe gerade eine Makro im Excel.
Diese Makro soll mir einen Wert aus einer Zelle (myCopy1) kopieren. Aber die Makro weiss noch nicht, wo myCopy1 ist.
Deshalb lasse ich die Zelle suchen. Aber der Wert in der Zelle ist dynamisch, ich kann also nicht nach der Zelle selbst suchen.
Deshalb suche ich nach Kriterien, die statisch sind. Das wäre zum einen die Beschriftung der Zeile und zum anderen die Beschriftung der Spalte.
In meiner Makro lasse ich also nach einem Wort suchen, das sich myReaTSev1 nennt. Ausserdem lasse ich nach einem Wert suchen, der sich myDateCell nennt.
Meine Makro findet beide Werte. Nun soll die Makro aber die Zelle myCopy1 finden, die genau der Schnittpunkt von Spalte und Zeile meiner vorher gefunden Zellen ist.
Okay ein Zahlenbeispiel:
myReaTSev1 steht in C5
myDateCell steht in F1
Dann muss meine Makro die Zelle myCopy1 kopieren, also die Zelle F5...
Wie geht das? Kann mir jemand helfen?
Ich muss das so machen, weil die Zelle myCopy1 nie am selben Ort ist und immer einen anderen Wert beinhaltet...
Danke für eure Hilfe!
Liebe Grüsse
Ximena
Option Explicit
Dim myDateCell
Dim myCopy1


		
Anzeige
AW: Zelle mithilfe von zwei Variablen suchen
26.04.2012 15:02:49
zwei
Hallo,
deine Variablen sollen anscheinend Range-Objekte sein. Die müssen mit Set belegt werden.
Dim myDateCell As Range
Dim myCopy1 As Range
Dim myReaTSev1  As Range
Set myDateCell = Workbooks(FNData).Worksheets(1).Cells.Find(myDate)
Set myReaTSev1 = Workbooks(FNData).Worksheets(1).Cells.Find("Reaction Time for Severity 1")
'meine momentane Lösung:
i = myDateCell.Column
j = myReaTSev1.Row
Set myCopy1 = Cells(j, i)

Gruß
Rudi
Anzeige
AW: Zelle mithilfe von zwei Variablen suchen
26.04.2012 15:09:27
zwei
Hallo Rudi
Danke für deine Antwort.
Ich habe jetzt die Variablen 'as Range' definiert. Aber dann kommt beim Find befehl folgender Error:
Run-time error '91':
Object variable or With block variable not set.
Das geht also irgendwie nicht...
Hast du auch noch eine andere Idee?
Und stimmt mein Ansatz?
Liebe Grüsse
Ximena
Anzeige
AW: Zelle mithilfe von zwei Variablen suchen
26.04.2012 15:37:51
zwei
Hallo,
dann wird was nicht gefunden.
Sub aaa()
Dim myDateCell As Range
Dim myCopy1 As Range
Dim myReaTSev1  As Range
Dim myDate As Date
myDate = Date
Set myDateCell = Worksheets(1).Cells.Find(myDate, lookat:=xlWhole, LookIn:=xlValues)
Set myReaTSev1 = Worksheets(1).Cells.Find("Reaction Time for Severity 1", lookat:=xlWhole,  _
LookIn:=xlValues)
If myDateCell Is Nothing Then
MsgBox "Datum nicht vorhanden"
Exit Sub
End If
If myReaTSev1 Is Nothing Then
MsgBox "'Reaction Time for Severity 1' nicht vorhanden"
Exit Sub
End If
Set myCopy1 = Intersect(myReaTSev1.EntireRow, myDateCell.EntireColumn)
MsgBox myCopy1.Address
End Sub

Gruß
Rudi
Anzeige
AW: Zelle mithilfe von zwei Variablen suchen
26.04.2012 15:58:54
zwei
Hallo Rudi
Also in der Zelle myDateCell steht kein Datum, sondern ein Wert. Z.B. steht da für März 2012 03-12. Das ist ja kein Datumformat...
Das Datum gibt es 100%ig, also die Möglichkeit, dass es nicht gefunden wird existiert gar nicht. Mein Problem ist nicht, dass ich nicht weiss, ob es existiert, sondern dass ich nicht weiss, WO es existiert!
Und ich möchte ja dann die Zelle myCopy1 kopieren und in einem anderen Sheet einfügen und nicht eine MsgBox ausgeben...
Liebe Grüsse
Ximena
Anzeige
AW: Zelle mithilfe von zwei Variablen suchen
26.04.2012 16:11:55
zwei
Hallo,
ich kann viel, aber nicht Hellsehen.
Dann musst du das eben an deine Bedingungen anpassen.
z.B.
Dim myDate As String
myDate ="03-12"
Gruß
Rudi
AW: Zelle mithilfe von zwei Variablen suchen
27.04.2012 08:15:50
zwei
Ich konnte es lösen! Vielen Dank für deine Hilfe :)
Liebe Grüsse
Ximena
;
Anzeige
Anzeige

Infobox / Tutorial

Zelle mithilfe von zwei Variablen suchen in Excel


Schritt-für-Schritt-Anleitung

Um eine Zelle in Excel mithilfe von zwei Variablen zu suchen, folge diesen Schritten:

  1. Definiere die Variablen: Stelle sicher, dass die Variablen als Range-Objekte definiert sind. Du kannst dies tun, indem du die Variablen wie folgt deklarierst:

    Dim myDateCell As Range
    Dim myCopy1 As Range
    Dim myReaTSev1 As Range
  2. Finde die Zellen: Verwende den Find-Befehl, um die Zellen zu finden, die du benötigst. Achte darauf, dass du das richtige Suchkriterium verwendest. Hier ein Beispiel:

    Set myDateCell = Worksheets(1).Cells.Find(myDate, lookat:=xlWhole, LookIn:=xlValues)
    Set myReaTSev1 = Worksheets(1).Cells.Find("Reaction Time for Severity 1", lookat:=xlWhole, LookIn:=xlValues)
  3. Überprüfe, ob die Zellen gefunden wurden: Achte darauf, dass du die gefundenen Zellen überprüfst, um Runtime-Fehler wie Error 91: Object variable or With block variable not set zu vermeiden:

    If myDateCell Is Nothing Then
        MsgBox "Datum nicht vorhanden"
        Exit Sub
    End If
    If myReaTSev1 Is Nothing Then
        MsgBox "'Reaction Time for Severity 1' nicht vorhanden"
        Exit Sub
    End If
  4. Finde die Schnittstelle der beiden Zellen: Verwende Intersect, um die Zelle zu bestimmen, die der Schnittpunkt der gefundenen Zellen ist:

    Set myCopy1 = Intersect(myReaTSev1.EntireRow, myDateCell.EntireColumn)
  5. Verwenden der gefundenen Zelle: Du kannst nun den Wert von myCopy1 kopieren oder weiterverarbeiten, je nach Bedarf.


Häufige Fehler und Lösungen

  • Error 91: Object variable or With block variable not set: Dieser Fehler tritt auf, wenn eine der Variablen nicht richtig gesetzt wurde. Stelle sicher, dass die Find-Methoden erfolgreich waren und überprüfe, ob die gesuchten Werte tatsächlich vorhanden sind.

  • Zelle wird nicht gefunden: Wenn du sicher bist, dass die Zelle existiert, überprüfe, ob das Suchkriterium korrekt ist. Achte darauf, dass das Datum im richtigen Format vorliegt (z.B. als String, wenn es nicht als Datum formatiert ist).


Alternative Methoden

Eine andere Möglichkeit, die Zelle zu finden, ist die Verwendung von VLOOKUP oder INDEX und MATCH. Diese Funktionen können in bestimmten Szenarien effektiver sein, insbesondere wenn du mit großen Datensätzen arbeitest.

Beispiel für INDEX und MATCH:

Dim rowNum As Long
Dim colNum As Long

rowNum = Application.Match("Reaction Time for Severity 1", Worksheets(1).Columns(1), 0)
colNum = Application.Match(myDate, Worksheets(1).Rows(1), 0)

Set myCopy1 = Worksheets(1).Cells(rowNum, colNum)

Praktische Beispiele

Angenommen, in deiner Tabelle steht unter A1 das Datum "03-12" und unter C5 "Reaction Time for Severity 1". Um den Wert an der Schnittstelle zu finden, kannst du folgendes Makro verwenden:

Sub FindValue()
    Dim myDateCell As Range
    Dim myCopy1 As Range
    Dim myReaTSev1 As Range
    Dim myDate As String

    myDate = "03-12"
    Set myDateCell = Worksheets(1).Cells.Find(myDate, lookat:=xlWhole, LookIn:=xlValues)
    Set myReaTSev1 = Worksheets(1).Cells.Find("Reaction Time for Severity 1", lookat:=xlWhole, LookIn:=xlValues)

    If myDateCell Is Nothing Or myReaTSev1 Is Nothing Then
        MsgBox "Einer der Werte wurde nicht gefunden."
        Exit Sub
    End If

    Set myCopy1 = Intersect(myReaTSev1.EntireRow, myDateCell.EntireColumn)
    MsgBox "Der Wert ist: " & myCopy1.Value
End Sub

Tipps für Profis

  • Variablen anzeigen: Nutze die Debug.Print-Anweisung, um die Werte deiner Variablen während der Laufzeit anzuzeigen. Dies hilft dir, den Status deiner Variablen zu überwachen.

    Debug.Print "myDateCell: " & myDateCell.Address
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung durch On Error Resume Next und On Error GoTo 0, um das Skript robust gegenüber unvorhergesehenen Fehlern zu machen.


FAQ: Häufige Fragen

1. Was mache ich, wenn die Find-Methode nichts zurückgibt?
Überprüfe dein Suchkriterium und stelle sicher, dass es im richtigen Format vorliegt. Achte auch auf die Groß- und Kleinschreibung.

2. Wie kann ich die gefundenen Variablen in ein anderes Blatt kopieren?
Verwende die Copy-Methode, um den Wert von myCopy1 in eine Zelle eines anderen Blattes zu kopieren:

myCopy1.Copy Destination:=Worksheets("Zielblatt").Range("A1")

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige