[]

VBA kodlama

Sevgili kodcular,

diyelim ki excel'de A1 den A4104 satirlarina kadar araliksiz verileriniz var ve siz bu 4104 rakamini bulan bir fonksiyon yazmak istiyorsunuz...

Bir arkadas 50 ser 50ser saydiran ve kontrol eden bir kod yazmis ve bos buldugu ilk satiri (4150.) sinir olarak belirlemis ki yanlis sonuclara sebep oluyor. Asagidaki algoritmayla daha verimli hale getirebiliriz sanirim ve buna uygun bir kod nasil yazabiliriz sorum bu..

Excel in satir limiti bildigimiz uzere 65536 yani 2 uzeri 16. bu da su demek oluyor. Herhangi bir satira ait sayiyi en cok 16+8+4+2+1=31! adimda bulabiliriz.

Nasil yazalim bu kodu?

 
neden basit bir döngüyle tek tek baktırmıyorsunuz hücrelere? kaçırdığım bir şey mi var?


  • sahteyazar  (27.03.11 23:19:55) 
simdi ben size aklinizdan bir sayi dizisi tutun diyorum. Bu sayi dizisi 1 den baslayacak ve 65536 ya kadar sizin sectiginiz bir sayiyla son bulacak. Diyelim ki tuttugunuz sayi 4104. Nasil en kolay sekilde bulurum. 1-1 arasi mi 1-2 arasi mi 1-3 arasi mi ..... 1-4104 arasi mi diye tek tek sorarak mi? Boyle yaparsam size 4104 soru sormam gerekir.

Benim istedigim ise toplamda en az soruyla bu isi cozmek. 65536 tuttugunuz dizinin icinde bir rakam mi? Hayir. 32768? Hayir ..... 8192? Hayir. 4096? Evet. 4096 dizinin son rakami mi peki? hayir. O zaman dizinin son rakami 4096 ile 8192 arasinda. 4096 + 2048 serinin icinde mi? Hayir. 4096+1024?= Hayir ..... 4096+8? Evet. Serinin son rakami 4104 mu? Evet.

Bingo!
  • schokopudding  (27.03.11 23:44:53 ~ 23:45:54) 
önce 65536. satırı sorgulatın boşsa yarısını alıp (32768) onu sorgulatın, boşsa onun yarısı vs.; değise bu sefer 65636 ile 32768'in ortasından başlayarak devam edin... bilmem anlatabildim mi?


  • restlesss  (27.03.11 23:56:06) 
@restless: Hocam bir onceki yorumumda bu dediginizi yazmistim. Sorumda da belirttigim gibi kod nasil olursa en az kaynagi kullanmis oluruz?

@layer26: Diyelim ki 4104 degil de 65.000 i ariyoruz. 50'ser 50'ser 3250 kere dongu yaptirmamak isteniyor ve bu yuzden ikinci algoritma ile yapilacak fonksiyon.
  • schokopudding  (27.03.11 23:59:48 ~ 28.03.11 00:03:29) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler basond, compumaster, fraise, kibritsuyu, rakicandir
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.