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

Forumthread: Cells mit Variablen geht nicht

Cells mit Variablen geht nicht
04.01.2020 22:56:53
Christian
Hallo ich bin Anfänger bei vba und habe folgendes Problem.
Ich möchte aus einem Zellbereich, welchen ich vorab über ein Objektvariable "RgBeispiel" definiert habe, mit Hilfe der Eigenschaft "Cells()" einen Wert auslesen.
Als Argument für "Zeile" und "Spalte" in der Eigenschaft "Cells (Zeile, Spalte)" setze ich keine Zahlen ein, sondern Variablen "l" und "k".
Den Variablen "l" und "k" wird vorab der Wert der Indizes für "Zeile" und "Spalte" über die Funktion "Match" zugewiesen.
Anbei Ausschnitte aus dem Code mit Kommentaren:
Dim k As Integer, l As Integer, m As Integer
Dim strSBeispiel As String, strZBeispiel As String
Dim RgSpalteBeispiel As Range, RgZeileBeispiel As Range, RgBeispiel As Range
Set RgBeispiel = ThisWorkbook.Worksheets("Beispiel").Range("B1:DL11")
Set RgSpalteBeispiel = ThisWorkbook.Worksheets("Beispiel").Range("B1:B11")
Set RgZeileBeispiel = ThisWorkbook.Worksheets("Beispiel").Range("B1:DL1")
k = Application.WorksheetFunction.Match(strSBeispiel, RgSpalteBeispiel, 0)
l = Application.WorksheetFunction.Match(strZBeispiel, RgZeileBeispiel, 0)
'Welcher Datentyp ist k und l? Ergebnis: beide sind Integer!!!
'Welchen Wert haben k und l durch Match erhalten? Ergebnis: l=3 und k=35.
Range("A11") = TypeName(k)
Range("B11") = k
Range("A12") = TypeName(l)
Range("B12") = l
'Zuweisen des Zellenwert (3, 35) in Bereich "RgBeispiel".
'Ergebnis bei Code "m = RgBeispiel.Cells(l, k)" = 0 (Null; ist immer Null auch bei anderen l und k über Match).
'Ergebnis bei Code "m = RgBeispiel.Cells(3, 35)" = 63
m = RgBeispiel.Cells(l, k)
'Zusatzinfo:
'Bei folgenden Code wird ebenfalls der richtige Wert (63) zurückgegeben.
'l=3
'k=35
'm = RgBeispiel.Cells(l, k)
Danke für die Hilfe im Voraus.
Christian
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Cells mit Variablen geht nicht
04.01.2020 23:39:15
GerdL
Hallo Christian,
musst du die Variablen l und k tauschen oder wo soll jetzt das Problem sein?
Gruß Gerd
AW: Cells mit Variablen geht nicht
05.01.2020 10:13:25
Christian
Hallo GerdL,
das Problem liegt darin, dass der Befehl "m = RgBeispiel.Cells(l, k)" mit den Variablen k und l nicht funktioniert.
Anmerkung:
Der Befehl funktioniert nicht, wenn k und l über "Match" Werte zugewiesen werden.
Werden k und l über z.B. "k=35" Werte zugewiesen funktioniert der Befehl "m = RgBeispiel.Cells(l, k)".
Gruß
Christian
Anzeige
AW: Cells mit Variablen geht nicht
05.01.2020 11:09:33
Christian
Hallo Gerd,
jetzt sehe ich es auch.
Falsche bzw. irreführende Nomenklatur und dementsprechend habe ich Spalte und Zeile vertauscht.
"RgSpalteBeispiel" ist der Bereich zum Auffinden des Index der Zeile und sollte besser "RgZeileBeispiel" heißen (und umgekehrt).
War wohl schon zu spät für klares Denken.
Problem gelöst.
Danke
Gruß
Christian
Anzeige
AW: Cells mit Variablen geht nicht
05.01.2020 11:21:50
GerdL
Hallo Christian,
suchst du von B1 nach rechts die Spalte, bekommt B die Spaltennummer eins beim Match!
Ist der Suchbegriff ein String, kannst du nur nach Texten suchen.
Sub test()
Dim S As Integer, Z As Integer, m As Integer
Dim strSBeispiel As String, strZBeispiel As String
Dim RgSpalteBeispiel As Range, RgZeileBeispiel As Range, RgBeispiel As Range
Cells(3, 36) = 64
Range("B3") = "Zeile"
Range("AJ1") = "Spalte"
strSBeispiel = "Spalte"
strZBeispiel = "Zeile"
Set RgBeispiel = Range("B1:DL11")
Set RgSpalteBeispiel = Range("B1:B11")
Set RgZeileBeispiel = Range("B1:DL1")
S = Application.WorksheetFunction.Match(strSBeispiel, RgZeileBeispiel, 0)
Z = Application.WorksheetFunction.Match(strZBeispiel, RgSpalteBeispiel, 0)
MsgBox RgBeispiel.Cells(Z, S).Address
MsgBox Cells(Z, S).Address
MsgBox RgBeispiel.Cells(Z, S).Value
End Sub

Gruß Gerd
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Cells mit Variablen in Excel VBA richtig nutzen


Schritt-für-Schritt-Anleitung

  1. Variablen deklarieren: Du musst zunächst die Variablen für Zeile und Spalte deklarieren. Dies geschieht mit:

    Dim k As Integer, l As Integer
  2. Zellbereich definieren: Lege den Zellbereich fest, aus dem Du Werte auslesen möchtest:

    Dim RgBeispiel As Range
    Set RgBeispiel = ThisWorkbook.Worksheets("Beispiel").Range("B1:DL11")
  3. Werte zuweisen: Verwende die Match-Funktion, um die Indizes für Zeile und Spalte zu bestimmen:

    k = Application.WorksheetFunction.Match(strSBeispiel, RgSpalteBeispiel, 0)
    l = Application.WorksheetFunction.Match(strZBeispiel, RgZeileBeispiel, 0)
  4. Zellenwert abrufen: Um den Zellenwert zu erhalten, nutze die Cells-Eigenschaft:

    Dim m As Integer
    m = RgBeispiel.Cells(l, k)
  5. Ergebnis überprüfen: Stelle sicher, dass die Variablen l und k die richtigen Werte haben, bevor Du den Wert aus dem Zellbereich abrufst.


Häufige Fehler und Lösungen

  • Vertauschte Indizes: Oftmals kommt es vor, dass Du die Zeile und die Spalte vertauschst. Das führt dazu, dass der Cells-Befehl nicht den erwarteten Wert zurückgibt. Überprüfe, ob Du die richtigen Variablen für Zeile und Spalte verwendest.

  • Falsche Zellreferenzen: Stelle sicher, dass der Zellbereich, den Du in Set RgBeispiel angibst, auch tatsächlich die Zellen enthält, die Du anzusprechen versuchst.

  • Datentypen: Überprüfe, ob k und l tatsächlich Integer sind. Manchmal kann es zu unerwarteten Datentypen kommen, besonders wenn andere Funktionen im Spiel sind.


Alternative Methoden

  • Direkte Zellreferenz: Anstatt Match zu verwenden, kannst Du auch direkt Werte zuweisen:

    k = 35
    l = 3
  • Verwendung von Arrays: Du könntest die Werte auch in ein Array laden, um sie später leichter zu bearbeiten.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie Du den Wert einer Zelle mit einer Variablen abrufen kannst:

Sub Beispiel()
    Dim k As Integer, l As Integer
    Dim m As Variant
    Dim RgBeispiel As Range
    Set RgBeispiel = ThisWorkbook.Worksheets("Beispiel").Range("B1:DL11")

    k = 2 ' Beispielwert für Spalte
    l = 3 ' Beispielwert für Zeile
    m = RgBeispiel.Cells(l, k).Value ' Zellenwert abrufen
    MsgBox m ' Wert anzeigen
End Sub

Tipps für Profis

  • Debugging: Nutze die Debugging-Tools in VBA, um die Werte von k und l während der Ausführung zu überprüfen. Das kann helfen, Probleme frühzeitig zu erkennen.

  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um sicherzustellen, dass Dein Code robust ist und auch bei unerwarteten Eingaben nicht abstürzt.

  • Verwendung von Option Explicit: Füge Option Explicit am Anfang Deines Moduls hinzu, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Tippfehler und logische Fehler zu vermeiden.


FAQ: Häufige Fragen

1. Warum funktioniert RgBeispiel.Cells(l, k) nicht?
Das kann daran liegen, dass die Variablen l und k nicht die erwarteten Werte haben. Überprüfe, ob die Match-Funktion die richtigen Indizes zurückgibt.

2. Was ist der Unterschied zwischen Cells und Range?
Cells wird verwendet, um auf eine bestimmte Zelle basierend auf Zeilen- und Spaltennummern zuzugreifen, während Range auf einen bestimmten Zellbereich verweist.

3. Wie kann ich den Wert einer Zelle setzen?
Du kannst den Wert einer Zelle mit der Value-Eigenschaft setzen, z.B. RgBeispiel.Cells(l, k).Value = 100.

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