artan sayı döngüsü

Katılım
8 Ağustos 2015
Mesajlar
12
Excel Vers. ve Dili
Microsoft Excel 2010 - Türkçe
Altın Üyelik Bitiş Tarihi
07.08.2020
Değerli üstadlarım

Benim için çok önemli bir çalışmayı sizlerle paylaşmak istiyorum. Forumda yeniyim. Eğer bir hatam veya yanlışım varsa şimdiden affınıza sığınarak yol göstermenizi veya yardımcı olmanızı dilerim.

Öğrenmek istediğim şey biraz karışık. Ama özetle ekteki dosyada bir başlat butonu oluşturmak ve buna bir makro atayarak bir döngü çalıştırmak istiyorum.

Amacımız artan sayının (B7) 1 den başlayarak sürekli artmasını sağlamak. Bu sayının her değişmesinde tablodaki bütün hesaplamalar değişiyor. Bu değişen hesaplamaya göre sarı hücredeki (B9) sonuçta değişiyor. Örneğin artan sayı (B7) "3760632596" olduğunda bu sarı hücrenin içindeki sonucun (B9) ilk 16 karakteri "0000000000000000" oluyor. İşte bu sarı hücredeki sonucun (B9) ilk 16 karakteri "0000000000000000" olana kadar artan sayı (B7) 1 artacak. "Başlat" butonu ile döngüyü artan sayıyı 1 den başlatıp sonuca ulaştığımızda olayın bitirilmesini sağlamalıyız.

Kod yazma konusunda hiçbir bilgim yok. Formüllerle bunu yapmaya çalıştım. Ancak çok fazla kastı. Ve örnek için küçük bir sayı ile farklı bir sonuca ulaşmaya çalıştım. Manuel olarak arttırarak giderken sorun yok. Ancak döngüsel başvuru ile doğru sayıya geliyor ama sonuç hücresindeki sayıyı değiştirmediği için doğrulama yapamıyor ve sayıyı arttırarak devam ediyor.

Bunu bir makro yardımıyla yapabilecek üstadlarımın şimdiden ilgisini beklediğimi bildirerek şimdiden teşekkür ederim.
 

Ekli dosyalar

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,421
Excel Vers. ve Dili
excel 2010
Merhaba

Aşağıdaki kodu standart modüle yazarak deneyiniz.
Kod:
Sub ArtanSayi()
Application.ScreenUpdating = False
For i = [COLOR="Red"]3760632590[/COLOR]# To 5000000000#
Range("I13") = i + 1
If Range("I14") = "0000000000000000" Then Exit For
Next
MsgBox "BİTTİ"
Application.ScreenUpdating = True
End Sub
Gözlemleyebilmek için 3760632590'den başlatılmıştır, siz 1 den başlatırsınız ama bu durumda kaç saat sürer bilemem.
 
Katılım
8 Ağustos 2015
Mesajlar
12
Excel Vers. ve Dili
Microsoft Excel 2010 - Türkçe
Altın Üyelik Bitiş Tarihi
07.08.2020
Merhaba

Aşağıdaki kodu standart modüle yazarak deneyiniz.
Kod:
Sub ArtanSayi()
Application.ScreenUpdating = False
For i = [COLOR="Red"]3760632590[/COLOR]# To 5000000000#
Range("I13") = i + 1
If Range("I14") = "0000000000000000" Then Exit For
Next
MsgBox "BİTTİ"
Application.ScreenUpdating = True
End Sub
Gözlemleyebilmek için 3760632590'den başlatılmıştır, siz 1 den başlatırsınız ama bu durumda kaç saat sürer bilemem.
Yardımınız için teşekkür ederim. Butonsuz da çalışıyor. Doğru sonucu veriyor. Zaman konusunda çok haklısınız. 4000 adet sayı arttırmayı bile 9 dakikada yapıyoruz. Bu hesaba göre dakikada 437 işlem. 3760632590 sayısına ise ancak 16 yılda ulaşabiliyoruz. Bu arada leptoptaki işlemcim Intel(R) Core(TM) i7-4710HQ CPU @ 2.50GHz. Bu durumda bu süreyi kısaltarak saat olarak hesaplayabileceğimiz yani işlemi hızlandırabileceğimiz bir yöntem var mıdır? Acaba Visual Studio C# ile bunu programa döksek faydalı olurmu?
 
Katılım
9 Ağustos 2015
Mesajlar
3
Excel Vers. ve Dili
2010
Merhaba
Artan sayıyı elle değiştirseniz bile 3-5 saniye sürüyor.
Anladığım kadarı ile formüllerin tekrar tekrar hesaplanması işi imkansız kılıyor.
Biraz zahmete girip uğraşacaksanız.
Hücre adlarını değişken olarak kullanır,
Excel fonksiyonlarının VBA daki karşılığını PARÇAAL = mid, SAĞDAN = Right olarak değiştirir,
Ben en alttan başladım değerleri tanımladım.
sizde yukarıya doğu tüm değişkenleri tanımlarsanız.
Kod:
Sub Aktar()
'........................
B31 = B32 & B33 & B34 & B35 & B36 & B37 & B38 & B39
B9 = Mid(B31, 63, 2) & Mid(B31, 61, 2) & Mid(B31, 59, 2) & Mid(B31, 57, 2) & Mid(B31, 55, 2) & Mid(B31, 53, 2) & Mid(B31, 51, 2) & Mid(B31, 49, 2) & Mid(B31, 47, 2) & Mid(B31, 45, 2) & Mid(B31, 43, 2) & Mid(B31, 41, 2) & Mid(B31, 39, 2) & Mid(B31, 37, 2) & Mid(B31, 35, 2) & Mid(B31, 33, 2) & Mid(B31, 31, 2) & Mid(B31, 29, 2) & Mid(B31, 27, 2) & Mid(B31, 25, 2) & Mid(B31, 23, 2) & Mid(B31, 21, 2) & Mid(B31, 19, 2) & Mid(B31, 17, 2) & Mid(B31, 15, 2) & Mid(B31, 13, 2) & Mid(B31, 11, 2) & Mid(B31, 9, 2) & Mid(B31, 7, 2) & Mid(B31, 5, 2) & Mid(B31, 3, 2) & Mid(B31, 1, 2)
I14 = mid(B9, 1,16)
For i = 1 To 5000000000
If  = I14 "0000000000000000" Then 
Exit For
MsgBox i
End if
Next


End Sub
 
Son düzenleme:
Katılım
8 Ağustos 2015
Mesajlar
12
Excel Vers. ve Dili
Microsoft Excel 2010 - Türkçe
Altın Üyelik Bitiş Tarihi
07.08.2020
Merhaba
Artan sayıyı elle değiştirseniz bile 3-5 saniye sürüyor.
Anladığım kadarı ile formüllerin tekrar tekrar hesaplanması işi imkansız kılıyor.
Biraz zahmete girip uğraşacaksanız.
Hücre adlarını değişken olarak kullanır,
Excel fonksiyonlarının VBA daki karşılığını PARÇAAL = mid, SAĞDAN = Right olarak değiştirir,
Ben en alttan başladım değerleri tanımladım.
sizde yukarıya doğu tüm değişkenleri tanımlarsanız.
Kod:
Sub Aktar()
'........................
B31 = B32 & B33 & B34 & B35 & B36 & B37 & B38 & B39
B9 = Mid(B31, 63, 2) & Mid(B31, 61, 2) & Mid(B31, 59, 2) & Mid(B31, 57, 2) & Mid(B31, 55, 2) & Mid(B31, 53, 2) & Mid(B31, 51, 2) & Mid(B31, 49, 2) & Mid(B31, 47, 2) & Mid(B31, 45, 2) & Mid(B31, 43, 2) & Mid(B31, 41, 2) & Mid(B31, 39, 2) & Mid(B31, 37, 2) & Mid(B31, 35, 2) & Mid(B31, 33, 2) & Mid(B31, 31, 2) & Mid(B31, 29, 2) & Mid(B31, 27, 2) & Mid(B31, 25, 2) & Mid(B31, 23, 2) & Mid(B31, 21, 2) & Mid(B31, 19, 2) & Mid(B31, 17, 2) & Mid(B31, 15, 2) & Mid(B31, 13, 2) & Mid(B31, 11, 2) & Mid(B31, 9, 2) & Mid(B31, 7, 2) & Mid(B31, 5, 2) & Mid(B31, 3, 2) & Mid(B31, 1, 2)
End Sub

yani bütün formulleri VBA da kodlarsak hesaplama süresini düşürebilir miyiz? Eğer öyle ise ne kadar düşer?
 
Katılım
9 Ağustos 2015
Mesajlar
3
Excel Vers. ve Dili
2010
Sayfadaki formülleri tekrar tekrar hesaplamayacağı için daha çabuk hesaplar. Yukarıdaki kodu düzelettim
 
Katılım
8 Ağustos 2015
Mesajlar
12
Excel Vers. ve Dili
Microsoft Excel 2010 - Türkçe
Altın Üyelik Bitiş Tarihi
07.08.2020
diğer sayfalardaki formülleri de incelediniz mi acaba? her artan sayıda diğer sayfalardaki bütün formüller yeniden hesaplanıyor. Bundan dolayı hesaplama uzun sürüyor. Söylediğiniz gibi VBA da yazar isek diğer sayfalardaki bütün formüller içinde kod yazmamız gerekecek. Bu tabi ki mümkündür. Ama yazma olayı bile ne kadar kompleksli ve uzun sürecek düşünebiliyor musunuz?
 
Katılım
9 Ağustos 2015
Mesajlar
3
Excel Vers. ve Dili
2010
Formül çubuğundan formülü kopyalayın modüle yapıştırın değiştir ile
excel fonsiyon adı > VBA fonksiyon adı
";" > ","
değiştirin
 
Katılım
8 Ağustos 2015
Mesajlar
12
Excel Vers. ve Dili
Microsoft Excel 2010 - Türkçe
Altın Üyelik Bitiş Tarihi
07.08.2020
Merhaba

Aşağıdaki kodu standart modüle yazarak deneyiniz.
Kod:
Sub ArtanSayi()
Application.ScreenUpdating = False
For i = [COLOR="Red"]3760632590[/COLOR]# To 5000000000#
Range("I13") = i + 1
If Range("I14") = "0000000000000000" Then Exit For
Next
MsgBox "BİTTİ"
Application.ScreenUpdating = True
End Sub
Gözlemleyebilmek için 3760632590'den başlatılmıştır, siz 1 den başlatırsınız ama bu durumda kaç saat sürer bilemem.
3760632590 sayısının olduğu yere I13 hücresini nasıl tanımlayabiliriz. Yani başlangıç sayısını I13 hücresinden alsın
 
Üst