• Foruma hoş geldin 👋 Ziyaretçi

    Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Çözüldü Formül/Makro Çözüm Talebi

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Durum
Konu Çözümlendiği İçin Kapatılmıştır.

hhmercan

Yeni Üye
Kullanıcı Bilgileri
Aktiflik
Çevrimdışı
Katılım
11 Eyl 2021
Mesajlar
29
Aldığı beğeni
7
Excel V
Office 365 TR
Konuyu Başlatan
Merhabalar,
Excel ile alakalı bir konuda desteğinize ihtiyacım var. Zorluğu kolaylığı konusunda bir fikrim yok ama biraz uğraştıabileceğini düşündüğüm için hakkını vermek istedim. Bu sebeple başlığa ücretli ibaresi ekledim. Çok uzatmadan konuya geçeyim.

4 sekmeli 1 excel dosyam var. Bunların ilk 3 tanesinin içerik yapısı aynı.
4. sü ise bu 3 sayfaya veri çekeceğim yahut değerler üretileceği zaman ihtiyaç duyulan ayar sayfası.
Şöyle resim olarak da ileteyim.

6cajn4q.jpg



=====



4begpr3.jpg



Renklendirmeleri olay karışmaması için yaptım. Normalde renkler yok.

Amacım; ayarlar sayfasında bulunan sayı aralığa göre "BT ID" sütununa rastgele sayı üretmek. Yani örneğin şuan ki değer 1 ile 33 arasında.
BT sütununa ait hücrelerde; 1 ile 33 arasında benzersiz değerler üretmek istiyorum.
Tabi sizlere sormak istediğim bu değil.

Grup ID ve MESAJ ID bölümleri, üretilecek olan değerlere bazı şartlar getiriyor.

Benim yapmak istediğim şey şu;
Sistem random sayı üretmek için sırasıyla satırları gezecek ve belirtilen aralıkta sayılar üretecek, fakat bunu yaparken,
Eğer aynı GRUP ID'sine sahip olan satırlar içersinde, MESAJ ID'si eşit olan hücreler varsa, bunlara tanımlanacak olan sayı aynı olsun.
Bunu da yaparken sadece aynı grupta olan hücrelerde bu durum geçerli olacak. Grup 1'de olan mesaj id'lerini eşit verecek, Grup 2 ye geçtiğinde yine aynı şey söz konusu ise onun ilk grup ile alakası olmayacak. Aynı şey o grup içinde bağımsız olarak yapılacak.

Görselden net örnek verecek olursak;

6cajn4q.jpg


Böyle bir tablomuz var. Amacımız BT ID sütununa ayarlarda belirtilen aralıkta(1-33) rastgele tam sayılar üretmek.

Ancak Grup ID'si 1 olan hücreler içerisinde; 2. ve 8. satırın mesaj id'leri birbirine eşit. Sayı üretirken 2. ve 8. satırların BT ID'leri de eşit olmalı. Diğer gruplarda eğer MESAJ ID'leri aynı olan hücreler varsa, burayla hiç bir bağı yok. Onlarda kendi grubu içerisinde ki eşit olan mesaj id'lere göre BT ID'lerini ayarlayacak. Bu gruptakilerle eşit olmayacak.

Oluşturulan BT ID'lere karşılık gelen İsim/Soyisimler; "Ayarlar" sekmesinde belirtilmiş durumda. İsim/Soyisim sütünunu da buna göre otomatik dolduracak.

Devam ediyoruz;

Grup ID'si 2 olan satırlar içerisinde de MESAJ ID'leri eşit olan hücreler var. 11 ile 16. satırlar ve 13 ile 15. satırların MESAJ ID'leri eşit.
O zaman 11 ve 18. satırda ki BT ID hücrelerine üretilen sayılar eşit olmak durumunda. Aynı şekilde 13 ve 15. satırdaki BT ID hücreleri de eşit olmak durumunda.
Bu gruptaki BT ID leri ile grup 1'de ki veya diğer gruplardaki BT ID'lerin hiç bir bağlantısı bulunmuyor. Her grubun kendi içerisinde bu işlemi yapması gerekiyor.

Oluşturulan BT ID'lere karşılık gelen İsim/Soyisimler; "Ayarlar" sekmesinde belirtilmiş durumda. İsim/Soyisim sütünunu da buna göre otomatik dolduracak.

Bu işlemler yapıldıktan sonra ortaya çıkan sonuç şu şekilde olacak;

3wnlzsb.jpg



2. konu ise; mesaj id sütununda gördüğünüz gibi birde xx, yy, zz gibi harfler var. Bunların eşi yok. Bu harfleri kullanmaktaki amacım; aynı satırda bulunan mesajlar sütununa, bazen standart cevaplar verilebilecek içerikler gelebiliyor. Böyle klasik mesajlar olduğunda onun cevabı da klasik olacağı için otomatik olarak tabloya ekletmek istiyorum. Ben şuan tabloyu uzatmamak için çok fazla yazmadım ama bu tür değişkenlerden çok fazla var.

Yapmak istediğim şey şu;
Sistem, ayarlar sekmesindeki "ön tanımlı değerler" bölümünde belirtilen değişkenlerin hepsini tek tek kontrol edecek.
Bulduğu zaman o satırın altına bir satır daha ekleyecek.
Bu yeni satırın;
- GRUP ID'sini; üst satırdaki ile ile aynı yapacak,
- BT ID'sini; Ayarlarda bulunan aralık kısmına göre rastgele üretecek. Yani şuan ki örnekte, 1 ile 33 arasında.
- Ürettikten sonra İsim/Soyisim bölümünü BT ID'ye karşılık gelen değerle dolduracak,
- Mesaj bölümünü ise yine ayarlarda bulunan "Ön Tanımlı Değerler" bölümünde ona karşılık gelen değer neyse ona göre dolduracak.

Olay bu şekilde tamamlanıyor. Hatamız olduysa kusura bakmayın.
 
Çözüm
iki koldan bu konuya uğraşıyoruz abey.Ben yapamazsam bile üstad halleder :)
Sanıyorum şimdi sadece 3 satır arka arkaya gelmeme olayı kaldı doğru ise.

C#:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
Ben bu konuda biraz yanlış anlatım yaptım sanırım. Aslında benzersiz olmasına gerek yok.
Basit bir örnekle anlatayım;
Diyelim ki giriş sekmesinde 50.000 satırlık bir veri var.
Ayar bölümündeki aralıkta 1-20 yazıyor.
50.000 satırın tamamına 1 ile 20 arasında sayı üreteceğiz.
Yani benzersiz olması şart değil. Ardarda denk gelmesin, arasında birkaç satır olsun yeterli.



Bu konuda sizin yaptığınız doğru olanı. Herhangi bir değişiklik yapılmasına gerek yok.

Birde ufak bir konuyu atladık;
Şimdi örneğin yy'in karşılığı; kayıt başarılı Hilmi
Buradaki Hilmi kısmı şuan sabit.
Aslında bir önceki satırın isim bölümünde yazan ismi almamız gerekiyordu.

Şöyle resimle göstereyim;

5zpu6jk.jpg


Burada yeni eklenen satırda, "kayıt başarılı hilmi" değil de; kayıt başarılı Mehmet6 şeklinde çıkartmam gerekiyor.
Sanırım bunun için ayar bölümünde tanımlama yaparken isim kısmına bir değer atamamız gerekecek.
Son yolladığınız dosyaya göre Mehmet 6 arattık bulduk diyelim.Sol sütununda rakamlar var.Nasıl kritere göre bulunacak.
yy ye göre buldurunca sağındakini alıyordum orda garip olmuş.
 
Son yolladığınız dosyaya göre Mehmet 6 arattık bulduk diyelim.Sol sütununda rakamlar var.Nasıl kritere göre bulunacak.
yy ye göre buldurunca sağındakini alıyordum orda garip olmuş.

Şimdi şöyle; değişecek olan kısım isim bölümü değil, mesaj bölümü.
Aslında biz isim eklemiyoruz. Sadece mesaj içerisinde isim geçiriyoruz. Şu alttaki görselde tam olarak yerlerini işaretledim.

5zpu6jk.jpg
 
Yerler konusunda biraz kafa karışıklığı oldu sanırım. 2. bölümün olayını şöyle kısaca baştan özetlersek netleşecektir.

Sistem, ayarlar sekmesindeki "ön tanımlı değerler" bölümünde belirtilen değişkenlerin hepsini tek tek kontrol edecek.
Bulduğu zaman o satırın altına bir satır daha ekleyecek.
Bu yeni satırın;
- GRUP ID'sini; üst satırdaki ile ile aynı yapacak,
- BT ID'sini; Ayarlarda bulunan aralık kısmına göre rastgele üretecek. Yani şuan ki örnekte, 1 ile 33 arasında.
- Ürettikten sonra İsim/Soyisim bölümünü BT ID'ye karşılık gelen değerle dolduracak,
- Mesaj bölümünü ise yine ayarlarda bulunan "Ön Tanımlı Değerler" bölümünde ona karşılık gelen değer neyse ona göre dolduracak. Değişimi bu maddede yapıyoruz. Ön tanımlı değerde önceleri Selam Ahmet yazıyordu. Şimdi selam #isim# yazıyor.
İsim yerine bir önceki satırda bulunan kişinin ismi gelecek. Şuan Mesaj sütununun içinde geçen #isim# değişkeninden bahsediyoruz. İsim sütunundan değil. Karışıklık bundan ötürü oldu sanırım. Değişkeni farklı bir şey de yapabiliriz karışmaması için.
 
Dosyayı bir deneyin abey.
Ayar sayfasındaki #isim# gibi yerleri silebilirsiniz.
Ben orası ile ismin birleştirdim kodda.Kodu çalıştırınca daha iyi anlarsınız.
Sorun olmayacaksa mesela A sütundaki grup ıd 1 deki a ler ve grupıd2 deki a rakamları aynı olabiliyor.Aynı olmayacaksa ona göre yapmak gerekecek.


Unbenannt.PNG
 

Ekli dosyalar

  • Örnek DB 2.7z
    32.6 KB · Gösterim: 3
Son düzenleme:
Dosyayı bir deneyin abey.
Ayar sayfasındaki #isim# gibi yerleri silebilirsiniz.
Ben orası ile ismin birleştirdim kodda.Kodu çalıştırınca daha iyi anlarsınız.
Sorun olmayacaksa mesela A sütundaki grup ıd 1 deki a ler ve grupıd2 deki a rakamları aynı olabiliyor.Aynı olmayacaksa ona göre yapmak gerekecek.


Ekli dosyayı görüntüle 2796

Şuan ismi kendi satırından alıyor.
Kendi satırından değil de bir üst satırdan almasını sağlayabilirsek tamamdır.
Sizin attığınız görsel üzerinden konuşacak olursak;
Sistem xx'i gördü ve yeni satırı oluşturup doldurmaya başladı. Tek hatalı hücre mesaj bölümü.
Şuan; Selam #isim# Mehmet4 yazıyor;
Olması gereken; Selam #isim# Mehmet6
Yani bir üst satırdaki isim.


Sorun olmayacaksa mesela A sütundaki grup ıd 1 deki a ler ve grupıd2 deki a rakamları aynı olabiliyor.Aynı olmayacaksa ona göre yapmak gerekecek.

Bu ara sıra denk geliyorsa hiç problem değil. Fakat sürekli a'ları aynı tanımlıyorsa sorun çıkıyor.
 
Şimdi kontrol ettim de bu durum sürekli olmasa da sık yaşanıyor.
Bu BT ID bölümü bilgisayar id si aslında.
Elindeki görevi bitirmeden yeni bir görev gelmesi sıkıntı oluşturacaktır.
Hatta bu sadece a'lar, b'ler için değil tüm BT ID'leri için geçerli.
Tablonun tamamı için şöyle bir şey yapmak mümkün mü;
BT ID bölümünde oluşan sayı; 3 satır sonrasına kadar tekrar etmesin.
 
BT ID bölümünde oluşan sayı; 3 satır sonrasına kadar tekrar etmesin.
İnşAllah yaparız abey.Olması gerek mantıken.En iyisi collection yada dictionrary içine alıp ordan mesela ilk 33 sayıyı alınır karışık yetmezse daha eklenir bu şekilde daha iyi olacak.Bugün biter abey uzun sürmez.Zaman bulunca bakarım.
 
Son düzenleme:
Kodda i+1 var ordaki +1 silinince üstteki satırdan alınır abey.
Bugün bakarım hepsine.

Tamamdır. :)

En iyisi collection yada dictionrary içine alıp ordan mesela ilk 33 sayıyı alınır karışık yetmezse daha eklenir bu şekilde daha iyi olacak.

Bunu; ilk 33 bitsin sonra yeniden başlasın şeklinde değil de; her hücre 1 le 33 arasında değer üretsin şeklinde yapabilir miyiz.
Bu dediğim ilk 33 satır içerisinde tekrarlayan sayılar çıkmasına sebep olabilir ama olsun. O şekilde daha mantıklı oluyor.

Çünkü sistemin mantığı şöyle;
BT ID bilgisayarlara görev gönderiyor ve her görevin tamamlanma süresi 15 ile 45 saniye arasında.
Her 33 bittiğinde tekrar baştan üret dersek bilgisayarlar daha fazla boşta bekler.
Ama;
BT ID bölümünde oluşan sayı; 3 satır sonrasına kadar tekrar etmesin.
kuralını koyduktan sonra, birde her satır birbirinden bağımsız olarak 1 ile 33 arasında değer üretsin dersek; çok daha verimli bir sonuç çıkıyor ortaya.
Yani ne sayılar daha fazla denk gelsin diye uğraşalım, ne de ilk 33 bitsin sonra yeniden başlasın diye uğraşalım. Nasıl denk geliyorsa öyle bırakalım. :)
 
Abey dosyayı bir deneyin.
3 satırın arka arkaya gelmemesi olayına sonra bakabilirim algoritmalarla aram iyi değil.
Kolay yaparım sanmıştım biraz zor olacak :)
 

Ekli dosyalar

  • Örnek DB 3.7z
    33.5 KB · Gösterim: 3
Abey dosyayı bir deneyin.
3 satırın arka arkaya gelmemesi olayına sonra bakabilirim algoritmalarla aram iyi değil.
Kolay yaparım sanmıştım biraz zor olacak :)
tamamdır kardeş. :)
Bu arada ayarlar bölümünde ki değerlerde #isim# şeklinde kullanma sebebim;
"giriş" sayfasına eklenirken cümlenin sonuna değil de mesajın istenilen yerinde isim geçmesini sağlamaktı. Şuan standart olarak cümle sonunda geliyor.
Acaba daha ne kadar sabredebileceksin. :rolleyes:
 
tamamdır kardeş. :)
Bu arada ayarlar bölümünde ki değerlerde #isim# şeklinde kullanma sebebim;
"giriş" sayfasına eklenirken cümlenin sonuna değil de mesajın istenilen yerinde isim geçmesini sağlamaktı. Şuan standart olarak cümle sonunda geliyor.
Acaba daha ne kadar sabredebileceksin. :rolleyes:
Benim zamanım var şimdilik abey :)
O yüzden önemli değil.
Dediğiniz gibi istenilen yerde geçme olatının farkına varmıştım ama yavaş yavaş ilerlemekti niyetim.
Şimdi ona bakabilirim.Ama şunu merak ediyorum ressimdeki gibi sabitmi oisim yazdıklarınız yerler.
Mesela xx arandı diyeli hep selam isim olarak,bb arandı onada Gel isim gel burda isim hep ortadamı olacak.
Bunları bilmeden yapılmayacağı için uğraşmamıştım.
O kısımları tam anlatmanız gerek hangisi ortada hangisi başta yada sonda gibi.


Unbenannt.PNG
 
Benim zamanım var şimdilik abey :)
O yüzden önemli değil.
Dediğiniz gibi istenilen yerde geçme olatının farkına varmıştım ama yavaş yavaş ilerlemekti niyetim.
Şimdi ona bakabilirim.Ama şunu merak ediyorum ressimdeki gibi sabitmi oisim yazdıklarınız yerler.
Mesela xx arandı diyeli hep selam isim olarak,bb arandı onada Gel isim gel burda isim hep ortadamı olacak.
Bunları bilmeden yapılmayacağı için uğraşmamıştım.
O kısımları tam anlatmanız gerek hangisi ortada hangisi başta yada sonda gibi.


Ekli dosyayı görüntüle 2807
Eyvallah. :)
Şimdi "Ön Tanımlı Değerler" bölümüne ben rastgele bir şeyler yazdım.
Normalde kullanımı şu şekilde olacak;
Örneğin Kayıt Başarılı Hasan diye bir mesaj yazacağız;
ben buna "xx" diyeceğim; "Kayıt başarılı #isim#"şeklinde kullanılacak,
Sonra atıyorum bir uyarı vermem gerekecek. Buna "yy" kısaltmasını vereceğim. Karşısında ki mesaj; "Sayın #isim# işleminiz başarısız" şeklinde kullanılacak.
Yani #isim# şeklinde kullanımı sabit ama cümle içinde kullanıldığı yerler farklı olacak.
 
Bir deneyim abey # bunu instr ile buldurup mid ile parça alıp ona göre bir yapmayı deneyip yazarım buraya.
 
Bir deneyim abey # bunu instr ile buldurup mid ile parça alıp ona göre bir yapmayı deneyip yazarım buraya.
tamamdır. bu arada kullanımı #isim# şeklinde olmak zorunda değil. Benim aklıma böyle bir şey geldiği için onu yazdım. Eğer bu şekilde kullanımı bir zorluk çıkarıyorsa; sadece harflerden oluşan bir değişken, sayılardan oluşan bir değişken veya aklına gelen herhangi bir sabit değerde kullanılabilir.
 
iki koldan bu konuya uğraşıyoruz abey.Ben yapamazsam bile üstad halleder :)
Sanıyorum şimdi sadece 3 satır arka arkaya gelmeme olayı kaldı doğru ise.

C#:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
 

Ekli dosyalar

  • Örnek DB 4.7z
    35.2 KB · Gösterim: 14
Çözüm
iki koldan bu konuya uğraşıyoruz abey.Ben yapamazsam bile üstad halleder :)
Sanıyorum şimdi sadece 3 satır arka arkaya gelmeme olayı kaldı doğru ise.

C#:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
Kardeş ben sizin hakkınızı nasıl öderim bilmiyorum.
Gerçekten çok teşekkür ederim.
 
Kardeş ben sizin hakkınızı nasıl öderim bilmiyorum.
Gerçekten çok teşekkür ederim.
Helal olsun abey ve Dua edin yeter.
3 lü olay için uğraşıyorum ama söz veremem.
Çözersem zaten paylaşırım.
 
Abey sorun çözüldü galiba istiyorsanız buraya yükleyin kilitleyelim konuyu.Benden daha fayda gelmez bu hafta :)
 
Durum
Konu Çözümlendiği İçin Kapatılmıştır.
Geri
Üst