Werte von einer Zeile auf mehrere Spalten und Zeilen verteilen
#1
Hallo,

mein erster Post, ich hoffe, dass ich damit ein Thema erwische, dass auch mehrere interessiert.

Wir haben ein Cafe und bieten Gäste WLAN an, die Zugangscode erstelle ich auf "Knopfdruck"
und erhalte dann eine csv Datei.

Nur leider stehen die Daten dann alle in einer Zeile.
Mit der bekannten Funktion "Text in Spalten" kann man zumindest den Text auf verschiedene Spalten verteilen.

Um die Serienbrief-Funktion aus Word zu nutzen, hätte ich gerne immer einen "Umbruch" nach jedem Code.

Nur leider gelingt mir das nicht.

DANKE für eure Ideen!


Angehängte Dateien Thumbnail(s)
   
Top
#2
Moin!
Zitat:ich hoffe, dass ich damit ein Thema erwische, dass auch mehrere interessiert.
Einer reicht ja, wenn es Dein Problem lösen sollte ;)
Aber dazu ist das alles zu schwammig.
Zitat:die Zugangscode erstelle ich auf "Knopfdruck" und erhalte dann eine csv Datei.
Womit genau?
Excel-VBA?
Spätestens jetzt bräuchte man die Datei (Excel und .csv) und kein nichtssagendes Bild.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#3
OK, die Datei ist im Anhang.


Angehängte Dateien
.csv   CSV File.csv (Größe: 1,12 KB / Downloads: 5)
Top
#4
(05.05.2017, 19:47)RPP63 schrieb: Moin!
Einer reicht ja, wenn es Dein Problem lösen sollte ;)
Aber dazu ist das alles zu schwammig.
Womit genau?
Excel-VBA?
Spätestens jetzt bräuchte man die Datei (Excel und .csv) und kein nichtssagendes Bild.

Gruß Ralf

mit knopfdruck meinte ich, dass es in dem abrechnungssystem (wenn router) eine möglichkeit gibt die wlan codes zu erstellen und diese dann per csv zu exportieren.
Top
#5
Moin!
Mal eine Lösung mit Excel-Bordmitteln:
Nachdem Du per Text In Spalten die Situation in Deinem Screenshot geschaffen hast,
kommt folgende Formel in A3:
=WENN(INDEX($2:$2;1;ZEILE($A1)*3+SPALTE(A$1))=0;"";INDEX($2:$2;1;ZEILE($A1)*3+SPALTE(A$1)))
Diese ziehst Du bis Spalte C und soweit wie notwendig nach unten (in Deinem Beispiel bis mindestens Zeile 57).
Lasse den Bereich markiert, kopiere und füge als Wert ein.
Die Spalten D:FL kannst Du jetzt löschen.

Ich werde Dir später mal ein Makro schreiben, welches dem Import und das transponieren automatisch erledigt.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • elaitsch
Top
#6
Folgendes in ein allgemeines Modul im VBA-Editor
(Alt+F11, Einfügen, Modul)
In Excel dann Alt+F8 und Makro RPP starten:


Modul Modul1
Option Explicit 
  
Private Function CSVDateiEinlesen() As String 
    With Application.FileDialog(msoFileDialogFilePicker) 
        .Title = "Import CSV" 
        .Filters.Add "CSV-Dateien", "*.csv", 1 
        .ButtonName = "Import" 
        If .Show = -1 Then CSVDateiEinlesen = .SelectedItems(1) 
    End With 
End Function 
  
Sub RPP() 
Dim Datei$, LastRow# 
  
' Datei festlegen 
Datei = CSVDateiEinlesen 
If Datei = vbNullString Then 
    If MsgBox("Sie müssen erst eine Datei auswählen!", vbRetryCancel) = vbRetry Then 
        Call RPP 
    Else 
        MsgBox "Abbruch durch Benutzer!", vbInformation 
        Exit Sub 
    End If 
End If 
  
' Import der CSV 
ThisWorkbook.Worksheets.Add 
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & Datei, Destination:=Range("$A$1")) 
    .TextFileCommaDelimiter = True 
    .TextFileSpaceDelimiter = True 
    .Refresh BackgroundQuery:=False 
End With 
  
' Formelbereich ermitteln und eintragen 
With ActiveSheet 
    On Error Resume Next 
    .Name = Mid(Datei, InStrRev(Datei, "\") + 1, 9 ^ 9) 
    On Error GoTo 0 
    LastRow = .Cells(2, .Columns.Count).End(xlToLeft).Column \ 3 + 2 
    With .Range("A3:C" & LastRow) 
        .FormulaR1C1 = "=IF(INDEX(R2,1,ROW(R[-2]C1)*3+COLUMN(R1C))=0,"""",INDEX(R2,1,ROW(R[-2]C1)*3+COLUMN(R1C)))" 
        .Copy: .PasteSpecial xlPasteValues 
    End With 
    'Spaltenbreite anpassen 
    .Columns("A:C").AutoFit 
    'Spalten ab D löschen 
    .Range("D:XFD").Delete 
End With 
End Sub 

Enjoy! :21:

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#7
Hallo zusammen,

wenn ich darf, stell ich auch einen Vorschlag ein:   Blush



Code:
Sub test()
Dim i As Long
 Dim varÜberschrift
 Dim varDaten
 With Sheets("CSV Daten")          'Tabelle in der in Zelle A1 die Überschrift und in Zelle A2 die eingelesenen Daten stehen; Tabellennamen anpassen
   varDaten = Split(.Range("A2"))   'Daten werden gesplittet (quasi Text in Spalten)
   varÜberschrift = Split(.Range("A1"), ",") 'das gleiche für die Überschriften
 End With
 
 With Sheets("Tabelle1") 'in Tabelle1 wird geschrieben; ANPASSEN
   .Cells.ClearContents  'zuerst alle Zellen leeren
   .Range("A1:C1") = varÜberschrift  'Überschriften in A1:C1 schreiben
   .Range("A2:C2") = Split(Application.Trim(Replace(varDaten(0), """", "")), ",")  'A2:C2 der erste Datensatz mit der Zeit
   .Range("C2") = .Range("C2") & " " & Replace(varDaten(1), """", "")  'in C2 den Text zur Zahl ergänzen
   On Error Resume Next 'muss sein, da der letzte Datensatz leer ist
   For i = 2 To UBound(varDaten)
     .Range(.Cells(i + 1, 1), .Cells(i + 1, 2)) = Split(Application.Trim(Replace(varDaten(i), """", "")), ",") 'die restlichen Daten bereinigen und in die Zellen schreiben
   Next i
   .Range("C3:C" & .Cells(.Rows.Count, 1).End(xlUp).Row) = Range("C2").Value 'Spalte C mit der Zeitangabe auffüllen
 End With
End Sub


Das kann dann in jeder beliebigen Datei ausgeführt werden, wenn die Tabellennamen angepasst wurden, und die Daten ungetrennt in den Zellen A1:A2 stehen.
Gruß Atilla
Top
#8
(06.05.2017, 07:43)RPP63 schrieb: Moin!
Mal eine Lösung mit Excel-Bordmitteln:
Nachdem Du per Text In Spalten die Situation in Deinem Screenshot geschaffen hast,
kommt folgende Formel in A3:
=WENN(INDEX($2:$2;1;ZEILE($A1)*3+SPALTE(A$1))=0;"";INDEX($2:$2;1;ZEILE($A1)*3+SPALTE(A$1)))
Diese ziehst Du bis Spalte C und soweit wie notwendig nach unten (in Deinem Beispiel bis mindestens Zeile 57).
Lasse den Bereich markiert, kopiere und füge als Wert ein.
Die Spalten D:FL kannst Du jetzt löschen.

Ich werde Dir später mal ein Makro schreiben, welches dem Import und das transponieren automatisch erledigt.

Gruß Ralf


Verrückt, ich habe bis jetzt immer erfolgreich nach dieser Methode gearbeitet, aber aktuell funktioniert es nicht mehr.

Wenn ich den Code in A3 kopiere und Enter drücke bleibt das Feld leer.


Angehängte Dateien
.xlsx   CSV File (5).xlsx (Größe: 12,33 KB / Downloads: 3)
Top
#9
fehler lag beim anwender Wink

hatte vergessen die daten vorab nach "text in spalten" zu sortieren.

läuft super!
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste