Excel Export VBA?

PWolff  21.11.2022, 12:54

In welchem Format benötigst du die exportierten Daten?

2 Antworten

Muss das per VBA sein? Sonst:

Markiere den Bereich.
Kopieren.
Auf ein neues Blatt wechseln.
EINE Zelle auswählen.
Rechtsklick/ Inhalte einfügen... --> Transpoenieren (unten rechts)/ OK
Fertig.
DAMIT hast Du das Ganze in Spalten, allerdings noch ohne Zwischenräume. DIE machst Du entweder manuell oder per Formel in einem neuen Bereich:

=WENN(REST(SPALTE(A1);2)=1;INDEX($A$1:$J$1000;ZEILE(A1);(SPALTE(A1)/2)+1);"")

... und nach rechts und dann die ganze Zeile nach unten kopieren.

Danach kannst Du nochmal alles kopieren und über Inhalte... Einfügen--> Werte die Formel in feste Werte umwandeln. (Sicher ist sicher.)

Klappt es?

P.S.: Vielleicht geht es einfacher? Fällt jemandem etwas ein?

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)
Von Experte Oubyi, UserMod Light bestätigt

Wenn du den Export nur ein einziges Mal benötigst, reicht es, wenn du die Anleitung von Oubyi befolgst (Transponiert einfügen) und dann als Textdokument speichern.

Du kannst auch ein Makro aufzeichnen, in dem du diese Schritte durchführst, und es nachher so oft wie nötig ausführen lassen. Beachte dabei zwei Dinge:

  • Die Größe des zu kopierenden Bereichs kann sich ändern, das muss im Makro ggf. angepasst werden (es sei denn, du verwendest Strg+Umschalt+Ende)
  • Als aktuelle Datei gilt nach dem Abspeichern die Textdatei - du müsstest also die Originaldatei wieder öffnen (am besten das Makro mit Strg+S beginnen und am Ende die Datei schließen und neu öffnen)

Oder du arbeitest dich selber in VBA ein; um dir hier sinnvoll Tipps geben zu können, müssten wir wissen, wie sehr du dich mit VBA auskennst.

Woher ich das weiß:Berufserfahrung – Software-Entwickler

thomashatfragen 
Beitragsersteller
 21.11.2022, 14:19

Leider fast keine Erfahrung.

Automatisiert wäre natürlich toll.

Alles was es können muss ist:

bei export A1 bis M1 also Block untereinander

und dann A2 bis M2 usw.

Habe leider mit der Sprache nie gearbeitet.

0
PWolff  21.11.2022, 14:41
@thomashatfragen

In dem Fall würde ich tatsächlich über "Makro aufzeichnen" gehen.

  • "Entwicklertools" sichtbar machen (Such dir bei https://www.google.com/search?q=excel+entwicklertools+anzeigen eine Anleitung aus, mit der du klarkommst)
  • Unter Menü "Entwicklertools" auf "Makro aufzchn." klicken; dem Makro einen passenden Namen geben - ohne Leer- und Sonderzeichen, etwa "Exportieren" -, eine kurze aussagekräftige Beschreibung angeben und ggf. eine Tastenkombination definieren (lässt sich auch später noch ändern, wenn auch mühsamer)
  • Arbeitsblatt/Tabelle mit den Daten aktivieren
  • gewünschten Bereich auswählen (am einfachsten ist es, wenn die komplette Tabelle exportiert werden soll: Strg+Pos1; Strg+Umschalt+Ende)
  • Auswahl kopieren (Strg+C)
  • Neues Excel-Dokument öffnen (Strg+N)
  • Menü Start -> Inhalte einfügen -> Transponieren
  • Menü Datei -> Speichern unter; Rückfrage(n) bestätigen
  • Dateityp: Text (Tabstopp getrennt) oder CSV (Trennzeichen getrennt), wobei ich Tabstopp-getrennt DRINGEND empfehlen würde - CSV hat ein paar Bugs
  • Dateiname: geeigneten Namen wählen (ohne ?<>:\ und ein paar weitere Zeichen)
  • Button "Speichern" klicken; Rückfragen bestätigen
  • Aktuelles Arbeitsblatt schließen ([X] rechts oben oder Alt+F4); Rückfrage wegen "Änderungen speichern" kann abgelehnt werden, es würde nur dieselbe Datei noch einmal geschrieben
  • Menü Entwicklertools -> Aufzeichnung beenden
1
thomashatfragen 
Beitragsersteller
 21.11.2022, 15:04
@PWolff

Hey,

Danke es funktioniert mit den Markos.

Wie folgt ist die Funktion die es umsetzten soll:

Range("A1:N1,A2:N2").Select

   Range("A2").Activate

   Selection.Copy

   Sheets("Export").Select

   Range("A1").Select

   Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _

       False, Transpose:=True

   Sheets("Zuexportiern").Select

   Range("A1:N1,A3:N3").Select

   Range("A3").Activate

   Application.CutCopyMode = False

   Selection.Copy

   Sheets("Export").Select

   Range("A15").Select

   Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _

       False, Transpose:=True

   Sheets("Zuexportiern").Select

   Range("A1:N1,A4:N4").Select

   Range("A4").Activate

   Application.CutCopyMode = False

   Selection.Copy

   Sheets("Export").Select

relativ simple.

haben sie eine Möglichkeit das es das bis ende der Tabelle macht und ich dies nicht manuell machen muss.

oder worunter ich dies bei VBA finde.

Herzlichen Danke schonmal

0
PWolff  21.11.2022, 17:34
@thomashatfragen

Hast du unmittelbar vor dem Kopieren noch auf eine andere Zelle geklickt?

Bei mir kommt folgender Code raus:

Option Explicit

Sub Export01()
'
' Export01 Makro
'

'
    Sheets("Tabelle1").Select
    Range("B3").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.Copy
    Workbooks.Add
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Application.CutCopyMode = False
    ActiveWorkbook.SaveAs Filename:= _
        "%USERPROFILE%\Documents\ExportTest.txt", FileFormat:=xlText, _
        CreateBackup:=False
    ActiveWindow.Close
End Sub

Die linke obere Ecke der Matrix liegt in B3.

Den Pfad habe ich verallgemeinert (%USERPROFILE%).

Die Zeile

ActiveCell.SpecialCells(xlLastCell)).Select

markiert alle Zellen von der aktuellen Zelle bis zur letzten je verwendeten Zelle (genauer: bis zu derjenigen Zelle, die in der letzten je verwendeten Zeile und in der letzten je verwendeten Spalte lieft). Dadurch funktioniert der Code unverändert, wenn die Matrix später erweitert wird. Nur, wenn man die Matrix verkleinert, werden dann Leerzellen geschrieben - eine Excel-Datei merkt sich für alle Zeiten, welches die letzte Zeile und welches die letzte Spalte ist, die je verwendet wurden.

Sollten rechts oder unterhalb der Matrix, die exportiert werden soll, weitere Zellen liegen, braucht man entweder eigenen VBA-Code oder einen benannten Bereich (oder beides). Bei benannten Bereichen bin ich nur sicher, dass sie korrekt erweitert werden, wenn man im Innern Zeilen oder Spalten einfügt.

1