2016-08-29 5 views
2

Ich bin neu auf Makros in Excel und ich habe eine Menge Probleme beim Erstellen eines Makros, das sollte einfach sein, aber ich weiß nicht, wie man es programmiert. Ich muss eine Reihe von Zellenwerten kopieren (die erste Zelle A2 und die letzte Zelle Z2), aber es ist ein dynamischer Bereich, und ich muss die letzte ausgefüllte Zeile kennen, um den gesamten Bereich zu definieren. Dann muss ich die Werte mit Kommas verketten und diese Werte in einer CSV-Datei speichern.Kopieren Sie einen Bereich von Werten und fügen Sie sie durch Kommas verkettet

This is the origin template

This would be the resulting .csv

Wie kann ich dies tun? Ich denke, es ist nicht schwer, ich würde jede Hilfe sehr schätzen.

Vielen Dank

+1

Erfahren Sie, wie ein Blatt als CSV-Datei zu speichern. Es sollte nicht notwendig sein, die letzte Zeile zu finden und zu verketten, denke ich. – arcadeprecinct

Antwort

1

Dies funktioniert für mich: zuerst definieren Sie das Arbeitsblatt und die Daten erhalten. Dann fügen Sie sie Zeile für Zeile in eine CSV ein (mit de für jede Schleife).

In den Beispieldaten in Ihrer Frage haben Sie die Werte bereits durch Kommas getrennt, aber wenn Sie in einer anderen Sprache arbeiten, müssen Sie die Daten möglicherweise durch Semikola trennen. In diesem Fall sollten Sie den Satz ersetzen, den ich vor dem Drucksatz kommentiert habe, kommentieren.

Ich hoffe, es hilft Ihnen.

Sub datos_a_csv() 
Dim data, initial_row, final_row 

'defines worksheet 
Dim H_data As Worksheet 
Set H_data = ThisWorkbook.Worksheets("Hoja1") 

initial_row = 1 
final_row = H_data.Cells(initial_row, 1).End(xlDown).Row + 1 

'get the data 
data = H_data.Cells(initial_row, 1).Resize(final_row - initial_row, 1) 

'put the data in csv 
My_filenumber = FreeFile 

Open "C:\prueba\prueba.csv" For Append As #My_filenumber 
    For Each Row In data 
     'Row=replace(row,",",";") 
     Print #My_filenumber, Row 
    Next Row 
Close #My_filenumber 

End Sub 

Wenn Sie die Spalten, bis die Z-Spalte erhalten möchten, dann:

data = H_data.Cells(initial_row, 1).Resize(final_row - initial_row, 26) 

und dann sollten Sie verketten und speichern wie diese ‚ die Daten in csv setzen My_filenumber = Free öffnen "C: \ prueba \ prueba.csv" Für anfügen Als #My_filenumber

for i = lbound(data ,1) to ubound(data ,1) 
    row="" 
    for j = lbound(data ,1) to ubound(data ,1) 
     row = row + "," + data(i,j) 
    next j 
    Print #My_filenumber, Row 
next i 
Close #My_filenumber 
+0

Hallo Mann, vielen Dank für Ihre Zeit. Ich erhalte einen Fehler in dieser Zeile "row = row +", "+ data (i, j)", wenn es zum ersten Mal eine Zahl in einer Zelle findet. Das Format aller Zellen im Excel ist "Allgemein". Weißt du, ob ich den Datentyp ändern muss? Vielen Dank –

1

versuchen, diese

Sub main() 
    Worksheets("toCSV").Copy '<--| change "toCSV" to your actual sheet name. this will copy the specified worksheet into the only worksheet of a new workbook 
    With ActiveWorkbook '<--| refer to newly created workbook 
     .SaveAs fileName:="ToCSV", FileFormat:=xlCSV '<--| this will save the new workbook with the name "ToCSV" in CSV format in the "current folder" 
     .Close True 'close and save changes 
    End With 
End Sub 

siehe MSDN documentation für die weitere Anpassung der SaveAs() Methode

Verwandte Themen