Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA dynamischen Tabellenbereich

VBA dynamischen Tabellenbereich
29.08.2014 14:00:45
Sioo
Hallo, möchte gerne ein Macro erstellen um einen dynamischen Bereich zu markieren und dann als Tabelle zu formatieren. Habe den Macro recorder benutzt und folgendes erhalten:
Sub fTabelle()
Sheets("M1").Activate
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Columns("A:A").Select
Selection.Delete Shift:=xlToLeft
Rows("2:2").Select
Selection.Delete Shift:=xlUp
Range("A1:D5224").Select
Range("B8").Activate
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$D$5224"), , xlYes).Name = _
"Tabelle3"
Range("Tabelle3[#All]").Select
End Sub
Der erste Teil ist richtig, die 3 Zeilen und die Spalte A:A müssen immer gelöscht werden (da die SAP Datei immer so formatiert ist).
Aber der Teil Range("A1:D5224").Select ist dynamisch. Manchmal sind da mehr Zeilen, manchmal weniger. Würde gerne den zweiten Part dynamisch gestalten. (Letzte Zeile und Spalte automatisch erkennen und dann als Tabelle formatieren)

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA dynamischen Tabellenbereich
29.08.2014 14:15:52
yummi
Hallo Sioo,
ungetestet

Sub fTabelle()
Sheets("M1").Activate
Rows("1:1").Delete Shift:=xlUp
Columns("A:A").Delete Shift:=xlToLeft
Rows("2:2").Delete Shift:=xlUp
letztezeile = Sheets("M1").UsedRange.SpecialCells(xlCellTypeLastCell).Row
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$D$" & letztezeile), , xlYes).Name = _
"Tabelle3"
Range("Tabelle3[#All]").Select
End Sub
Gruß
yummi

Anzeige
AW: VBA dynamischen Tabellenbereich
29.08.2014 14:26:14
Sioo
Hallo, danke für die schnelle Antwort. Das mit der letzten Zeile hat geklappt aber letzte Spalte nicht.
Habe eine Beispieldatei angehängt, wie es aus SAP kommt. https://www.herber.de/bbs/user/92387.xlsx

AW: VBA dynamischen Tabellenbereich
29.08.2014 14:40:56
yummi
hallo Sioo,
sry übersehen :-)
Du musst das "D" noch ersetzen, die letzte Spalte der zeile 4 holst du dir so
letztespalte = Sheets("M1").Cells(4, 256).End(xlToLeft).Column
dann im Range, wo das D steht letztespalte analog zu letztezeile einfügen
Gruß
yummi

Anzeige
AW: VBA dynamischen Tabellenbereich
29.08.2014 15:07:47
yummi
Hallo Sioo,
nimm folgenden Code, Du musst nur darauf achten, dass das Tabellenblatt hier M1 heisst

Option Explicit
Sub fTabelle()
Dim letztezeile As Long
Dim letzteSpalte As Integer
Sheets("M1").Activate
Rows("1:1").Delete Shift:=xlUp
Columns("A:A").Delete Shift:=xlToLeft
Rows("2:2").Delete Shift:=xlUp
letztezeile = Sheets("M1").UsedRange.SpecialCells(xlCellTypeLastCell).Row
letzteSpalte = Sheets("M1").Cells(4, 256).End(xlToLeft).Column
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$" & WandleZahlInBuchstaben( _
letzteSpalte) & "$" & letztezeile), , xlYes).Name = _
"Tabelle3"
Range("Tabelle3[#All]").Select
End Sub
Function WandleZahlInBuchstaben(ByVal iWert As Integer) As String
Dim Spaltenbuchstabe As String
Spaltenbuchstabe = Right(Columns(iWert).Address, _
Len(Columns(iWert).Address) - _
InStrRev(Columns(iWert).Address, "$"))
WandleZahlInBuchstaben = Spaltenbuchstabe
End Function
https://www.herber.de/bbs/user/92390.xlsm

Anzeige
AW: VBA dynamischen Tabellenbereich
29.08.2014 15:15:44
Sioo
Danke schön! Klappt bestens
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Dynamischen Tabellenbereich in Excel mit VBA erstellen


Schritt-für-Schritt-Anleitung

Um einen dynamischen Tabellenbereich in Excel mit VBA zu erstellen, folge diesen Schritten:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf "VBAProject (deine Datei)", wähle "Einfügen" und dann "Modul".
  3. Füge den folgenden Code ein:
Option Explicit

Sub fTabelle()
    Dim letztezeile As Long
    Dim letzteSpalte As Integer

    Sheets("M1").Activate
    Rows("1:1").Delete Shift:=xlUp
    Columns("A:A").Delete Shift:=xlToLeft
    Rows("2:2").Delete Shift:=xlUp

    letztezeile = Sheets("M1").UsedRange.SpecialCells(xlCellTypeLastCell).Row
    letzteSpalte = Sheets("M1").Cells(4, 256).End(xlToLeft).Column

    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$" & WandleZahlInBuchstaben(letzteSpalte) & "$" & letztezeile), , xlYes).Name = "Tabelle3"
    Range("Tabelle3[#All]").Select
End Sub

Function WandleZahlInBuchstaben(ByVal iWert As Integer) As String
    Dim Spaltenbuchstabe As String
    Spaltenbuchstabe = Right(Columns(iWert).Address, Len(Columns(iWert).Address) - InStrRev(Columns(iWert).Address, "$"))
    WandleZahlInBuchstaben = Spaltenbuchstabe
End Function
  1. Führe das Makro aus: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle fTabelle aus und klicke auf "Ausführen".

Dieser Code löscht die ersten zwei Zeilen und die erste Spalte und definiert dann den Bereich dynamisch basierend auf der letzten Zeile und Spalte deiner Daten.


Häufige Fehler und Lösungen

  • Problem: "Fehler beim Ausführen des Makros"

    • Lösung: Stelle sicher, dass das Arbeitsblatt den Namen "M1" hat. Wenn nicht, passe den Code entsprechend an.
  • Problem: Die Tabelle wird nicht korrekt formatiert

    • Lösung: Überprüfe, ob die Daten in den Zellen korrekt eingegeben sind. Manchmal kann ein leerer Bereich oder unsichtbare Zeichen Probleme verursachen.

Alternative Methoden

Wenn du eine dynamische Tabelle erstellen möchtest, ohne VBA zu verwenden, kannst du auch die Funktion "Tabelle" in Excel nutzen:

  1. Markiere deinen Datenbereich.
  2. Gehe zu "Einfügen" und klicke auf "Tabelle".
  3. Aktiviere die Option "Meine Tabelle hat Überschriften".
  4. Deine Tabelle wird nun automatisch aktualisiert, wenn du Daten hinzufügst oder entfernst.

Praktische Beispiele

Hier ist ein Beispiel, wie du den oben beschriebenen Code anpassen kannst, um einen Bereich in einer anderen Tabelle zu definieren:

Sub fTabelleAndererBlatt()
    Dim letztezeile As Long
    Dim letzteSpalte As Integer

    Sheets("Datenblatt").Activate
    ' Rest des Codes bleibt gleich...
End Sub

Du kannst diesen Code verwenden, um eine VBA Excel Tabelle aus einem anderen Arbeitsblatt zu erstellen.


Tipps für Profis

  • Verwende Option Explicit am Anfang jedes Moduls, um sicherzustellen, dass alle Variablen deklariert werden.
  • Teste deinen Code in einer Kopie deiner Excel-Datei, bevor du ihn auf die Originaldaten anwendest.
  • Nutze die F11-Taste im VBA-Editor, um die Ausführung des Codes Zeile für Zeile zu verfolgen.

FAQ: Häufige Fragen

1. Wie kann ich den Bereich dynamisch definieren? Du kannst die UsedRange-Eigenschaft verwenden, um die letzte Zeile und Spalte deiner Daten zu ermitteln.

2. Was ist der Unterschied zwischen einer normalen und einer dynamischen Tabelle? Eine normale Tabelle hat festgelegte Zeilen und Spalten, während eine dynamische Tabelle sich automatisch anpasst, wenn du neue Daten hinzufügst oder bestehende Daten entfernst.

3. Kann ich den Code in anderen Excel-Versionen verwenden? Ja, der bereitgestellte Code funktioniert in den meisten modernen Excel-Versionen, die VBA unterstützen, einschließlich Excel 2010, 2013, 2016 und 2019.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige