csv dosylarını otomatik xlsx şekline çevirebilirmiyiz.

Katılım
20 Ocak 2023
Mesajlar
53
Excel Vers. ve Dili
Başlangıç düzeyinde office 2007
Bir klasorde 100 civarı csv dosyası var. Dosya içeriliğindeki bilgiler (;) işareti ile değil sutunlarla ayrılmıştır.
Şimdiden teşekkür ederim yardımlarınız için.
 
Katılım
6 Kasım 2004
Mesajlar
225
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
Altın Üyelik Bitiş Tarihi
25-07-2023
YEDEK ALMAYI UNUTMAYIN
Evet, bir klasördeki tüm .csv dosyalarını otomatik olarak .xlsx formatına çevirmek mümkündür. Bunun için VBA kullanarak bir makro oluşturabiliriz. Her .csv dosyasını açar, verilerini .xlsx formatında kaydeder ve tüm dosyalar için bu işlemi tekrarlarız.

Aşağıda bu işlemi yapacak bir VBA makro örneği bulabilirsin:

Kod:
Sub ConvertCSVtoXLSX()
    Dim csvFolder As String
    Dim csvFile As String
    Dim wb As Workbook
    Dim newFileName As String
    
    ' CSV dosyalarının bulunduğu klasörün yolunu belirtin
    csvFolder = "C:\DosyaYolu\"  ' <-- Buraya klasör yolunu yazın

    ' CSV dosyalarının listesini al
    csvFile = Dir(csvFolder & "*.csv")
    
    ' Tüm CSV dosyalarını işle
    Do While csvFile <> ""
        ' CSV dosyasını aç
        Set wb = Workbooks.Open(Filename:=csvFolder & csvFile, Format:=2) ' Format:=2 ile dosyanın ; ile ayrılmadığından emin olunuyor
        
        ' Yeni dosya adını belirle
        newFileName = Replace(csvFile, ".csv", ".xlsx")
        
        ' Aynı konuma .xlsx olarak kaydet
        wb.SaveAs Filename:=csvFolder & newFileName, FileFormat:=xlOpenXMLWorkbook

        ' Çalışma kitabını kapat
        wb.Close False
        
        ' Sonraki CSV dosyasını al
        csvFile = Dir
    Loop
    
    MsgBox "Tüm CSV dosyaları XLSX formatına çevrildi!"
End Sub
Nasıl Kullanılır:
  1. Excel'i aç ve Alt + F11 tuşlarına basarak VBA düzenleyicisini aç.
  2. Insert > Module menüsünden yeni bir modül ekle.
  3. Yukarıdaki kodu bu modüle yapıştır.
  4. csvFolder = "C:\DosyaYolu\" kısmındaki dosya yolunu, CSV dosyalarının bulunduğu klasör yoluyla değiştir.
  5. F5 tuşuna basarak makroyu çalıştır.
Bu makro, belirttiğin klasördeki tüm .csv dosyalarını .xlsx formatına dönüştürecektir.
 
Katılım
20 Ocak 2023
Mesajlar
53
Excel Vers. ve Dili
Başlangıç düzeyinde office 2007
YEDEK ALMAYI UNUTMAYIN
Evet, bir klasördeki tüm .csv dosyalarını otomatik olarak .xlsx formatına çevirmek mümkündür. Bunun için VBA kullanarak bir makro oluşturabiliriz. Her .csv dosyasını açar, verilerini .xlsx formatında kaydeder ve tüm dosyalar için bu işlemi tekrarlarız.

Aşağıda bu işlemi yapacak bir VBA makro örneği bulabilirsin:

Kod:
Sub ConvertCSVtoXLSX()
    Dim csvFolder As String
    Dim csvFile As String
    Dim wb As Workbook
    Dim newFileName As String
   
    ' CSV dosyalarının bulunduğu klasörün yolunu belirtin
    csvFolder = "C:\DosyaYolu\"  ' <-- Buraya klasör yolunu yazın

    ' CSV dosyalarının listesini al
    csvFile = Dir(csvFolder & "*.csv")
   
    ' Tüm CSV dosyalarını işle
    Do While csvFile <> ""
        ' CSV dosyasını aç
        Set wb = Workbooks.Open(Filename:=csvFolder & csvFile, Format:=2) ' Format:=2 ile dosyanın ; ile ayrılmadığından emin olunuyor
       
        ' Yeni dosya adını belirle
        newFileName = Replace(csvFile, ".csv", ".xlsx")
       
        ' Aynı konuma .xlsx olarak kaydet
        wb.SaveAs Filename:=csvFolder & newFileName, FileFormat:=xlOpenXMLWorkbook

        ' Çalışma kitabını kapat
        wb.Close False
       
        ' Sonraki CSV dosyasını al
        csvFile = Dir
    Loop
   
    MsgBox "Tüm CSV dosyaları XLSX formatına çevrildi!"
End Sub
Nasıl Kullanılır:
  1. Excel'i aç ve Alt + F11 tuşlarına basarak VBA düzenleyicisini aç.
  2. Insert > Module menüsünden yeni bir modül ekle.
  3. Yukarıdaki kodu bu modüle yapıştır.
  4. csvFolder = "C:\DosyaYolu\" kısmındaki dosya yolunu, CSV dosyalarının bulunduğu klasör yoluyla değiştir.
  5. F5 tuşuna basarak makroyu çalıştır.
Bu makro, belirttiğin klasördeki tüm .csv dosyalarını .xlsx formatına dönüştürecektir.
Abi harikasınız, çok işime yarayacak birşeydi.
Ama
([ baştaki CODE]Sub ConvertCSVtoXLSX() ve sondaki [/CODE] yazılı yeri kopyalamadım

f5basınca macro name çıktı kaydettim q diye run yaptım
compile error:
expected: expression
diye bir yazı çıktı
 
Katılım
6 Kasım 2004
Mesajlar
225
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
Altın Üyelik Bitiş Tarihi
25-07-2023
"Expected: expression" hatası genellikle bir Excel VBA kodunda yanlış ya da eksik bir ifade kullanıldığında oluşur. Kodunuzun tamamını buraya yazarsanız eksik yeri tespit etmeye çalışalım.
 
Katılım
20 Ocak 2023
Mesajlar
53
Excel Vers. ve Dili
Başlangıç düzeyinde office 2007
"Expected: expression" hatası genellikle bir Excel VBA kodunda yanlış ya da eksik bir ifade kullanıldığında oluşur. Kodunuzun tamamını buraya yazarsanız eksik yeri tespit etmeye çalışalım.
Günaydın, (dosya kaydettim diyor ama kaydetmiyor)(sebebi dosyanın sutunlarla olması olabilirmi bilmiyorum)
Borsa ile ilgili bir analiz yapmam gerekiyor.
Bunun içinde bir klasorde bulunan(veri aldığımız program bunu csv olarak kaydetmekte)
400 adet bu şekilde olan dosyayı birleştirmem gereklidir.
Birleştirirken dosya sayfa isminide bir sutuna eklemem gerekli
(dosyalardaki sutunlardaki veriler aynıdır, başlık yoktur.)
Her dosyadaki sayfaismi farklıdır.
Csv olarak kaydedilen dosya (,) işareti ile ayrılmamıştır, sutunlarla ayrılmıştır.(resmi aşağıdadır.)


*******************************************
Sub ConvertCSVtoXLSX()
Dim csvFolder As String
Dim csvFile As String
Dim wb As Workbook
Dim newFileName As String

' CSV dosyalarının bulunduğu klasörün yolunu belirtin
csvFolder = "C:\Users\muhasebe\Desktop\Deneme" ' <-- Buraya klasör yolunu yazın

' CSV dosyalarının listesini al
csvFile = Dir(csvFolder & "*.csv")

' Tüm CSV dosyalarını işle
Do While csvFile <> ""
' CSV dosyasını aç
Set wb = Workbooks.Open(Filename:=csvFolder & csvFile, Format:=2) ' Format:=2 ile dosyanın ; ile ayrılmadığından emin olunuyor

' Yeni dosya adını belirle
newFileName = Replace(csvFile, ".csv", ".xlsx")

' Aynı konuma .xlsx olarak kaydet
wb.SaveAs Filename:=csvFolder & newFileName, FileFormat:=xlOpenXMLWorkbook

' Çalışma kitabını kapat
wb.Close False

' Sonraki CSV dosyasını al
csvFile = Dir
Loop

MsgBox "Tüm CSV dosyaları XLSX formatına çevrildi!"
End Sub
****************************************************
 
Katılım
20 Ocak 2023
Mesajlar
53
Excel Vers. ve Dili
Başlangıç düzeyinde office 2007
Biraz c+ bilgim var. çok aramışlığım var boyle 1 karakteri))

Üstad siz daha iyi bilirsiniz. İlk resimde sutunlu 2.resimde ; oluyor
sutunlu olan csv.yi(resim1) sutunsuz tek sutunda (resim2) çeviririyor.
Sanki csv.yi orjinal haline getiriyor. dosya uzantısı gene csv kalıyor(


 
Katılım
6 Kasım 2004
Mesajlar
225
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
Altın Üyelik Bitiş Tarihi
25-07-2023
Merhaba,
Dener misiniz.
Kod:
Sub ConvertCSVtoXLSX()
    Dim csvFolder As String
    Dim csvFile As String
    Dim wb As Workbook
    Dim newFileName As String

    ' CSV dosyalarının bulunduğu klasörün yolunu belirtin
    csvFolder = "C:\Users\muhasebe\Desktop\Deneme\" ' <-- Buraya klasör yolunu yazın, sonuna \ eklendi

    ' CSV dosyalarının listesini al
    csvFile = Dir(csvFolder & "*.csv")

    ' Tüm CSV dosyalarını işle
    Do While csvFile <> ""
        ' CSV dosyasını aç
        Set wb = Workbooks.Open(Filename:=csvFolder & csvFile, Format:=1) ' Format:=1 ile dosyanın sütunlarla ayrıldığından emin olunuyor

        ' Yeni dosya adını belirle
        newFileName = Replace(csvFile, ".csv", ".xlsx")

        ' Aynı konuma .xlsx olarak kaydet
        wb.SaveAs Filename:=csvFolder & newFileName, FileFormat:=xlOpenXMLWorkbook

        ' Çalışma kitabını kapat
        wb.Close False

        ' Sonraki CSV dosyasını al
        csvFile = Dir
    Loop

    MsgBox "Tüm CSV dosyaları XLSX formatına çevrildi!"
End Sub
 
Katılım
20 Ocak 2023
Mesajlar
53
Excel Vers. ve Dili
Başlangıç düzeyinde office 2007


şöyle bir çözüm buldum. xls dosyası yapıyor. (hızlı bir şekilde). Bu forumdan. yalnız bundada dosyaları birleştir diyince(xls için)
sayfaismini birleştirilen dosyada bir sutuna aatamıyorum.
 
Katılım
20 Ocak 2023
Mesajlar
53
Excel Vers. ve Dili
Başlangıç düzeyinde office 2007
Merhaba,
Dener misiniz.
Kod:
Sub ConvertCSVtoXLSX()
    Dim csvFolder As String
    Dim csvFile As String
    Dim wb As Workbook
    Dim newFileName As String

    ' CSV dosyalarının bulunduğu klasörün yolunu belirtin
    csvFolder = "C:\Users\muhasebe\Desktop\Deneme\" ' <-- Buraya klasör yolunu yazın, sonuna \ eklendi

    ' CSV dosyalarının listesini al
    csvFile = Dir(csvFolder & "*.csv")

    ' Tüm CSV dosyalarını işle
    Do While csvFile <> ""
        ' CSV dosyasını aç
        Set wb = Workbooks.Open(Filename:=csvFolder & csvFile, Format:=1) ' Format:=1 ile dosyanın sütunlarla ayrıldığından emin olunuyor

        ' Yeni dosya adını belirle
        newFileName = Replace(csvFile, ".csv", ".xlsx")

        ' Aynı konuma .xlsx olarak kaydet
        wb.SaveAs Filename:=csvFolder & newFileName, FileFormat:=xlOpenXMLWorkbook

        ' Çalışma kitabını kapat
        wb.Close False

        ' Sonraki CSV dosyasını al
        csvFile = Dir
    Loop

    MsgBox "Tüm CSV dosyaları XLSX formatına çevrildi!"
End Sub
Abi aynı buda dosyaları üst cevaptaki gibi orjinal csv dosyasına çevirmekte. ve malesef her dosya için onay istiyor. 400 dosya için mümkün değil.
 
Katılım
20 Ocak 2023
Mesajlar
53
Excel Vers. ve Dili
Başlangıç düzeyinde office 2007
Katılım
2 Temmuz 2014
Mesajlar
135
Excel Vers. ve Dili
2021 Türkçe, 64bit
bütün CSV verileri tek bir xlsx dosyasında mı birleştirilecek?
 
Katılım
20 Ocak 2023
Mesajlar
53
Excel Vers. ve Dili
Başlangıç düzeyinde office 2007
Evet abi,
Yalnız birleştirirken (dosya adı ile sayfa adı aynıdır) bunlardan birini bir sutuna eklemem lazım. Hangi sutun olduğu önemli değil.
 
Katılım
6 Kasım 2004
Mesajlar
225
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
Altın Üyelik Bitiş Tarihi
25-07-2023
Bu sefer oldu galiba. Denedim bende çalıştı.
Kod:
Sub CombineCSVFilesToSeparateColumnsWithFileName()
    Dim folderPath As String
    Dim csvFile As String
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim fileName As String
    Dim newWorkbook As Workbook
    Dim saveFilePath As String
    Dim csvData As String
    Dim lineData As Variant
    Dim i As Long
    
    ' Klasör yolunu tanımlayın
    folderPath = "C:\Users\muhasebe\Desktop\Deneme\"
    
    ' Yeni bir çalışma kitabı oluştur
    Set newWorkbook = Workbooks.Add
    Set ws = newWorkbook.Sheets(1)
    ws.Cells.Clear ' Önceki verileri temizleyin
    
    ' Klasördeki ilk CSV dosyasını al
    csvFile = Dir(folderPath & "*.csv")
    
    Do While csvFile <> ""
        ' Dosyayı aç
        Open folderPath & csvFile For Input As #1
        
        ' Dosya içeriğini oku
        Do While Not EOF(1)
            Line Input #1, csvData
            
            ' Satırı ayır ve hücrelere yaz
            lineData = Split(csvData, ";") ' CSV'deki ayırıcıyı ";" olarak ayarlayın
            
            ' Son boş satırı bul
            lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
            
            ' Verileri ayrı hücrelere yaz
            For i = LBound(lineData) To UBound(lineData)
                ws.Cells(lastRow, i + 1).Value = Trim(lineData(i)) ' Verileri yazarken boşlukları temizle
            Next i
            
            ' Dosya adını tüm hücrelere yaz
            For i = 1 To UBound(lineData) + 1
                ws.Cells(lastRow, UBound(lineData) + 2).Value = Left(csvFile, InStrRev(csvFile, ".") - 1) ' Dosya adını uzantı olmadan al
            Next i
            
        Loop
        
        ' Dosyayı kapat
        Close #1
        
        ' Sonraki dosyayı al
        csvFile = Dir
    Loop
    
    ' Birleştirilen dosyanın kaydedileceği dosya yolunu belirleyin
    saveFilePath = folderPath & "Birlesmis_Dosya.xlsx"
    
    ' Yeni çalışma kitabını kaydet
    newWorkbook.SaveAs Filename:=saveFilePath, FileFormat:=xlOpenXMLWorkbook
    newWorkbook.Close
    
    MsgBox "CSV dosyaları birleştirildi ve '" & saveFilePath & "' olarak kaydedildi!"
End Sub
 
Katılım
20 Ocak 2023
Mesajlar
53
Excel Vers. ve Dili
Başlangıç düzeyinde office 2007
Abi Mükemmelsiniz.
Ayağınıza taş değmesin. (Tüm ilgilenenler içindir, temennim)
Borsayla ilgili bir sıkıntınız-danışacağınız olursa yardımcı olabilirim. Burada tüm cevap verip ilgilenenler için.


birde abi bunu hafızaya alabilirmiyim. Her seferinde bu kodu yüklemem gerekmiyordur muhtemelen
 
Katılım
6 Kasım 2004
Mesajlar
225
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
Altın Üyelik Bitiş Tarihi
25-07-2023
Rica ederim.
Dosyayı XLSM olarak kaydedip kullanabilirsiniz. Ana ekrana buton ekleyip makroyu oradan çalıştırabilirsin.
 
Katılım
2 Temmuz 2014
Mesajlar
135
Excel Vers. ve Dili
2021 Türkçe, 64bit
@tugkan hocamın izniyle kodunda ufak bir değişiklik yaptım, bu düzenlemeyle dosya adı 3. sütuna ekleniyor

Kod:
Sub CombineCSVFilesToSeparateColumnsWithFileName()
    Dim folderPath As String
    Dim csvFile As String
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim fileName As String
    Dim newWorkbook As Workbook
    Dim saveFilePath As String
    Dim csvData As String
    Dim lineData As Variant
    Dim i As Long
    
    ' Klasör yolunu tanımlayın
    folderPath = ThisWorkbook.Path & "\"
    
    ' Yeni bir çalışma kitabı oluştur
    Set newWorkbook = Workbooks.Add
    Set ws = newWorkbook.Sheets(1)
    ws.Cells.Clear ' Önceki verileri temizleyin
    
    ' Klasördeki ilk CSV dosyasını al
    csvFile = Dir(folderPath & "*.csv")
    
    Do While csvFile <> ""
        ' Dosyayı aç
        Open folderPath & csvFile For Input As #1
        xVeri = Left(csvFile, InStrRev(csvFile, ".") - 1) 'dosya adını al
        
        ' Dosya içeriğini oku
        Do While Not EOF(1)
            Line Input #1, csvData
            xSemiCol = InStr(InStr(csvData, ";") + 1, csvData, ";") '<== 2. ";" ayracın yeri bulunur
            ' Satırı ayır ve hücrelere yaz
            csvData = Left(csvData, xSemiCol) & xVeri & Mid(csvData, xSemiCol) '<== 3.sütuna dosya adı eklenir
            lineData = Split(csvData, ";") ' CSV'deki ayırıcıyı ";" olarak ayarlayın
            
            ' Son boş satırı bul
            lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
            
            ' Verileri ayrı hücrelere yaz
            For i = LBound(lineData) To UBound(lineData)
                ws.Cells(lastRow, i + 1).Value = Trim(lineData(i)) ' Verileri yazarken boşlukları temizle
            Next i
                        
        Loop
        
        ' Dosyayı kapat
        Close #1
        
        ' Sonraki dosyayı al
        csvFile = Dir
    Loop
    
    ' Birleştirilen dosyanın kaydedileceği dosya yolunu belirleyin
    saveFilePath = folderPath & "Birlesmis_Dosya.xlsx"
    
    ' Yeni çalışma kitabını kaydet
    newWorkbook.SaveAs fileName:=saveFilePath, FileFormat:=xlOpenXMLWorkbook
    newWorkbook.Close
    
    MsgBox "CSV dosyaları birleştirildi ve '" & saveFilePath & "' olarak kaydedildi!"
End Sub
 
Katılım
2 Temmuz 2014
Mesajlar
135
Excel Vers. ve Dili
2021 Türkçe, 64bit
eğer sütun sayıları tüm CSV dosyalarında AYNI ise dizi ile belki daha hızlanması sağlanabilir
 
Üst