Automatisierter Ablauf Exceltabelle!

Hallo zusammen,

bei meiner Arbeit sammele ich Daten in einer Excel-Tabelle. Ich habe nur eine Spalte und schreibe pro Zeile auch nur eine Information hinein.

Wenn ich das alles fertig habe möchte ich gerne, dass hinter jeder Info ein Komma kommt, dann anschließend nach jeder 18. Zeile eine Leerzeile eingefügt wird und wenn das alles erledigt ist, sollen die 18er Bündel - sage ich mal so - alle nacheinander ohne Leerzeile nur mit dem Komme getrennt in einer Zelle stehen.

Schade, dass man keinen Screenshot einfügen kann. Dann würde man es evtl. leichter verstehen. :frowning:

Ich kann mir da leider nicht weiterhelfen, darum baue ich auf EURE Hilfe.

Ach so, von der VBA-Programmierung habe ich so gut wie keine Ahnung. Wenn ihr mir was schreibt über VBA, dann bitte für dumme. :smile:)

Vielen Dank schon mal.

Salve

dann anschließend nach jeder 18. Zeile eine Leerzeile eingefügt wird

das hatte ich schon beantwortet

und wenn das alles erledigt ist, sollen die 18er Bündel - sage ich mal so - :alle nacheinander ohne Leerzeile nur mit dem Komme getrennt in
einer Zelle stehen.

Falls mit dem makro aus meiner ersten Antwort die Leerzeilen schon
reingeschraubt sind, schreibt das folgende Makro alles in Spalte C
in die erste Zeile des jeweiligen 18er-Blocks, jeweils getrennt durch ein Komma.
Die 100 wieder an Bedarf anpassen

Sub do18csv()
Dim a As Long

For a = 1 To 100 Step 19
Cells(a, 3) = Cells(a, 1) & „,“ & _
Cells(a + 2, 1) & „,“ & _
Cells(a + 3, 1) & „,“ & _
Cells(a + 4, 1) & „,“ & _
Cells(a + 5, 1) & „,“ & _
Cells(a + 6, 1) & „,“ & _
Cells(a + 7, 1) & „,“ & _
Cells(a + 8, 1) & „,“ & _
Cells(a + 9, 1) & „,“ & _
Cells(a + 10, 1) & „,“ & _
Cells(a + 11, 1) & „,“ & _
Cells(a + 12, 1) & „,“ & _
Cells(a + 13, 1) & „,“ & _
Cells(a + 14, 1) & „,“ & _
Cells(a + 15, 1) & „,“ & _
Cells(a + 16, 1) & „,“ & _
Cells(a + 17, 1)
Next a
End Sub

Brauchst Du trotzdem noch ein Komma in jeder Zelle der Spalte A?
Dann würde in der Zusammenfassung auch am Ende ein Komma stehen,
mit dem obigen Code nur als Trenner.

MfG

Hallo,

mal wieder vielen Dank für deine Hilfe.

Zwei Bitten habe ich noch. :smile:

Wie kann ich den zweiten Code so ändern, dass er erst in der zweiten Zeile anfängt? Ich habe in der ersten Zeile eine Überschrift.

Und dann noch was. Wie stelle ich es an, dass er die Zellen, wo alle Informationen mit Kommas getrennt drin stehen untereinander macht, jeweils mit einer Zeile getrennt und nicht mit 19?

Geht das irgendwie?

Meine Fragen beziehen sich auf den u. a. Code.

Sub do18csv()
Dim a As Long

For a = 1 To 500 Step 19
Cells(a, 3) = Cells(a, 1) & „“ & _
Cells(a + 2, 1) & „“ & _
Cells(a + 3, 1) & „“ & _
Cells(a + 4, 1) & „“ & _
Cells(a + 5, 1) & „“ & _
Cells(a + 6, 1) & „“ & _
Cells(a + 7, 1) & „“ & _
Cells(a + 8, 1) & „“ & _
Cells(a + 9, 1) & „“ & _
Cells(a + 10, 1) & „“ & _
Cells(a + 11, 1) & „“ & _
Cells(a + 12, 1) & „“ & _
Cells(a + 13, 1) & „“ & _
Cells(a + 14, 1) & „“ & _
Cells(a + 15, 1) & „“ & _
Cells(a + 16, 1) & „“ & _
Cells(a + 17, 1)
Next a
End Sub

Danke. :smile:

Hallo

ab Zeile 2 und Ergebnis ab C2 untereinander:

Sub do18csv()
Dim a As Long, b As Long
'Startzeile für Zusammenfassung
b = 2
'ab Zeile 2
For a = 2 To 500 Step 19
Cells(b, 3) = Cells(a, 1) & „,“ & _
Cells(a + 2, 1) & „,“ & _
Cells(a + 3, 1) & „,“ & _
Cells(a + 4, 1) & „,“ & _
Cells(a + 5, 1) & „,“ & _
Cells(a + 6, 1) & „,“ & _
Cells(a + 7, 1) & „,“ & _
Cells(a + 8, 1) & „,“ & _
Cells(a + 9, 1) & „,“ & _
Cells(a + 10, 1) & „,“ & _
Cells(a + 11, 1) & „,“ & _
Cells(a + 12, 1) & „,“ & _
Cells(a + 13, 1) & „,“ & _
Cells(a + 14, 1) & „,“ & _
Cells(a + 15, 1) & „,“ & _
Cells(a + 16, 1) & „,“ & _
Cells(a + 17, 1)
'Zielzeile 1 hoch zählen
b = b + 1
Next a
End Sub

falls Du Kommata schon in Spalte A hast, hier wieder rausnehmen

MfG

Wie kann ich den zweiten Code so ändern, dass er erst in der
zweiten Zeile anfängt? Ich habe in der ersten Zeile eine
Überschrift.

Und dann noch was. Wie stelle ich es an, dass er die Zellen,
wo alle Informationen mit Kommas getrennt drin stehen
untereinander macht, jeweils mit einer Zeile getrennt und
nicht mit 19?

Hola Don,

ggfs. ZeiB = ZeiB + 1
abändern in
ZeiB = ZeiB + 2

Sub tt()
Dim ZeiA As Long, ZeiB As Long, Z As Long, Zmax As Long
Columns(2).Delete
Range("B1") = Range("A1")
Zmax = Cells(Rows.Count, 1).End(xlUp).Row
ZeiB = 2
For ZeiA = 2 To Zmax Step 18
 For Z = 0 To 17
 If Zmax \>= ZeiA + Z Then
 Cells(ZeiB, 2) = Cells(ZeiB, 2) & Cells(ZeiA + Z, 1) & ","
 End If
 Next Z
ZeiB = ZeiB + 1
Next ZeiA
End Sub

Gruß
Reinhard

Hallo,

ist echt beeindruckend, was man alles machen kann, wenn man sich mit der VBA-Programmierung auskennt. Danke erst mal wieder. :smile:

Eins hätte ich noch, um den Ablauf zu verbessern. Kann man den Code so ändern, dass er alleine erkennt, wie viele Zeilen voll sind mit Informationen? Also so, dass das Anpassen weg fällt?

Danke dir.

Hallo

hier mit Automatik für die letzte Zeile. In den ersten Antworten ist übrigens diese Zeile
Cells(a + 1, 1) & „,“ & _
verschütt gegangen.

*******************************
Sub do18csv()
Dim a As Long, b As Long, letzteZeile As Long
'Startzeile für Zusammenfassung
b = 2
'letzte Zeile in Spalte A einlesen
letzteZeile = Cells(Rows.Count, 1).End(xlUp).Row

'ab Zeile 2
For a = 2 To letzteZeile Step 19
Cells(b, 3) = Cells(a, 1) & „,“ & _
Cells(a + 1, 1) & „,“ & _
Cells(a + 2, 1) & „,“ & _
Cells(a + 3, 1) & „,“ & _
Cells(a + 4, 1) & „,“ & _
Cells(a + 5, 1) & „,“ & _
Cells(a + 6, 1) & „,“ & _
Cells(a + 7, 1) & „,“ & _
Cells(a + 8, 1) & „,“ & _
Cells(a + 9, 1) & „,“ & _
Cells(a + 10, 1) & „,“ & _
Cells(a + 11, 1) & „,“ & _
Cells(a + 12, 1) & „,“ & _
Cells(a + 13, 1) & „,“ & _
Cells(a + 14, 1) & „,“ & _
Cells(a + 15, 1) & „,“ & _
Cells(a + 16, 1) & „,“ & _
Cells(a + 17, 1)

'Zielzeile 1 hoch zählen
b = b + 1
Next a
End Sub
********************************

Reinhard hat eine bessere Lösung geschrieben, ich habe sie kommentiert
und hoffentlich in Deinem Sinne angepasst.

****************************************************
Sub tt()
Dim ZeiA As Long, ZeiB As Long, Z As Long, Zmax As Long
Dim i As Long, imax As Long, ZSp As Integer

'Startzeile in Zielspalte für Ergebnis
ZeiB = 2
'Zielspalte bestimmen
ZSp = 3

'Inhalte in Zielspalte leeren
Columns(ZSp).ClearContents
'letzte Zeile in Spalte A einlesen
Zmax = Cells(Rows.Count, 1).End(xlUp).Row

'äußere Schleife für 18er Blöcke
For ZeiA = 2 To Zmax Step 19
'innere Schleife für jeden 18er Block
For Z = 0 To 17
'solange letzte ZeilenNr in Spalte A > als Zeilen im 18er Block
If Zmax >= ZeiA + Z Then
'hänge in der Zielzelle an den aktuellen Zellwert den nächsten Wert aus Spalte A + Kommma
Cells(ZeiB, ZSp) = Cells(ZeiB, ZSp) & Cells(ZeiA + Z, 1) & „,“
End If
Next Z
'Zielzeile nach jeder Schleife 1 hochzählen
ZeiB = ZeiB + 1
Next ZeiA

'abschließend das letzte Komma im Zielbereich entfernen (Länge -1 Zeichen)

'letzte Zeile in Zielspalte 3 = „C“
imax = Cells(Rows.Count, 3).End(xlUp).Row
For i = 2 To imax
Cells(i, 3) = Left(Cells(i, 3), (Len(Cells(i, 3)) - 1))
Next i
End Sub
**************************************************************

MfG

Salve Reinhard

Danke für den Verbesserungsvorschlag.
Für den Fragenden habe ich Deine Lösung kommentiert und
3 Sachen geändert / ergänzt:

im Code werden jetzt Zielzeile und Zielspalte Variablen zugewiesen

Zielspalte wird nicht gelöscht (verschiebt Inhalte rechts davon),
sondern nur die Inhalte gelöscht

Schleife zum Löschen des letzten Komma angehängt

MfG

Hallo und vielen Dank an euch!

Ich beziehe mich jetzt auf den Code von Reinhard.

Der Code funktioniert prima! :smile:

Eins vermisse ich jedoch. Wie muss ich den Code ändern, damit zwischen den Zeile mit den 19er Paketen jeweils eine leere Zeile steht?
Ich füge die Blöcke nämlich in Word ein und wenn ich zwischen den 19er Paketen eine Leerzeile habe, lässt es sich schneller abgrenzen in Word.

Danke schon mal im Voraus.

)

Hallo Tom,

Ich beziehe mich jetzt auf den Code von Reinhard.
Der Code funktioniert prima! :smile:

gelgentlich klappt’s :smile:)

Eins vermisse ich jedoch. Wie muss ich den Code ändern, damit
zwischen den Zeile mit den 19er Paketen jeweils eine leere
Zeile steht?

Schrieb ich doch,

ggfs. ZeiB = ZeiB + 1
abändern in
ZeiB = ZeiB + 2

Ich füge die Blöcke nämlich in Word ein und wenn ich zwischen
den 19er Paketen eine Leerzeile habe, lässt es sich schneller
abgrenzen in Word.

19? Dachte 18?
An sich egal, du mußt dann nur den Step=… abändern und die For-Schleife, For x=0 to 17 sind 18, For x=0 To 18 sind 19 Zellen.

Und was meinst du mit abgrenzen? Anstatt einer Leerzeile kann man da auch eine Reihe Blümchen pflanzen *grins*, äh, ich meine so Sondersymbole aus Wingdings bzw. Unicode.

So wie hier:
:phone::phone::phone::phone::phone::phone::phone::phone::phone::phone:

Gruß
Reinhard

Rundumsorglospaket für 18er Block
Salve

Eins vermisse ich jedoch.

habe ich das nicht schon einmal gelesen? :wink:

Wie muss ich den Code ändern, damit
zwischen den Zeile mit den 19er Paketen jeweils eine leere
Zeile steht?

kommt mir auch bekannt vor…
http://www.wer-weiss-was.de/app/service/board_navi?G…
wenn dort auch von 18er Blöcken die Rede war, also
18 Zeilen mit Inhalt und nach der 18. Zeile eine Leerzeile einfügen

Ich füge die Blöcke nämlich in Word ein und wenn ich zwischen
den 19er Paketen eine Leerzeile habe, lässt es sich schneller
abgrenzen in Word.

aha

mühsam ernährt sich das Eichhörnchen,
hier also die Rundumsorglosvariante für einen 18er Block:

********************************************************
Sub tt()
Dim ZeiA As Long, ZeiB As Long, Z As Long, Zmax As Long
Dim i As Long, imax As Long, ZSp As Integer
Dim a As Long

'letzte Zeile in Spalte A einlesen
Zmax = Cells(Rows.Count, 1).End(xlUp).Row

'ab Zeile 20 nach 18 Zeilen je eine Leerzeile einfügen
For a = 20 To Zmax Step 19
Rows(a).Insert
Next a

'Startzeile in Zielspalte für Ergebnis
ZeiB = 2
'Zielspalte bestimmen
ZSp = 3

'Inhalte in Zielspalte leeren
Columns(ZSp).ClearContents

'äußere Schleife für 18er Blöcke
For ZeiA = 2 To Zmax Step 19
'innere Schleife für jeden 18er Block
For Z = 0 To 17
'solange letzte ZeilenNr in Spalte A > als Zeilen im 18er Block
If Zmax >= ZeiA + Z Then
'hänge in der Zielzelle an den aktuellen Zellwert den nächsten Wert aus Spalte A + Kommma
Cells(ZeiB, ZSp) = Cells(ZeiB, ZSp) & Cells(ZeiA + Z, 1) & „,“
End If
Next Z
'Zielzeile nach jeder Schleife 1 hochzählen
ZeiB = ZeiB + 1
Next ZeiA

'abschließend das letzte Komma im Zielbereich entfernen (Länge -1 Zeichen)

'letzte Zeile in Zielspalte 3 = „C“
imax = Cells(Rows.Count, 3).End(xlUp).Row
For i = 2 To imax
Cells(i, 3) = Left(Cells(i, 3), (Len(Cells(i, 3)) - 1))
Next i
End Sub

****************************************************************

MfG

Vielen Dank! Ich denke jetzt habe ich´s!

Vielen Dank für deine Hilfe.

Jetzt läuft´s so, wie ich es haben möchte! :smile: