xls veya xlsx dosyalarını MT940 dosya biçimine nasıl dönüştürebiliriz

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
799
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
XLS veya XLSX dosyalarını MT940 dosya biçimine dönüştürmek için doğrudan bir yerleşik araç bulunmamakla birlikte, bu işlemi gerçekleştirmek için birkaç yöntem kullanılabilir. MT940, bankacılık işlemlerinde kullanılan standart bir SWIFT formatıdır ve genellikle finansal verilerin bankalar arasında aktarılması için kullanılır. Aşağıda bu dönüşümü yapmanın temel yollarını adım adım açıklıyorum:

1. Manuel Dönüşüm (Excel ve Metin Düzenleme)
Eğer veri setiniz küçükse veya özelleştirilmiş bir dönüşüm gerekiyorsa, manuel olarak dönüşüm yapabilirsiniz:

Adım 1: XLS/XLSX Dosyasını Açın Excel'de XLS veya XLSX dosyanızı açın. Dosyanın, MT940 formatına uygun veriler (örneğin, işlem tarihi, tutar, açıklama, hesap numarası vb.) içerdiğinden emin olun.

Adım 2: Verileri MT940 Formatına Göre Düzenleyin MT940 formatı, belirli bir yapıya sahiptir (örneğin, :20:, :25:, :61: gibi etiketlerle başlar). Excel'de verilerinizi bu formata uygun hale getirmek için sütunları düzenleyin. Örneğin:

İşlem tarihi için :61: etiketi.
Tutar için :60F: veya :62F: etiketleri.
Açıklama için :86: etiketi. Verilerinizi, her satırın MT940 etiketlerine uygun olacak şekilde metin olarak biçimlendirin.

Adım 3: Metin Dosyasına Aktarın Excel'deki verileri bir metin dosyasına (örneğin, .txt) kaydedin. Bunun için:
Dosya > Farklı Kaydet > Dosya Türü: Metin (Sekmeyle Ayrılmış) (*.txt) seçeneğini kullanın.

Alternatif olarak, verileri bir CSV dosyasına kaydedebilir ve sonra metin düzenleyiciyle (Notepad, VS Code gibi) MT940 formatına uygun hale getirebilirsiniz.

Adım 4: MT940 Formatına Uygun Hale Getirin Metin dosyasını bir metin düzenleyiciyle açın ve MT940 formatına uygun etiketleri ekleyin. Örneğin:

:20:REFERANSNO
:25:TR1234567890
:28C:001/01
:60F:C230101TRY1000,00
:61:2301010101D500,00NMSC//123456
:86:ÖDEME AÇIKLAMASI
:62F:C230101TRY500,00

MT940 formatının tam yapısını anlamak için SWIFT MT940 spesifikasyonlarını inceleyin.

Adım 5: Dosyayı Kaydedin Dosyayı .txt veya .mt940 uzantısıyla kaydedin. Bankalar genellikle bu dosyaları metin formatında kabul eder.

2. Özel Yazılımlar veya Dönüştürücüler Kullanma
Piyasada XLS/XLSX dosyalarını MT940 formatına dönüştürmek için özel yazılımlar veya çevrimiçi araçlar bulunabilir:

Bankacılık Yazılımları: Bazı bankalar veya finansal yazılımlar (örneğin, SAP, T24, veya özel muhasebe yazılımları), XLS/XLSX dosyalarını MT940 formatına dönüştürmek için modüller sunar. Bankanızın sağladığı araçları kontrol edin.

Üçüncü Taraf Araçlar: Örneğin, "MT940 Converter" gibi yazılımlar veya çevrimiçi hizmetler bu dönüşümü otomatikleştirebilir. Ancak, güvenilir bir kaynaktan indirildiğinden emin olun ve veri gizliliğine dikkat edin.

Örnek Araçlar:
GroupDocs.Conversion: XLSX dosyalarını farklı formatlara dönüştürmek için kullanılabilir, ancak MT940 özel bir format olduğu için ek özelleştirme gerekebilir.

Aspose.Cells: Excel dosyalarını çeşitli formatlara dönüştürmek için programatik bir çözüm sunar, ancak MT940 için özel bir şablon oluşturmanız gerekebilir.

Excel 'de VBA ile de dönüşüm yapılabilir:

Sub ConvertToMT940()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim mt940 As String

Set ws = ThisWorkbook.Sheets("Sheet1")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

' MT940 başlığı
mt940 = ":20:REFERANSNO" & vbCrLf & _
":25:TR1234567890" & vbCrLf & _
":28C:001/01" & vbCrLf & _
":60F:C230101TRY1000,00" & vbCrLf

' Verileri döngüyle oku
For i = 2 To lastRow
mt940 = mt940 & ":61:" & Format(ws.Cells(i, 1).Value, "yymmdd") & _
Format(ws.Cells(i, 1).Value, "yymmdd") & _
IIf(ws.Cells(i, 2).Value < 0, "D", "C") & _
Format(Abs(ws.Cells(i, 2).Value), "0.00") & "NMSC//123456" & vbCrLf & _
":86:" & ws.Cells(i, 3).Value & vbCrLf
Next i

' MT940 kapanışı
mt940 = mt940 & ":62F:C230101TRY500,00"

' Dosyaya kaydet
Open "C:\Users\Kullanıcı\Desktop\output.mt940" For Output As #1
Print #1, mt940
Close #1

MsgBox "Dönüşüm tamamlandı!"
End Sub

Açıklama: Bu kod, Excel 'deki bir sayfadan (örneğin, Tarih, Tutar, Açıklama sütunları) verileri alır ve MT940 formatında bir metin dosyası oluşturur.
 
Katılım
11 Temmuz 2024
Mesajlar
332
Excel Vers. ve Dili
Excel 2021 Türkçe
Örnek olması açısından bende şöyle bir makro bırakıyorum, yedek alıp düzenleme yaptıktan sonra deneyebilirsiniz;

Kod:
Option Explicit

Sub ExcelToMT940()
    Dim wsData As Worksheet
    Dim outputPath As String
    Dim fileNum As Integer
    Dim lastRow As Long, i As Long
    Dim hesapNo As String
    Dim referansNo As String
    Dim tarih As Date
    Dim formatliTarih As String
    Dim acilisBakiye As Double
    Dim kapanisBakiye As Double
    Dim islemTutari As Double
    Dim islemTipi As String
    Dim islemAciklamasi As String
    Dim ozetNo As String
    Dim paraKodu As String
    
    Set wsData = ActiveSheet
    
    If WorksheetFunction.CountA(wsData.UsedRange) = 0 Then
        MsgBox "Sayfada veri bulunamadı. Lütfen doğru sayfayı seçin.", vbExclamation
        Exit Sub
    End If
    
    outputPath = Application.GetSaveAsFilename( _
        InitialFileName:="MT940_Export.sta", _
        FileFilter:="MT940 Files (*.sta),*.sta", _
        Title:="MT940 Dosyasını Kaydedin")
    
    If outputPath = "False" Then Exit Sub ' Kullanıcı iptal ettiyse çık
    
    hesapNo = InputBox("Hesap numarasını girin:", "MT940 Export", "TR123456789012345678901234")
    paraKodu = InputBox("Para kodunu girin (örn: TRY, USD, EUR):", "MT940 Export", "TRY")
    referansNo = InputBox("Referans numarasını girin:", "MT940 Export", "HESAPOZET")
    ozetNo = InputBox("Özet numarasını girin:", "MT940 Export", "1")
    
    On Error Resume Next
    tarih = wsData.Range("A2").Value
    
    If IsDate(tarih) = False Then
        tarih = Date
    End If
    formatliTarih = Format(tarih, "yyMMdd")
    On Error GoTo 0
    
    acilisBakiye = 0
    On Error Resume Next
    kapanisBakiye = wsData.Cells(wsData.Rows.Count, "C").End(xlUp).Value
    If Err.Number <> 0 Then kapanisBakiye = 0
    On Error GoTo 0
    
    fileNum = FreeFile
    Open outputPath For Output As fileNum
    Print #fileNum, ":20:" & referansNo
    Print #fileNum, ":25:" & hesapNo
    Print #fileNum, ":28C:" & ozetNo
    Print #fileNum, ":60F:C" & formatliTarih & paraKodu & FormatBakiye(acilisBakiye)
    lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row
    
    For i = 2 To lastRow
        tarih = wsData.Cells(i, 1).Value
        If IsDate(tarih) Then
            formatliTarih = Format(tarih, "yyMMdd")
            islemTutari = wsData.Cells(i, 3).Value
            
            If islemTutari >= 0 Then
                islemTipi = "C"
            Else
                islemTipi = "D"
                islemTutari = Abs(islemTutari)
            End If
            
            islemAciklamasi = wsData.Cells(i, 4).Value
            If islemAciklamasi = "" Then islemAciklamasi = "ISLEM"
            Print #fileNum, ":61:" & formatliTarih & islemTipi & FormatBakiye(islemTutari) & "NTRFNCHG//" & Format(i, "000000")
            Print #fileNum, ":86:" & KarakterleriTemizle(islemAciklamasi)
        End If
    Next i
    Print #fileNum, ":62F:C" & formatliTarih & paraKodu & FormatBakiye(kapanisBakiye)
    Print #fileNum, "-"
    Close fileNum
    MsgBox "MT940 dosyası başarıyla oluşturuldu: " & outputPath, vbInformation
End Sub

Function FormatBakiye(bakiye As Double) As String
    Dim formatliBakiye As String
    bakiye = Abs(bakiye) ' Pozitif değer
    formatliBakiye = Format(bakiye, "000000000000,00")
    formatliBakiye = Replace(formatliBakiye, ",", "")
    formatliBakiye = Replace(formatliBakiye, ".", "")
    formatliBakiye = Right(String(15, "0") & formatliBakiye, 15)
    FormatBakiye = formatliBakiye
End Function

Function KarakterleriTemizle(metin As String) As String
    Dim temizMetin As String
    Dim i As Long
    Dim karakter As String
    
    If Len(metin) > 65 Then
        metin = Left(metin, 65)
    End If
    
    temizMetin = ""
    For i = 1 To Len(metin)
        karakter = Mid(metin, i, 1)

        If (Asc(karakter) >= 32 And Asc(karakter) <= 126) Or _
           (karakter Like "[ÇçĞğİıÖöŞşÜü]") Then
            temizMetin = temizMetin & karakter
        Else
            temizMetin = temizMetin & " " ' Uygunsuz karakterleri boşlukla değiştir
        End If
    Next i
    
    Do While InStr(temizMetin, "  ") > 0
        temizMetin = Replace(temizMetin, "  ", " ")
    Loop
    KarakterleriTemizle = Trim(temizMetin)
End Function
 
Üst