• DİKKAT

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

Makro ile çeşitli tarih formatlarını tek bir formata dönüştürmek

Katılım
29 Eylül 2017
Mesajlar
110
Excel Vers. ve Dili
professional_plus_2016 Türkçe
Selamlar;
Çeşitli firmalardan excel ortamında yüklü miktarlarda kantar tonaj rakamları gelmektedir. Her biri ayrı program kullandığından rapor çekerler iken (C) sütununda ki bozuk tarih örnekleri gibi değişik tarih formatı gelmektedir. Gelen tarih formatı her ne şekil olursa olsun, (I) sütunundaki format gibi olması gerekmektedir.
Kendi carimizde ektre çekerken tarih bozukluğu nedeniyle ürünlere ait bilgiler gelmediğinden hesabımız yanlış olmaktadır.
Tuş atayarak Makro yoluyla tarih formatını (I) sütunundaki gibi otomatik düzelttirmemiz mümkün mü? Mümkün ise bu konuda yardımlarınızı rica ederim. Teşekkür ederim... OKUROGLU3375
 

Ekli dosyalar

Makrosuz dosya....

.
 

Ekli dosyalar

  • D1.xlsx
    D1.xlsx
    12.1 KB · Görüntüleme: 11
Haluk bey alakanıza teşekkür ederim... Bunu ayrı bir sayfada kullanarak mı devam edeyim, yoksa makrolaştırma imkanımız var mı. Çünkü esas çalışma dosyamda araya sütun açmak gibi bir şansım yok... Eğer ki mümkünü var ise makro olursa tarihi yapıştırdıktan sonra düzelt tuşuna basmam yeterli olacaktır diye düşünüyorum. Tabiki imkanı varya. Yoksa bunu başka bir excel sayfasında kullanarak tarihi yapıştırıp, düzeltilmiş sütunu tekrar kopyalayıp esas sayfaya yapıştırmam gerekiyor. Yardımlarınız için yinede teşekkür ederim.. OKUROGLU3375
 
Aşağıdaki gibi deneyiniz.
Kod:
Sub tarihleri_düzelt()
[c10:c13].NumberFormat = "m/d/yyyy"
[c10:c13].Replace ",", "."
End Sub
 
Seyit bey tşk... arada slaş olanlarda aktif olmuyor... Bakma şansınız var ise rakamlar arasında hangi işaret olursa olsun örnek tarihe çevirttire bilirmiyiz. ÖRNEK: 15.04.2021
 
Dosyanızda denedim oldu, örnek dosya yükleyip bakalım.
 
Seyit bey; yeni örnek dosya ekledim... Uygulama öncesi - uygulama - olması gereken tarih örnekleri verilmiştir.
 

Ekli dosyalar

Deneyin lütfen
C++:
Sub tarihleri_düzelt()
Dim Rng As Range
Set Alan = [B6:B20]
For Each Rng In Alan
    Rng = Replace(Rng, ",", ".")
    Rng = Replace(Rng, " /", ".")
    Rng = Format(Rng, "d.mm.yyyy")
Next Rng
End Sub
 
Deneyin lütfen
C++:
Sub tarihleri_düzelt()
Dim Rng As Range
Set Alan = [B6:B20]
For Each Rng In Alan
    Rng = Replace(Rng, ",", ".")
    Rng = Replace(Rng, " /", ".")
    Rng = Format(Rng, "d.mm.yyyy")
Next Rng
End Sub

Alakanıza teşekkürler.
Esas dosya üzerinde uyguladığımda, düzeltmeler tamam. Ekli resimde de görüldüğü gibi tarihe dahil olmuyor maalesef
 

Ekli dosyalar

  • tarihe dahil olmak.jpg
    tarihe dahil olmak.jpg
    26.3 KB · Görüntüleme: 9
Verdğiniz ilk dosyada 4/9/10 nisan tarihleri var.
Resimde de dahil görülüyor
Ben sorununuzu anlamadım.
 
Verdğiniz ilk dosyada 4/9/10 nisan tarihleri var.
Resimde de dahil görülüyor
Ben sorununuzu anlamadım.

Sub tarihleri_düzelt()
Dim Rng As Range
Set Alan = [B6:B20]
For Each Rng In Alan
Rng = Replace(Rng, ",", ".")
Rng = Replace(Rng, " /", ".")
Rng = Format(Rng, "d.mm.yyyy")
Next Rng
End Sub

Yukarıdaki makroyu uyguladıktan sonra tarih biçimine dönüştürmede sıkıntı yok fakat. Excel ekli resimde de görüldüğü gibi Örneğin OCAK-ŞUBAT ayları gibi ayların içerine almayıp hariç tuttuğundan... yani tarih olarak görmediğinden dolayı rapor oluştururken dışarıda kalan tarihlerin raporunu getirmiyor.
 

Ekli dosyalar

  • tarihe dahil olmak-111.jpg
    tarihe dahil olmak-111.jpg
    34 KB · Görüntüleme: 3
  • tarihe dahil olmak.jpg
    tarihe dahil olmak.jpg
    26.3 KB · Görüntüleme: 3
Demek istediği, eğer tarih verisi olsaydı o tarihler de aynı üstteki gibi yıllarına göre filtrelenebilir şekilde olurdu. O veriler tarih değiller.
 
Böyle bir denermisiniz.
C++:
Sub tarihleri_düzelt()
Dim Rng As Range
Set Alan = [B6:B20] ' Alan kısmını kendinize göre uyarlayınız.
For Each Rng In Alan
    If Not IsDate(Rng) Then
    Rng = Replace(Rng, ",", ".")
    Rng = Replace(Rng, " /", ".")
    x1 = InStr(1, Rng, ".")
    x2 = InStr(x1 + 1, Rng, ".")
    myDay = Left(Rng, x1 - 1) * 1
    myMonth = Mid(Rng, x1 + 1, x2 - x1 - 1) * 1
    myYear = Right(Rng, Len(Rng) - x2) * 1
    Rng = DateSerial(myYear, myMonth, myDay)
    End If
    Rng = Format(Rng, "d.mm.yyyy")
Next Rng
End Sub
 
Böyle bir denermisiniz.
C++:
Sub tarihleri_düzelt()
Dim Rng As Range
Set Alan = [B6:B20] ' Alan kısmını kendinize göre uyarlayınız.
For Each Rng In Alan
    If Not IsDate(Rng) Then
    Rng = Replace(Rng, ",", ".")
    Rng = Replace(Rng, " /", ".")
    x1 = InStr(1, Rng, ".")
    x2 = InStr(x1 + 1, Rng, ".")
    myDay = Left(Rng, x1 - 1) * 1
    myMonth = Mid(Rng, x1 + 1, x2 - x1 - 1) * 1
    myYear = Right(Rng, Len(Rng) - x2) * 1
    Rng = DateSerial(myYear, myMonth, myDay)
    End If
    Rng = Format(Rng, "d.mm.yyyy")
Next Rng
End Sub


Makroyu uyguladıktan sonra incelediğimde yine aynı sonucu vermektedir. fakat örnek olarak sadece 10.04.2021 tarihlerini F2 + Enter dedikten sonra ilgili tarihin yılına ve ayına atmıştır. Yani tarihe dönüştürme formatında sıkıntı yok ama excel tarih olarak görmüyor. F2+Enter gibi bir olay mı eklenmesi lazım acaba... Tşk.
 

Ekli dosyalar

  • tarih denemesi-001.jpg
    tarih denemesi-001.jpg
    31.8 KB · Görüntüleme: 2
Asıl dosyanızı sadece tarihleri içerecek şekilde ekler misiniz?
Ben örnek dosyada sorun göremedim.
 
Asıl dosyanızı sadece tarihleri içerecek şekilde ekler misiniz?
Ben örnek dosyada sorun göremedim.

Dosya ya makro uygulamadan önce tarih filtresinde bakabilirmisiniz. Sonra makro uygulayıp yina bakın.. Makro uygulanan tarihler yıl-ay filtresi içerisine dahil olmuyor. Demek istedim.
 

Ekli dosyalar

Dosyanızda tarihlerin olduğu C sütunuzun formatını ya da tarihlerin olduğu aralığın formatını tarih yapın
C#:
Sub tarihleri_düzelt001()
Dim Rng As Range
Set Alan = [C6:C100] ' Alan kısmını kendinize göre uyarlayınız.
For Each Rng In Alan
    If Not IsDate(Rng) Then
    Rng = Replace(Rng, ",", ".")
    Rng = Replace(Rng, " /", ".")
    x1 = InStr(1, Rng, ".")
    x2 = InStr(x1 + 1, Rng, ".")
    myDay = Left(Rng, x1 - 1) * 1
    myMonth = Mid(Rng, x1 + 1, x2 - x1 - 1) * 1
    myYear = Right(Rng, Len(Rng) - x2) * 1
    Else
    myDay = Day(Rng)
    myMonth = Month(Rng)
    myYear = Year(Rng)
    End If
    Rng = DateSerial(myYear, myMonth, myDay)
Next Rng
End Sub
 
Alternatif;

.
 

Ekli dosyalar

Tekrar deneyin...

.
 
Geri
Üst