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

Forumthread: VBA alle Zellen mit Inhalt als Tabelle formatieren

VBA alle Zellen mit Inhalt als Tabelle formatieren
25.08.2014 10:36:27
Sioo
Hallo, bastel gerade an nem Macro um einen Datenbereich als Tabelle zu formatieren. Die Daten kommen aus SAP und dort sind oft einige Zeilen, Spalten leer.
Sub A_SelectAllMakeTable()
Dim tbl As ListObject
Dim rng As Range
Set rng = Range(Range("A1"), Range("A1").SpecialCells(xlLastCell))
Set tbl = ActiveSheet.ListObjects.Add(xlSrcRange, rng, , xlYes)
tbl.TableStyle = "TableStyleMedium15"
End Sub
Wenn ich dies benutze, formatiert er den ganzen Bereich als Macro wo Daten auftauchen, aber inkl leere Spalten und Zeilen. Wie kann ich diese entfernen?
Vielen Dank im Voraus.

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA alle Zellen mit Inhalt als Tabelle formatieren
25.08.2014 11:06:19
Rudi
Hallo,
Wie kann ich diese entfernen?
indem du sie einfach löschst.
Der Recorder ist dein Freund.
Aktionen aufzeichnen und anschließend den Code überarbeiten.
Gruß
Rudi

AW: VBA alle Zellen mit Inhalt als Tabelle formatieren
25.08.2014 11:20:50
Sioo
Hallo Rudi,
Mit dem Makro Rekorder ist die Lösung leider unzureichend, da er Select benutzt und spezielle Zeilen und Spalten markiert. Problem ist: Es sind immer unterschiedliche Spalten bzw Zeilen leer. Da bringt mir Select A7 beispielsweise nicht viel. Ich brauch ein Makro welches in einer Range diese Zeilen und Spalten löscht. Wenn ich google finde ich sowas für Zeilen:
Public Sub DeleteBlankRows()
Dim R As Long
Dim c As Range
Dim n As Long
Dim rng As Range
On Error GoTo skip
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
If Selection.Rows.Count > 1 Then
Set rng = Selection
Else
Set rng = ActiveSheet.UsedRange.Rows
End If
n = 0
For R = rng.Rows.Count To 1 Step -1
If Application.WorksheetFunction.CountA(rng.Rows(R).EntireRow) = 0 Then
rng.Rows(R).EntireRow.Delete
n = n + 1
End If
Next R
skip:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
first = Selection.Column
last = Selection.Columns(Selection.Columns.Count).Column
For I = last To first Step -1
If WorksheetFunction.CountBlank(ActiveSheet.Columns(I)) = 1048576 Then
Columns(I).Delete
End If
Next I
End Sub

Wie könnte ich da ggf Spalten einfügen. Viele grüße

Anzeige
AW: VBA alle Zellen mit Inhalt als Tabelle formatieren
25.08.2014 14:15:23
Adis
Hallo
ich liebe kleine Beispiel Dateien. Hier eine Excel7 Version, die aber nach wie vor laeuft.
Amüsant ist, das dieses Programm nicht normal ablaeuft, sondern -den Laufzeifehler- auswertet.
Sucht man mit SpecialCells nach xlContents.Count erfolgt die Fehlermeldung -keine Zellen vorhanden-
Ein Zeichen das die betreffende Zeile/ Spalte leer sein muss. Damit wird sie -rückwaerts- gelöscht.
Rückwerts löschen, weil sonst der Zeilenzaehler durch die gerade gelöschte Zeile durcheinander kommt.
Wenn das Makro gefaellt in die eigene Datei übernehmen. Würde mich freuen wenn es passt.
https://www.herber.de/bbs/user/92279.xls
Gruss Adis

Anzeige
AW: VBA alle Zellen mit Inhalt als Tabelle formatieren
25.08.2014 20:22:09
Sioo
Hallo Adis,
kann die Datei leider nicht benutzen. Weder auf der Arbeit noch zuhause funktioniert das Makro, da ich ein ActiveX Steuerelement benötige.

AW: VBA alle Zellen mit Inhalt als Tabelle formatieren
26.08.2014 21:26:41
Adis
Hallo
Hier der Programmm Code. Einfach in ein normales Modul kopieren und ausprobieren.
Am besten zuerst in einer eigenen kleinen Beispiel Datei oder einer Kopie der Original Datei.
Würde mich freuen wenn es klappt. (Meine Beispiel Datei war versehentlich falsch formatiert)
Die letzte Zeile und Spalte bitte manuell aendern. Zur Zeit 10.000 Zeilen, 100 Spalten
'Leere Zeilen und Spalten in Datenbanken -rückwaerts- löschen 25.5.2014
'ein -umgekehrtes Programm-, weils den Laufzeit Fehler auswertet!!
'Anfrage: Sioo Betreff: VBA alle Zellen mit Inhalt als Tabelle formatieren
Const LastRow = 10000 '65535 Zeilen
Const LastCol = 100 '256 Spalten
'Rückwaertschleife Programm mit SpecialCells(Contents)
'gelöscht wird in dem Fall über Fehler: -keine Zellen- mit Werten gefunden
Sub LeereZeilen_undSpalten_löschen()
'  Sheets("Tabelle1").Select
Application.ScreenUpdating = False
On Error GoTo ClrRow
'Rückwaertschleife SpecialCells(Contents)
For i = LastRow To 1 Step -1
Rows(i).Select    '** nur zum Test
wert = Rows(i).SpecialCells(xlContents).Count
Next i
On Error GoTo ClrCol
For i = LastCol To 1 Step -1
Columns(i).Select   '** nur zum Test
wert = Columns(i).SpecialCells(xlContents).Count
Next i
Exit Sub
'gelöscht wird bei Laufzeitfehler:  -keine Zellen gefunden-
ClrRow:  'kein Wert gefunden ; löschen
Rows(i).Delete Shift:=xlUp
Resume Next
ClrCol:  'kein Wert gefunden ; löschen
Columns(i).Delete Shift:=xlToLeft
Resume Next
End Sub
Gruss Adis
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Alle Zellen mit Inhalt in Excel als Tabelle formatieren


Schritt-für-Schritt-Anleitung

Um alle Zellen mit Inhalt in Excel als Tabelle zu formatieren, kannst du das folgende VBA-Makro verwenden. Dieses Makro identifiziert den Bereich mit Daten und erstellt eine Tabelle, während leere Zeilen und Spalten ausgeschlossen werden.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle "Einfügen" > "Modul".

  3. Kopiere den folgenden Code in das Modul:

    Sub A_SelectAllMakeTable()
        Dim tbl As ListObject
        Dim rng As Range
        Set rng = Range(Range("A1"), Range("A1").SpecialCells(xlLastCell))
        Set tbl = ActiveSheet.ListObjects.Add(xlSrcRange, rng, , xlYes)
        tbl.TableStyle = "TableStyleMedium15"
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Um das Makro auszuführen, drücke ALT + F8, wähle A_SelectAllMakeTable und klicke auf "Ausführen".

Um sicherzustellen, dass leere Zeilen und Spalten nicht in die Tabelle aufgenommen werden, kannst du ein zusätzliches Makro verwenden, das diese entfernt.


Häufige Fehler und Lösungen

Problem: Das Makro formatiert auch leere Zeilen und Spalten.
Lösung: Stelle sicher, dass du ein Makro verwendest, das leere Zeilen und Spalten löscht, bevor du die Excel-Tabelle definierst. Hier ist ein Beispiel:

Public Sub DeleteBlankRowsAndColumns()
    Dim R As Long
    Dim n As Long
    Dim rng As Range
    On Error GoTo skip
    Application.ScreenUpdating = False
    Set rng = ActiveSheet.UsedRange

    ' Leere Zeilen löschen
    For R = rng.Rows.Count To 1 Step -1
        If Application.WorksheetFunction.CountA(rng.Rows(R)) = 0 Then
            rng.Rows(R).Delete
            n = n + 1
        End If
    Next R

    ' Leere Spalten löschen
    For I = rng.Columns.Count To 1 Step -1
        If Application.WorksheetFunction.CountA(rng.Columns(I)) = 0 Then
            rng.Columns(I).Delete
        End If
    Next I
skip:
    Application.ScreenUpdating = True
End Sub

Führe dieses Makro vor dem Formatieren der Tabelle aus, um sicherzustellen, dass nur relevante Daten verwendet werden.


Alternative Methoden

Eine andere Möglichkeit, alle Zellen mit Inhalt in einer Excel-Tabelle zu formatieren, ist die Verwendung von Excel-Tabellen direkt über die Benutzeroberfläche:

  1. Wähle den gesamten Datenbereich aus.
  2. Gehe zu „Einfügen“ > „Tabelle“.
  3. Stelle sicher, dass das Kontrollkästchen „Meine Tabelle hat Überschriften“ aktiviert ist, falls deine Daten Überschriften enthalten.
  4. Klicke auf „OK“.

Diese Methode ist einfach, erfordert jedoch, dass du manuell die leeren Zeilen und Spalten entfernst, bevor du die Tabelle definierst.


Praktische Beispiele

Hier ist ein Beispiel für ein vollständiges Makro, das sowohl leere Zeilen als auch leere Spalten entfernt und die verbleibenden Daten als Tabelle formatiert:

Sub FormatDataAsTable()
    Call DeleteBlankRowsAndColumns
    Call A_SelectAllMakeTable
End Sub

Mit diesem Makro werden zuerst alle leeren Zeilen und Spalten gelöscht, bevor die Funktion A_SelectAllMakeTable aufgerufen wird, die den Datenbereich als Excel-Tabelle definiert.


Tipps für Profis

  • Verwendung von Application.ScreenUpdating = False: Dies beschleunigt die Ausführung deines Makros, da der Bildschirm nicht bei jeder Aktion aktualisiert wird.
  • Fehlerbehandlung: Füge On Error Resume Next in dein Makro ein, um Laufzeitfehler bei der Verarbeitung leerer Zellen zu ignorieren.
  • Makros speichern: Stelle sicher, dass du deine Arbeitsmappe als „Excel-Makro-fähige Arbeitsmappe“ (.xlsm) speicherst, um die Makros zu behalten.

FAQ: Häufige Fragen

1. Kann ich das Makro in einer anderen Excel-Version verwenden?
Ja, das VBA-Makro sollte in den meisten Versionen von Excel, einschließlich Excel 2010 und höher, funktionieren.

2. Was mache ich, wenn das Makro nicht funktioniert?
Überprüfe, ob die Sicherheitsoptionen für Makros in Excel aktiviert sind. Du findest diese unter „Datei“ > „Optionen“ > „Trust Center“ > „Trust Center-Einstellungen“ > „Makroeinstellungen“.

3. Ist es möglich, eine VBA Word Tabelle zu formatieren?
Ja, die Prinzipien sind ähnlich, aber du musst den VBA-Code anpassen, um die spezifischen Word-Objekte zu verwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige