• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

maaş disketi oluştururken ondalık problemi...

Katılım
22 Şubat 2008
Mesajlar
13
Excel Vers. ve Dili
Excel 2007 Türkçe
Merhaba,
Biliyorsunuz ülkemizde binlik ayıracı olarak nokta, ondalık ayıracı olarak virgül kullanılır.

1.151,87

gibi...

fakat bankalar maaş disketlerini (txt dosyalarını) amerikan sistemine göre isterler. yani ondalık ayraçını nokta olarak isterler.

1151.87 gibi...

ben excel'de vba kullanarak bir maaş txt dosyası oluşturma programı yaptım. fakat ben ne yaparsam yapayım visual basic, dosyayı oluştururken ondalık ayıracını denetim masası-->bölgesel ayarlar'daki ayarlardan alıyor. yani buradaki ayar Türkiye için virgül olarak ayarlı olduğu için txt dostasında parayı virgülle yazıyor.

txt'yi bankaların istediği şekilde, yani ondalık ayıracını nokta yazdırarak oluşturmak istersem bölgesel ayarlardaki ondalık ayıracını nokta yapıp, sonra programı çalıştırmam gerekiyor.

ben bölgesel ayarlara hiç dokunmadan, ayrıca excel'in "sistem ayırıcılarını kullan" checkbox'ıyla oynamadan, direkt kodlar içinde txt'yi oluştururken ondalık ayıracını nokta olarak yazdırmak istiyorum.

bunun sebebide hazırladığım programın son kullanıcı tarafından kullanılmasının gerekmesi. yani kullanıcı listeye paraları yazarken bildiği yollardan yazmalı, herhangi bir ayarla oynamak zorunda kalmamalı. program gerekli işlemi kendi içinde txt'yi oluştururken yapmalı.

bu işlemi vba'da yapabilir miyim?
 
Merhaba,

"Replace" fonksiyonunu kullanabilirsiniz. Olmazsa gerçek bilgiler içermeyen bir dosya ekleyin.

Bu arada bankamızla "." ve "," ayrımından dolayı sıkıntı yaşamıyoruz.
 
ondalık problemi

bunu denetim masasından bölgesel dil seçeneklerinden nokta yada virgül seçerek yapabilirsiniz.
 
gerçek bilgileri içermeyen örnek bir dosya ekleyin bakalım iş bankası ziraat bankası ve vakıflar bankasına ait formatı hatırlıyorum.iş bankası formatında bir değişiklik yapıldı herhalde
 
Selamlar,
hazırladığım dosyayı ekledim. örnek girdiğim kayıt vakıfbank içindir. "Disket Oluştur" butonuna tıkladıktan sonra Müessese açılır kutusundan "Genel Müdürlük"ü seçerseniz Vakıfbank gelecektir.

Yalnız tekrar belirteyim (yanlış anlaşılma var gibi): problemim, sadece parayı yazdırırken ondalık ayıracını program kodu ile nokta yapmak.

şu an zaten bölgesel ayarları değiştirerek çalıştırıyorum programı.

ayrıca bankaların disket formatlarını oluşturmakta da bir problemim yok.

şu an Ziraat Bankasının formatı değişti ama programı düzeltmedim henüz.

formatı oluşturmakta sıkıntım yok, sadece paradaki ondalık ayıracını vba kodu ile nokta yapabilir miyim sorusuna cevap arıyorum.

Teşekkürler...
 

Ekli dosyalar

Son düzenleme:
dosyayı göremedim
 
aşağıda cevaplandı
 
Son düzenleme:
aşağıya yeniden çıkartılmıştır.
 
Son düzenleme:
tamam hallettim kodu user formun içine 2 adet OptionButton düğmesi koydum bunlar nakta ve virgülle ilgili olanlarıdır
 

Ekli dosyalar

birde benim disket formatıma bakınız bütün bankaların hepsini yapıyor ancak tablodaki krterleri girmesi gerekiyor ben bunu winifredin ziraat bankasına uyarlı yaptım
 

Ekli dosyalar

tamam hallettim kodu user formun içine 2 adet OptionButton düğmesi koydum bunlar nakta ve virgülle ilgili olanlarıdır

çok teşekkür ederim. benim asıl merak ettiğim direkt tek komutla biçimlendirme yapılıp yapılamayacağı idi.

demekki düşündüğüm gibi kodlarla uğraşarak yapılabiliyor sadece.

bunun diğer bir yöntemi de bölgesel ayarlardaki ondalık ayırıcıyı nokta, binlik ayırıcıyı virgül yapıp daha sonra, excel seçeneklerinden "sistem ayırıcılarını kullan" onay kutusunu temizleyip, buradaki ondalık ayırıcıyı virgül, binlik ayırıcıyı nokta yapmak.

bu şekilde yapılırsa sadece excel'de istenilen görünüm alınabilir. diğer programlar bölgesel ayarları kullanacağı için amerikan sisteminde görüntüler sayıları.
 
Ondalık ayraçını . (nokta) yapmak için aşağıda tasarladığım kullanıcı tanımlı fonksiyonu kullanabilirsiniz.

Kod:
Function FORMATCELL(Rakam As Variant, Kurus As Boolean, Ondalik As Boolean, Dijit As Byte) As String
Dim a, b, c, d, e, f, g, h, i, j, k As Variant
On Error Resume Next
'If Rakam = "" Or Kurus = "" Or Dijit = "" Or Ondalik = "" Then ActiveCell.Value = "": Exit Function
If Kurus = True Then
a = Len(Rakam)
If Ondalik = True Then
b = InStr(Rakam, ",")
Else
b = InStr(Rakam, ".")
End If
If b = 0 Then
c = a + 1
Else
c = b
End If
If (a - c) < 1 Then
d = 0
Else
d = a - c
End If
e = Left(Rakam, c - 1)
If d = 0 Then
f = "00"
Else
f = Right(Rakam, d)
End If
If d = 1 Then
g = f & "0"
ElseIf d = 0 Then
g = "00"
Else
g = f
End If
If Ondalik = True Then
h = e & "." & g
Else
h = e & "," & g
End If
Else
h = Rakam
End If
'********************************
If Dijit > Len(h) Then
k = WorksheetFunction.Rept(0, Dijit - Len(h)) & h
Else
k = h
End If
'********************************
FORMATCELL = k
End Function

Bu fonksiyon ile ondalık ayracını ,(virgül) veya .(nokta) yapabilirsiniz.
Ayrıca belirli bir uzunluğa tamamlamak için sayının önüne istediğini kadar 0 ekleyebilirsiniz.

Örneğin 155,50 sayısını 0000155.50 yapmak için =FORMATCELL(155,50;DOĞRU;DOĞRU;10) olarak yazabilirsiniz.

Makroda kullanmak içinse;

Kod:
Sub TXTKaydet()
for i = 1 To 10
veri = FORMATCELL(Cells(i,"a").Value,True,True,10)
Next i
End Sub
....

olarak yazabilirsiniz.
 
Geri
Üst