Hey, ich möchte gerne per VBA meine Tabelle als CSV exportieren, allerdings ohne ohne Zeilen. Wie geht das?

2 Antworten

Wie man Leerzeilen ausblendet, habe ich jetzt nicht gefunden; ich vermute auch, dass das beim Speichern als CSV nicht berücksichtigt wird. Damit bleibt nur ein Makro, das so was übernimmt.

Der Dateiname ist das kleinste Problem:

Dateiname = "Auto_" + Range("H5").Text + ".csv"

Ermitteln und Ausgeben einer Zeile:

Dim Zeile As Range, ZeileTexte() As String, i As Integer

' ...

Zeile = Range(Cells(Zeilennummer, 1), Cells(Zeilennummer, 25))
ReDim ZeileTexte(Zeile.Count - 1)
For i = 0 To Zeile.Count - 1
ZeileTexte(i) = Zeile(1 + i).Text
Next
'Auf Leerzeile prüfen, nur weitermachen, wenn Zeile nicht leer
If Join(ZeileTexte, "") <> "" Then
Print #Dateinummer, Join(ZeileTexte, Spaltentrenner)
End If


VIelen Dank für deine Mühe.

Fehlt bei dem VBA Code noch was? Weil ich es nicht zum starten bekommen.

An welcher Stelle müsste ich den Dateinamen VBA einfügen?

0
@KaiserWilhelmXL

Es fehlt der Prozedurkopf und der komplette Prozedurkörper mit Ausnahme dieser entscheidenden Zeilen.

Hast du überhaupt schon mal mit Makros gearbeitet? Bevor ich dir einen Makro-Quelltext hier hinschreibe und du kannst damit auch nichts anfangen.

0
@PWolff

Ja, ich habe schon öfters mit Makros gearbeitet. Leider übersteigt es aktuell noch meinen Horizont diese komplett selber zu schreiben.

0
@KaiserWilhelmXL

Ich sehe gerade, ich habe das "Set " vor "Zeile = " vergessen.

'Falls das Makro in der entsprechenden Tabelle steht, kann ws im Prozedurkopf als Argument wegfallen und im Prozedurkörper durch Me ersetzt werden
Public Sub ExportiereAlsCsv(ws As Worksheeet)
    Const Spaltentrenner As String = ", " 'Trenner: Komma + Leerzeichen; kann durch beliebige andere Zeichen ersetzt werden, für Tab-getrennt z. B. durch vbTab

    Dim Dateiname As String, DateiNr As Integer
    Dim Zeile As Range, ZeileTexte() As String, i As Integer
    Dim zNr As Long, sNr As Long 'Zeilen- und Spaltennummer
    dim zAnz As Long, sAnz As Long 'Zeilen- und Spaltenanzahl
    Dim lastCell As Range

    Dateiname = "Auto_" + ws.Range("H5").Text + ".csv" 'Hoffentlich steht der Dateiname auch wirklich im zu exportierenden Arbeitsblatt
    Set lastCell = ws.Cells.SpecialCells(xlCellTypeLastCell)

    zAnz = WorksheetFunction.Min(25, lastCell.Column): sAnz = WorksheetFunction.Min(25, lastCell.Column)
    ReDim ZeileTexte(zAnz - 1)

    DateiNr = FreeFile()
    Open Dateiname For Output As #DateiNr
        For zNr = 1 To zAnz 'alle Zeilennummern in A1:Y160000, eingegrenzt auf die tatsächlich gebrauchten
            Set Zeile = ws.Range(ws.Cells(zNr, 1), ws.Cells(zNr, sAnz))
            For sNr = 1 To sAnz 'alle Spaltennummern in A1:Y160000, eingegrenzt auf die tatsächlich gebrauchten
                ZeileTexte(i) = Zeile(1 + i).Text
            Next
            'Auf Leerzeile prüfen, nur weitermachen, wenn Zeile nicht leer
            If Join(ZeileTexte, "") <> "" Then
                Print #Dateinummer, Join(ZeileTexte, Spaltentrenner)
            End If
        Next
    Close #DateiNr
End Sub

(War gar nicht so leicht, den Edi-Tor hier zu überreden, die Leerzeichen zu übernehmen. Hab "&nbsp;" verwendet.)

0

Und doch die Leerzeilen werden auch übernommen, wenn man diese als CSV abspeichert. In Excel selbst sieht man diese nicht, aber wenn man die CSV im Editor aufmacht dann sehr wohl. Und genau das ist mein Problem.

0
@KaiserWilhelmXL

Wenn Dich das Löschen der Leerspalten NICHT stört, dann könntest Du meine Routine mit dem Makrorekorder aufnehmen und an den Anfang des Codes stellen.
Kann aber sein, dass das noch etwas nachbearbeitet werden muss.
Dann stell es hier ein und wir machen das, falls Du es nicht selber hinbekommst.

0
@KaiserWilhelmXL

Sorry, hab mich da ungeschickt ausgedrückt. Ich meinte, so weit ich mich erinnere, werden nach meiner Erfahrung ausgeblendete Spalten und Zeilen sehr wohl mit exportiert beim Speichern als CSV. Und ich kenne keine Einstellung, das abzuschalten.

0
@Oubyi

Generell würde mich das nicht stören. Aber leider funktionierte es nicht. Er sagte mir immer das keine Leerzellen existieren würden.

0

Falls Dir das eine Hilfe ist. Du kannst die Leerzeilen in Deiner Tabelle auch ganz einfach löschen:

Eine Spalte komplett markieren/
F5 (Gehe zu) / Inhalte.. --> Leerzellen / Ok.
Rechtsklick in eine der markierten Leerzellen/
Zellen löschen...--> Ganze Zeile/ Ok.

Fertig.

Falls die Leerzeilen erhalten bleiben müssen, kannst Du das nach dem exportieren ja wieder rückgängig machen oder eine Kopie nutzen

Danke, ich wollte aber gerne das ganze so weit wie möglich automatisieren.

1

Excel: Wenn Zelle ungleich null, Zeilennummer angeben

Hallo!

Ich habe ein kleines Excel-Problem: Meine Tabelle enthält viele Zeilen mit mehreren Spalten. Spalte E werden manchmal Werte im Plus-/Minusbereich eingegeben. Ich möchte nun im Tabellenkopf zählen a) wie oft in der Spalte ungleich null rauskommt (habe ich schon gelöst) und b) in welcher Zeile kam zum ersten mal ungleich null vor, Ausgabe dieser Zeile Spalte D

Kann mir jemand bei der Lösung von b) helfen?

...zur Frage

Welche Formel für Exel , wenn Spalte A plus ,Spalte B minus und SpalteC das Ergebnis in jeder Zeile stehen soll, in Zeile 4 aber gar nichts steht?

Ich habe eine Tabelle mit Zeilen 1-5 und Spalten A-C. In Spalte C sollen meine Ergebnisse stehen. Spalte A soll zum jeweiligen Ergebnis der vorausgehenden Zeile addiert und Spalte B subtrahiert werden. Problem: In Zeile 4 steht gar nichts und da sollte auch in Spalte C nichts stehen. Bisher habe ich "Summenformel" und "Wenn Dann Formel" versucht. Da in Zeile 4 nichts stehen darf finde ich nicht die richtige Formel, damit in C5 auch noch ein Ergebnis steht.

...zur Frage

Wert aus Tabelle 1 mehreren Zeilen in Tabelle 2 zuordnen

Ich habe 2 Tabellen. In der ersten Tabelle ist pro Zeile ein Hauptartikel mit einer eindeutigen Artikelnummer aufgeführt. In einer weiteren Spalte der jeweiligen Zeile steht die Katalogseite, in der der Hauptartikel abgebildet ist. Die zweite Tabelle hat alle Varianten eines Hauptartikels. Das sind bis zu 50 Zeilen pro Hauptartikel. Jede Variante hat auch in einer Spalte die Hauptartikelnummer, somit besteht ein eindeutiger Idex zwischen den beiden Tabellen. Jedoch fehlt in der Variantentabelle die Spalte Katalogseite. Wie kann ich die Variantentabelle mit der Katalogseiten des jeweiligen Hauptartikels füllen? Nur zur Verdeutlichung: Tabelle 1, mit einem Hauptartikel pro Zeile hat 650 Zeilen. Tabelle 2 Variantenartikeln, hat 22.000 Zeilen aber auch nur 650 Hauptartikel!

...zur Frage

Kleine Ergänzung in EXCEL - Lösung vornehmen...?

Hallo,

ich ließ mir von einem Fachmann eine EXCEL - Lösung (VBA - Basis) erstellen, die aus insgesamt 4 Tabellen besteht. In 3 Tabellen passieren Datenerfassung und Berechnungen, in einer wird ausschließlich die Datenausgabe auf genau 1 A-4-Seite gedruckt, nichts anderes.

Die gewünschte Ergänzung soll nur in der Tabelle "Druck" vorgenommen werden und zwar dahingehend, dass jede Seite nicht nur gedruckt sondern (als xlms oder pdf) auch auf einfache Weise gespeichert wird, um ein File später bei Bedarf am Monitor anzusehen. Speicherformat z.B. MM.TT.JJJJ plus fortlaufende Nummer von
0001 bis max. 9999.

Ich selbst kann EXCEL leider nur als User einigermaßen gut handeln aber keine Änderungen vornehmen ....

Möglicherweise stellt es nur einen minimalen Zeitaufwand dar, um den Druckvorgang durch das anschließende Speichern zu erweitern??

Würde mich über Antwort freuen; vielen Dank und LG von Mela

...zur Frage

beim kopieren von Zellen plötzlich nicht mehr leer

In Tabelle 1 in den Spalten Z:AB habe ich 1800 Redewendungen zu stehen. Wobei nicht jede Zelle mit Inhalten belegt ist. Dies hängt von meiner Eingabe ab. Ich gebe das Wort "Tisch" ein dann werden in den Spalten Z:AB alle Datensätze die das Wort Tisch enthalten angezeigt. Alle anderen sind leer. Mit dem Makro Übersetzung kopiere ich die Spalten Z:AB in die Tabelle 2. Spalte B:D. Dort sind sämtliche Zellen ohne Text leer. In Tabelle 4 A1 gebe ich ein =Tabelle2!B6 und ziehe das bis A1800. Nun der Efekt. in einigen Zellen, die leer sein sollten, steht eine Null. Die stört mich da ich an Hand der Spalte A dann die Leerzeilen ausblende, damit nur noch die Zeilen angezeigt werden, die auch Text besitzen. Nun meine Frage: Wie kommt es , das eine leere Zelle in der Tabelle 2 plötzlich in der Tabelle 4 mit einer Null belegt ist. Sämtliche Zellen sind mit Text formatiert.

Sub deutsch_polnische_Übersetzung() ' ' deutsch_polnische_Übersetzung Makro

'Übersetzen
    Sheets("Tabelle1").Select
    Columns("Z:AB").Select
    Selection.Copy
    Sheets("Tabelle2").Select
    Columns("B:D").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
    Range("B1").Select
    
    Sheets("Tabelle4").Select
    Range("a1").Select
End Sub

Hat jemand ne Idee

Gruß Monkee

...zur Frage

[VBA] - Bestimmte Daten auslesen und vergleichen?

Servus Freunde, ich sitze zurzeit an einem Makro mit dem ich bestimmte Daten vergleichen will.

Also als Beispiel habe ich eine Excel Tabelle mit folgenden Daten:

  1. Erste Prüfung (Datum)
  2. Zeitraum bis neue Prüfung (Zahl z.B. 12 [Monate])
  3. Letzte Prüfung (Datum)

So nun möchte ich herausfinden ob, seit dem letztem öffnen der Excel Datei, eine neue Prüfung fällig ist.

Mein Pseudocode sieht aktuell so aus, jedoch habe ich keinen Schimmer wie ich das in VBA umsetzen kann:

Schleife die durch alle Zeilen läuft

Schleife für X Jahre

if Aktuelles Datum > Datum Erste Prüfung + X*(Zeitraum bis neue Prüfung) > Letzte Prüfung

Then Letzte Prüfung = Aktuelles Datum und MSGBox

Beispiel:

Aktuelles Datum: 25.03.2018
Erste Prüfung: 22.05.2014
Zeitraum: 12 Monate
Letzte Prüfung: 14.02.2017

-> Erste Prüfung + 3*12Jahre = 22.05.2017

Aktuelles Datum > 22.05.2017 > Letzte Prüfung

In diesem Fall müsste also eine neue Prüfung durchgeführt werden und das Datum der letzten Prüfung auf aktuelles Datum setzen.
Das Makro soll immer beim Öffnen der Excel Datei ausgeführt werden und dafür habe ich folgendes benutzt:

Private Sub Workbook_Open()
call "Automatic" 
End Sub

Automatic soll das Makro sein wo später die Datumsprüfung durchgeführt wird.

Allerdings bekomme ich zurzeit noch einen Syntax Fehler für das automatische Makro ausführen.

Ich hoffe ihr konntet mir irgendwie folgen. Bei Fragen stehe ich natürlich gern zur Verfügung.

...zur Frage

Was möchtest Du wissen?