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:
-
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
-
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)
-
Ü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
-
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)
-
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")