DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
Altın Üyelik Hakkında Bilgi
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