String Degerleri Date tipine ceviren Makro

Katılım
2 Aralık 2008
Mesajlar
11
Excel Vers. ve Dili
2003
Arkadaslar merhaba,

Bir proje gelistiriyorum ve sunu ogrenmek istiyorum.
Yardım ederseniz cok mutlu olacagim, tesekkur ederim.

Excel sayfasindaki verileri farklı bir programdan elde edicem.
Programdan verileri almak istediğimde yaşadığım bir problem var.
Excel sayfamda Teslim Tarihi sütunum var.

Daha öncesinde bu Teslim Tarihine kullanıcılar inputbox ile değerleri string olarak kaydetti. Bu alınan string değerleri tip olarak tarih tipinde kaydedilmediği için excel sayfasındaki verileri programdan çağırırken bu TeslimTarihi alanındaki verileri doğal olarak string görüyor. Benim yapmak istediğim, mesela kullanıcının "12.09.2010" olarak girdiği string tarih değerini makro ile tip olarak tarih tipine dönüştürmek. Tarih tipine dönüştürdüğümde bu verileri çekerken program içerisinde sorun yaşamayacağım. Sütunu seçip hücreleri biçimlendir ile tarih olarak seçmeme rağmen değişmedi, verilerin ana tipleri yine string olarak görülüyor.

Excel'de fonksiyon varsa ve ya makro ile kod yazarak nasıl yapabilirim ?
Yardimlariniz ve ilginiz icin cok cok tesekkur ediyorum..
 

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
"12.09.2010"
a1 hücresinde ise
b1 hücresine yazar.
Kod:
range("B1").numberformat="dd.mm.yyyy"
range("B1").value=cdate(range("A1").value)
formül:
=tarih(yıl(A1);ay(A1);gün(A1))
 
Katılım
2 Aralık 2008
Mesajlar
11
Excel Vers. ve Dili
2003
Ustad asagidaki kodu yazdim fakat "Type missmatch hatası verdi";

Kod:
Sub VeriTipiniDegistir()

For i = 2 To 9334

Range("Z" & i).NumberFormat = "dd.mm.yyyy"
Range("Z" & i).Value = CDate(Range("X" & i).Value)


Next


End Sub
Kullanıcılar tarafından girilmiş olan değerler X sütununda iken yeni bir sütun olan Z sütununa tarih formatına kaydetmeye çalıştım fakat hatayı aldık :(
Neden böyle bir hata verdi acaba ?
 

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
Ustad asagidaki kodu yazdim fakat "Type missmatch hatası verdi";

Kod:
Sub VeriTipiniDegistir()

For i = 2 To 9334

Range("Z" & i).NumberFormat = "dd.mm.yyyy"
Range("Z" & i).Value = CDate(Range("X" & i).Value)


Next


End Sub
Kullanıcılar tarafından girilmiş olan değerler X sütununda iken yeni bir sütun olan Z sütununa tarih formatına kaydetmeye çalıştım fakat hatayı aldık :(
Neden böyle bir hata verdi acaba ?
belkide boş satırlar vardı arada , yada metin vardı.
bana dosyayı yollayın bakayım.:cool:
 

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
Dosyanız ektedir.:cool:
Kod:
Sub tarihecevir_59()
Dim sat As Long, hcr As Range
sat = Cells(65536, "A").End(xlUp).Row
If sat < 2 Then Exit Sub
Application.ScreenUpdating = False
For Each hcr In Range("B2:B" & sat)
    hcr.Value = CDate(hcr.Value)
Next
Application.ScreenUpdating = True
MsgBox "İşlem Bitti." & vbLf & "Coder : Evren GİZLEN" & vbLf & _
"Date : 07.05.2011" & vbLf & "email : evrengizlen@hotmail.com", vbOKOnly + _
vbInformation, "E V R E N"
End Sub
 

Ekli dosyalar

Katılım
2 Aralık 2008
Mesajlar
11
Excel Vers. ve Dili
2003
Ustad cok tesekkur ediyorum, Allah razi olsun..
Sanirim artik kullanacagim clementine programindan bu verileri tarih olarak cekebilicem..

Onceki yazdigimiz kodun neden calismadigi ve kisaca kodlardan bahseder misiniz ?
 
Katılım
2 Aralık 2008
Mesajlar
11
Excel Vers. ve Dili
2003
Yalniz dikkatimi ceken birsey var size gonderdigim dosyadaki veriler ile sizin gonderdiginiz veriler ile farklı. Sanırım A sütununu direkt B sütununa kopyaladınız. Size gönderdiğim dosyada 195. satiri incelerseniz farki gorursunuz, teslim tarihi sozlesme tarihinden gec olmalı..
 

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
Yalniz dikkatimi ceken birsey var size gonderdigim dosyadaki veriler ile sizin gonderdiginiz veriler ile farklı. Sanırım A sütununu direkt B sütununa kopyaladınız. Size gönderdiğim dosyada 195. satiri incelerseniz farki gorursunuz, teslim tarihi sozlesme tarihinden gec olmalı..
Evet tam okummaışım.
A sütununu b sütunna atıyordu.
Şimdi düzelttim.
Ancak sizin bahsettiğiniz hücrede yine hata veriyor.
Neden!!!:D
Hadi bilin bakalım?
Bulabilirseniz tebrikler.
Not program sorunsuz çalışıyor.
Öceki mesajımdan dosyayı indirebilirsiniz.:cool:
 
Katılım
2 Aralık 2008
Mesajlar
11
Excel Vers. ve Dili
2003
Ustad malesef yine ayni hatayı alıyorum..
Type missmatch diyor :???:

Karakter setinde problem var sanırım, kopya vermişssiniz zaten ISO 8859-9.

Calisiyor demissiniz indirdim fakat aynı hata :(
 

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
Ustad malesef yine ayni hatayı alıyorum..
Type missmatch diyor :???:

Karakter setinde problem var sanırım, kopya vermişssiniz zaten ISO 8859-9.

Calisiyor demissiniz indirdim fakat aynı hata :(
B195 hücresine kadar çalışıyor.
B195 hücresine gelinde tür uyuşmazlığı hatası veriyor.
B195 hücresini inceleyin bakalım neden diğer hücrelerde çalışıyorda B195 hücresine gelince tür uyuşmazlığı hatasını veriyor.:cool:
 
Katılım
2 Aralık 2008
Mesajlar
11
Excel Vers. ve Dili
2003
195. satirdaki tarih degeri sonradan makro ile degistirildi ve inputbux ile kullanıcıdan deger isteniyordu. Girilen deger de mesela "20.01.2011" seklinde idi. Yani o alan icin girilmesi gerekilen ve yazdigim kod su sekilde idi:

Kod:
teslimTarihi = InputBox(Range("S" & i).Value & " siparis Kodu icin TeslimTarihi= ")
Range("V" & i).Value = teslimTarihi
 

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
195. satirdaki tarih degeri sonradan makro ile degistirildi ve inputbux ile kullanıcıdan deger isteniyordu. Girilen deger de mesela "20.01.2011" seklinde idi. Yani o alan icin girilmesi gerekilen ve yazdigim kod su sekilde idi:

Kod:
teslimTarihi = InputBox(Range("S" & i).Value & " siparis Kodu icin TeslimTarihi= ")
Range("V" & i).Value = teslimTarihi
Ama siz 29.02.2010 şeklinde bir değer girdiniz inputboxa.
Peki inputboxa girilen değeri kontrol ettinizmi?hayır.
İşte o zaman böyle şeyler kaçınılmazdır.
veri girmek için sadece 1 satır kod tazmak yeterlidir.
Ama ya kontrolu için?
Kontolu içinde bazen 5 - 10 satır yazmak gerekir.,
Ben geçen günlerde bir arkadaşa buradan yardım ettim.
6-7 satır tutuyordu kod.
Aslında 1 satırı hücreye yazmak diğer satırlarıda kontrol etmek içindi değerleri.
O şahıs bana ne dedi dersiniz.
Yaa ben 1 satır kod istedim sen 6-7 satır kod yazmışsın.
Daha basit bir yolu yokmu dedi.
Bende döt ıslanmadan balık tutulmaz dedim.
Bunları yapman lazım.Aksi takdirde yanlış şeyleer olabilir dedim.
ayneen siizn şimdi bana yoladığınız dosyadaki gibi.
inputboxla veriyi alırken tarihmi değilmi diye kontrol etttinizmi?
Hayır.
Niye etmediniz?
bunu bir işletmede kullandınız diyelim,oradaki yapılan işlerde hata oluşmayacakmı şimdi?
Bakın bütün arkadaşlara sesleniyorum.
Olayın tammına hakim olmadan parça buçuk sağdan soldan alınan kodlarla bir işletme için yada ofis kod yazmayın.iyice kavrayın,içinize sinsin , ondan sonra yazın.
İlk başlarda denemeler yapın.yap boz gibi yani.
İnsan tabii ki bütün her şeyi bilemez ,işte o zmana takıldığınız yerde 1 satır yada 2 satır kod alın.zaten o zmana yardım alsanızda ne işe yaradağını anlayacaksınız.Aldığınız kodun.
Şimdi buradaki hata inpıtboxla alınan verinin kontrolu yapılmamış.
Eğer alınan veri tarişhmi değilmi diye kontrol yapılsaydı bu durum olmazdı.
2010 yılında şubat ayı 29 değil 28 çekiyor.
Dolayısı ile B195 satırdaki veri tarih değil.
Bilmem anlatabildimmi?
Gerçi dilimde tüy bitti ama olsun ben yine anlatacam konuyu sizlere.:cool:
 
Katılım
2 Aralık 2008
Mesajlar
11
Excel Vers. ve Dili
2003
Sizi anlıyorum hocam kesinlikle kontrol ettirmemiz gerekli, benim icin tecrübe oldu..

Bir isletme icin kod yaziyor olsam daha dikkatli olacağım. Bu projede asil amaç verileri excelden cekip spss clementine programında analiz yapmak idi, excel makro bilgim yeterli seviyede değil ve aklima getiremedim..

Sütundaki bazı hücreler boştu ve bu değerler gerektiğinden kendim elle girmek istedim. Isimi gorecek ufak bi kod ile inputbox kullanarak verileri hizli hizli girdim dikkat etmedim, dolayisi ile simdi de cezasını çekiyorum.

Sağlık olsun diyelim tecrübeyi yaşadık, hata yapa yapa zamandan olucaz belkide ama bu sekilde ogreniyoruz..

Hatalı yerlerdeki hucre tarihlerini duzeltip yoluma devam edeceğim artık...

Yardımlarınız ve değerli bilgileriniz için çok teşekkür ediyorum, kalın sağlıcakla..
 
Üst