Özellik ikonu

Timer

İndirme izni yok

Genel Bakış

Timer (Timer function), VBA'da gece yarısı 00:00'dan bu yana geçen saniye sayısını, saniyenin kesirleriyle birlikte Single türünde döndüren işlevdir. Bir makronun ya da döngünün ne kadar sürdüğünü ölçmek, kısa süreli zaman farklarını hesaplamak ve Randomize için tohum değeri üretmek amacıyla kullanılır.

Söz dizimi​

Timer işlevi bağımsız değişken almaz; parantez de gerekmez:
VBA
degisken = Timer
İşlev çağrıldığı anda sistem saatine bakar ve değeri hesaplar.
  • Bağımsız değişken: yoktur. Yalnızca Timer yazmanız yeterlidir.
  • Dönüş türü: Single. Tam sayı kısmı saniyeyi, ondalık kısmı saniyenin kesirlerini gösterir.
  • Değer aralığı: 0 ile 86400 arasındadır. Gün içinde en fazla 86399,99 civarına ulaşır, gece yarısında yeniden sıfırlanır.

Dönüş değerini yorumlama​

Saat 00:00:00 iken Timer değeri 0'dır. Öğlen 12:00'de 43200, akşam 18:00'de 64800 olur. Bir günde 86400 saniye bulunduğundan, değeri 86400'e bölerek Excel'in zaman serisine çevirebilirsiniz. Böylece sonucu hücreye yazıp Giriş > Sayı > Sayı Biçimi (Home > Number > Number Format) ya da NumberFormat özelliği ile saat biçiminde gösterebilirsiniz.
  • Timer / 86400: günün hangi kısmının geçtiğini verir; hücreye yazıp hh:mm:ss biçimi uygularsanız saat olarak görünür.
  • Int(Timer / 60): gece yarısından bu yana geçen tam dakikayı verir.
  • Timer - baslangic: iki ölçüm arasındaki süreyi saniye cinsinden verir.

Gece yarısı ve duyarlık​

Timer her gece yarısı sıfırlandığı için, ölçüm 00:00'ı aşarsa bitiş değeri başlangıçtan küçük çıkar ve fark negatif olur. Bu durumu yakalamak için fark negatifse 86400 ekleyin. Ayrıca Single türünün duyarlığı sınırlıdır; gün sonuna doğru değerler büyüdükçe çok küçük kesirler ölçülemeyebilir. Windows'ta çözünürlük yaklaşık saniyenin yüzde biri düzeyindedir; çok kısa işlemler 0 saniye olarak görünebilir. Bu yüzden ölçümü birkaç yüz ya da bin tekrar üzerinden yapmak daha güvenilirdir.

1. Timer değerini saniye, saat ve dakika olarak yazma​

Bu örnekte makro, çalıştığı andaki Timer değerini üç farklı biçimde B sütununa yazar. Kodu Alt+F11 ile açtığınız VBA düzenleyicisinde Ekle > Modül (Insert > Module) ile eklediğiniz standart modüle yapıştırın.
VBA 16 satır
Option Explicit

Sub TimerDegeriniYaz()
    Dim sn As Single
    sn = Timer

    ' Gece yarisindan beri gecen saniye
    Range("B2").Value = sn

    ' Ayni degeri gunun kesri olarak yazip saat bicimi uygula
    Range("B3").Value = sn / 86400
    Range("B3").NumberFormat = "hh:mm:ss"

    ' Gece yarisindan beri gecen tam dakika
    Range("B4").Value = Int(sn / 60)
End Sub
Timer
Formülünü incelemek için bir hücre seçin.
AB
1AçıklamaSonuç
2Gece yarısından beri geçen saniye46840,94531
3Saat olarak (ss:dd:ss)13:00:41
4Geçen tam dakika780
Timer DeğeriExcelDepo v1.0.0
B2 hücresine yazılan 46840,94531 değeri, gece yarısından bu yana geçen saniyedir. B3 hücresindeki 13:00:41 aynı süreyi saat biçiminde gösterir, yani makronun çalıştığı andaki saat bilgisine karşılık gelir. B4 hücresindeki 780 ise geçen tam dakika sayısıdır. Makroyu her çalıştırdığınızda değerler o anın saatine göre değişir.

2. Bir döngünün süresini ölçme​

Bu örnekte makro, tutar hesaplayan döngüden önce ve sonra Timer değerini alır ve farkı E2 hücresine yazar. Kodu standart bir modüle yapıştırın.
VBA 17 satır
Option Explicit

Sub TutarHesapla()
    Dim baslangic As Single
    Dim i As Long

    ' Olcumu baslat
    baslangic = Timer

    ' Tutar = Adet x Birim Fiyat
    For i = 2 To 7
        Cells(i, 4).Value = Cells(i, 2).Value * Cells(i, 3).Value
    Next i

    ' Gecen sureyi saniye olarak yaz (3 basamak)
    Cells(2, 5).Value = Round(Timer - baslangic, 3)
End Sub
Timer
Formülünü incelemek için bir hücre seçin.
ABCDE
1ÜrünAdetBirim FiyatTutarSüre (sn)
2Klavye12450,005.400,000,004
3Fare25180,004.500,00
4Monitör64.200,0025.200,00
5Kulaklık18650,0011.700,00
6Yazıcı43.100,0012.400,00
7Web Kamerası10520,005.200,00
Süre ÖlçümüExcelDepo v1.0.0
Makro D sütununa her ürünün tutarını yazar; örneğin ilk ürünün tutarı 5.400,00 olur. E2 hücresindeki 0,004 değeri, döngünün saniye cinsinden süresidir. Bu kadar küçük bir işlem çok kısa süreceği için sonuç 0'a çok yakın çıkabilir. Gerçek ölçümlerde döngüyü binlerce satır üzerinde çalıştırmak daha anlamlı bir sonuç verir.

3. Gece yarısını aşan ölçümlerde süre hesabı​

Bu örnekte başlangıç ve bitiş değerleri, Timer'ın verebileceği saniye değerleri olarak B ve C sütunlarına yazılmıştır. SureHesapla işlevi bitiş değeri başlangıçtan küçükse ölçümün gece yarısını aştığını kabul edip 86400 ekler. Sub ve işlevin tamamını standart bir modüle yapıştırın. Gerçek bir ölçümde değerleri baslangic = Timer ve bitis = Timer ile alırsınız.
VBA 18 satır
Option Explicit

' Iki Timer degeri arasindaki sureyi saniye olarak verir
Function SureHesapla(ByVal basla As Single, ByVal bitis As Single) As Single
    If bitis >= basla Then
        SureHesapla = bitis - basla
    Else
        ' Olcum gece yarisini asmis: bir gunun saniyesini ekle
        SureHesapla = bitis + 86400 - basla
    End If
End Function

Sub SureleriYaz()
    Dim i As Long
    For i = 2 To 5
        Cells(i, 4).Value = SureHesapla(Cells(i, 2).Value, Cells(i, 3).Value)
    Next i
End Sub
Timer
Formülünü incelemek için bir hücre seçin.
ABCD
1GörevBaşlangıç (sn)Bitiş (sn)Süre (sn)
2Yedekleme863802040
3Rapor Hazırlama3600036450450
4Veri Aktarımı43200,543260,7560,25
5Gece Temizliği86100300600
Gece YarısıExcelDepo v1.0.0
Yedekleme görevinde bitiş değeri başlangıçtan küçük olduğu için ölçümün gece yarısını aştığı anlaşılır; işlev 86400 ekleyerek doğru süreyi, yani 40 saniyeyi bulur. Rapor Hazırlama için süre 450, Veri Aktarımı için 60,25, Gece Temizliği için 600 saniyedir. Basit çıkarma kullansaydınız gece yarısını aşan görevlerde negatif süre elde ederdiniz.

Kullanırken dikkat edin​

  • Gece yarısında değer sıfırlanır: Uzun süren bir işlemde başlangıç ve bitiş arasında saat 00:00 geçilirse fark negatif çıkar. Süreyi hesaplarken farkın negatif olup olmadığını denetleyin ve gerekirse 86400 ekleyin.
  • Çözünürlük işletim sistemine bağlıdır: Windows'ta Timer yaklaşık saniyenin yüzde biri hassasiyetle çalışır. Çok kısa işlemler 0 saniye gibi görünebilir; bu durumda işlemi çok sayıda tekrarlayıp toplam süreyi tekrar sayısına bölün. Mac sürümlerinde çözünürlük daha düşük olabilir.
  • Tarih değil, günün saniyesidir: Timer tarih bilgisi taşımaz. Tarih ve saati birlikte almak için Now, yalnız saat için Time, yalnız tarih için Date işlevini kullanın. Günler arası farkları DateDiff ile hesaplayın.
  • Değişken türünü Single seçin: Başlangıç değerini Single ya da Double türünde bir değişkende tutun. Integer ya da Long kullanırsanız saniyenin kesirleri yuvarlanır ve ölçüm anlamını yitirir.
  • Ölçüm sırasında ekran güncellemesini kapatın: Hücrelere yazan bir kodun süresini ölçüyorsanız Application.ScreenUpdating = False ayarı süreyi belirgin biçimde kısaltır. Karşılaştırma yaparken iki ölçümü de aynı ayarlarla yapın.
  • Randomize ile birlikte kullanım: Randomize Timer yazımı, rastgele sayı üretecini o anki saniye değeriyle başlatır; böylece Rnd her çalıştırmada farklı bir dizi verir.
  • İlgili konular:
    • Now, Time, Date: VBA'da tarih ve saat işlevleri
    • DateDiff: iki tarih ya da saat arasındaki farkı birim cinsinden verir
    • Randomize ve Rnd: rastgele sayı üretimi
    • Application.OnTime: bir makroyu belirli bir zamanda çalıştırır
    • ŞİMDİ, ZAMAN ve SAAT işlevleri: çalışma sayfasında karşılık gelen saat işlevleri
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
11
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst