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

Tabelle - bestimmte Zeile in def. Spalte

Forumthread: Tabelle - bestimmte Zeile in def. Spalte

Tabelle - bestimmte Zeile in def. Spalte
07.04.2021 18:24:11
Felix
Liebes Excelforum,
ich habe meine Kontakte in einer Tabelle organisiert. Die Tabelle wächst teilweise auch in die Breite, da ich Spalten ergänze. Nun möchte ich definierte Werte in eine Userform einlesen.
Ich habe die Tabelle als Listobject definiert:
Dim loKontakte As ListObject
Dim strTableName As String
strTableName = ActiveCell.ListObject.Name
Set loKontakte = ActiveSheet.ListObjects(strTableName)
Nun kann zum Beispiel den ersten Wert in der zweiten Spalte auslesen mit
loKontakte.DataBodyRange(1,2)
Ich würde die Spalte aber lieber über den Spaltennamen und nicht wie hier mit "2" ansprechen, damit ich nach dem Einfügen von Spalten nicht immer die Spaltennummer verbessern muss. Ich hatte mir in einem anderen Code mal damit geholfen, dass ich die Spaltennamen in Excel mit Namen versehen hatte und dann am Anfang immer die Position der Namen ausgelesen hatte. Aber das müsste doch eigentlich eleganter gehen?
Eine Variante könnte es sein, unterschiedliche ListObjects zu definieren, die jeweils nur eine Spalte der Tabelle sind, nehme ich an. Aber auch das scheint mir ein wenig umständlich. Habt Ihr bessere Ideen? Vielen Dank im Voraus
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabelle - bestimmte Zeile in def. Spalte
07.04.2021 18:29:18
Nepumuk
Hallo,
versuch es mal so:
loKontakte.DataBodyRange.Cells(1, "B").Value

Gruß
Nepumuk
AW: Tabelle - bestimmte Zeile in def. Spalte
07.04.2021 18:48:48
Felix
Weder
loKontakte.DataBodyRange.Cells(1, "B").Value
noch
loKontakte.DataBodyRange(1, "B")
noch
loKontakte.DataBodyRange.Cells(1, ["B"]).Value
funktioniert.
Anzeige
AW: Tabelle - bestimmte Zeile in def. Spalte
07.04.2021 20:36:36
Felix
diese ziemlich hilfreiche Seite habe ich auch schon gelesen, aber nicht die Antowrt gefunden
Anzeige
AW: Tabelle - bestimmte Zeile in def. Spalte
07.04.2021 20:30:02
Felix
Weder
loKontakte.DataBodyRange.Cells(1, "B").Value
noch
loKontakte.DataBodyRange(1, "B")
noch
loKontakte.DataBodyRange.Cells(1, ["B"]).Value
funktioniert.
AW: Tabelle - bestimmte Zeile in def. Spalte
07.04.2021 20:38:40
Felix
Ich glaube ich mache es dann doch indirekt über die definition von Spaltenpositionsvariablen:
'Finden der Spalte "Name"
varName = Application.Match("Name", loKontakte.HeaderRowRange, 0)
Es sei denn, es kennt einer einen direkteren Wer
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Werte aus einer bestimmten Zeile in einer definierten Spalte auslesen


Schritt-für-Schritt-Anleitung

  1. Definiere deine Tabelle als ListObject:

    Dim loKontakte As ListObject
    Dim strTableName As String
    strTableName = ActiveCell.ListObject.Name
    Set loKontakte = ActiveSheet.ListObjects(strTableName)
  2. Verwende den Spaltennamen, um auf die Daten zuzugreifen: Um einen bestimmten Wert aus einer definierten Spalte zu lesen, kannst du den Spaltennamen direkt ansprechen. Das funktioniert so:

    Dim wert As Variant
    wert = loKontakte.ListColumns("Spaltenname").DataBodyRange.Cells(1, 1).Value
  3. Zugriff auf die Zeile und Spalte: Wenn du den Wert in der ersten Zeile der definierten Spalte auslesen möchtest, verwende DataBodyRange:

    Dim wert As Variant
    wert = loKontakte.DataBodyRange.Cells(1, Application.Match("Spaltenname", loKontakte.HeaderRowRange, 0)).Value

Häufige Fehler und Lösungen

  • Fehler: loKontakte.DataBodyRange.Cells(1, "B").Value funktioniert nicht
    Lösung: Vergewissere dich, dass "B" tatsächlich der Name der Spalte ist. Nutze die Match-Funktion, um die Position der Spalte zu finden.

  • Fehler: Zugriff auf nicht existierende Spalte
    Lösung: Stelle sicher, dass die Spalte existiert und korrekt benannt ist. Überprüfe das HeaderRowRange.


Alternative Methoden

Eine weitere Methode, um auf einen Wert in einer bestimmten Zeile und Spalte zuzugreifen, ist die Nutzung von vba listcolumns. Du kannst die Spalte auch über ihre Position referenzieren:

Dim wert As Variant
wert = loKontakte.ListColumns(2).DataBodyRange.Cells(1, 1).Value

Praktische Beispiele

Angenommen, du möchtest den Wert aus der ersten Zeile der Spalte "Name" auslesen:

Dim loKontakte As ListObject
Set loKontakte = ActiveSheet.ListObjects("DeineTabelle")

Dim wertName As Variant
wertName = loKontakte.DataBodyRange.Cells(1, Application.Match("Name", loKontakte.HeaderRowRange, 0)).Value

In diesem Beispiel wird die Match-Funktion verwendet, um die Spaltenposition dynamisch zu bestimmen und somit die Stabilität des Codes zu erhöhen, auch wenn neue Spalten hinzugefügt werden.


Tipps für Profis

  • Verwende Option Explicit: Dies hilft dir, alle Variablen zu deklarieren und Fehler zu vermeiden.
  • Fehlerbehandlung einfügen: Nutze On Error Resume Next, um unerwartete Fehler zu vermeiden, und prüfe anschließend, ob der Wert erfolgreich zugewiesen wurde.
  • Makros optimieren: Wenn du häufig auf die DataBodyRange zugreifst, speichere den Bereich in einer Variablen, um die Performance zu verbessern.

FAQ: Häufige Fragen

1. Wie spreche ich eine Spalte per Namen in VBA an?
Verwende die ListColumns-Eigenschaft, um die Spalte über ihren Namen anzusprechen, z.B. loKontakte.ListColumns("Spaltenname").

2. Was ist der Unterschied zwischen DataBodyRange und HeaderRowRange?
DataBodyRange bezieht sich auf den Bereich der Tabelle, der die tatsächlichen Daten enthält, während HeaderRowRange die Kopfzeile darstellt, die die Spaltennamen enthält.

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