Çözüldü B Sütununa Otomatik Sıra No Verme

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

hakki83

Site Üyesi

Excel Versiyonu
Excel 2016
Excel Sürümü
32 Bit
Excel Dili
Türkçe
Merhaba değerli hocalarımız

Dosyama otomatik sıra no kodu eklemek istedim.
Önce arşivime baktım. Aslında tam istediğim gibi bir dosya vardı.
Fakat üzerinde bazı değişiklikler yapılması gerekiyordu.
Yapmayı denedim ama olmadı.

Hocalarımızdan iki ayrı kod olarak yazılmasını talep edeceğim.

..........

Birinci kod şöyle olsun lütfen:

-- A sütunundaki isimler A2:A1000 arasıdır. Dolayısıyla sıra nolar da B2:B1000 arası olacaktır.
Sıra no vermeye birinci satırdan değil, ikinci satırdan itibaren başlamalıdır. Birinci satır başlıktır.

-- Gördüğüm kadarıyla, oluşan son sıra no, bir önceki sayıyı C1 hücresinden alıyor. C1 hücresi değil de D1 hücresi olması gerekiyor. Zira gerçek dosyamda C1 hücresi dolu. (Koddaki 3 leri 4 yapmak gerekiyor sanıyorum)

...........

İkinci kod da şöyle olsun lütfen:

-- (Üsttekiyle aynı) A sütunundaki isimler A2:A1000 arasıdır. Dolayısıyla sıra nolar da B2:B1000 arası olacaktır.
Sıra no vermeye birinci satırdan değil, ikinci satırdan itibaren başlamalıdır. Birinci satır başlıktır.

-- C1'de oluşan son sıra özelliği, tamamen iptal edilsin. oluşan sıra nolar, son sıra numarasını B sütunundaki son sıra nodan alsın.

..............

Bu iki kodla ayrı ayrı denemeler yapacağım.

Bir de sorum var; örnek dosyada
Worksheet_Change başlığında Excel.şeklinde fazladan bir ifade var. Normalde böyle bir şey olmuyor. Bu dosyada neden var, ne işe yarıyor?
...........

Emekleriniz için şimdiden Teşekkürler
 

Ekli dosyalar

  • örnek dosya.xls
    31 KB · Görüntüleme: 5
@hakki83
Kod başlığındaki Excel.Range yerine Range de yazılabilir, sorun yaratacak bir şey değil,
benzer durumdaki kodların başlık kısımlarının tümünde Excel.Range veya sadece Range yazılabilir.

Asıl sorunuzla ilgili olarak açıklığa kavuşması gereken durumlar var diye düşünüyorum.

A sütunundaki bir verinin silinmesi halinde, dolu hücreler için önceden oluşan sayıların değişmiyor olması.
Örneğin A2:A1000 alanında tüm hücrelere elle veri girdim (sırayla değil tabi).
Bu durumda mevcut kodun sonucu örneğin A sütununda 1 adet veri varken, bunun karşısında sıra no olarak 999 da olabilecek demektir.

Yapılmak istenilen tam olarak nedir?
B sütununda;
-- A sütunundaki verinin kaçıncı veri girişi olduğunu mu tespit etmek istiyorsunuz?
-- yoksa A sütunu dolu olanlar için bir sıra numarası mı elde etmek istiyorsunuz?

Netleşmesi gereken bir durum da;
A sütununa, başka sütundan/sayfadan/belgeden toplu veri kopyalama yapıştırma,
A sütunundaki bir hücreyi sağ alt köşe tutamacından tutup aşağı sürükleme yöntemiyle boş olanlara veri yazma
işleminin yapılıp yapılmayacağı.
 
Ömer hocam önce amacımdan bahsedeyim.
Amacım şudur:

(Oluşturulan kodlar ne olursa olsun, birinci öncelik dosyayı kilitlememesidir, donmamasıdır. Zira örnek dosyadaki kodlar, dosyanın donmasına sebep oluyor.)

A2'den itibaren isimler yazacağım.
Bu isimlerin karşılığına yani B sütununa,
B2'den itibaren 1'den başlayarak sıra nolar gelecek.
Aslında sıra no diye bahsettiklerim sıra nosu değildir. Bu isimlerin Takip Kodu olacak. Şu an bu sıra noları manuel giriyorum.

A sütunundaki isimlerden sildiklerim olabilir. Ki olacak da.
A sütunundaki isimlerden birini veya birden fazlasını sildiğimde,
B'deki karşılığı olan sıra nolar da silinecek; örnek dosya bu şekilde yapılmış.(satırların komple silinmesine gerek yok çünkü butona ekli satır silen kodum vardır)

Yani şöyle örnek vereyim.
A2'ye Ali Veli diye bir isim yazdım.
B2'ye 1 gelecek.

Aradan zaman geçti Ali Veli'yi listeden sildim.
Karşısındaki 1 rakamı da silinecek normal olarak.
Diyeceksiniz ki, bu 1 sayısı bir daha hiçbir ismin karşılığına gelmeyecek mi?
Gelmeyecek çünkü 1 sayısı Ali Veli'ye ait takip numarasıydı. Ali olmadığına göre 1 sayısı da olmayacak demektir.

Bundan dolayı zaman geçtikçe belki B sütunundaki bir ismin karşısındaki sıra no olarak belki de 5375 olacak.

Peki diyelim ki, yarın bir gün böyle düşünmedim de, silinen numaranın yerine sırayı tamamlayacak şekilde dolmasını istedim. Yani diyelim ki aradan isimler sildim, karşılığındaki 3 ve 15 sayıları silindi. Ve en son 182'de kaldı, sonradan ilave eden isimlere 183 ve 184 değil de eksik olan 3 ve 15 sayılarının gelmesini istedim ne olacak?
İşte o zaman yeni konu açacağım. Şu an için böyle bir şey olmamalı.


Son olarak, başka bir yerden isim kopyalayıp yapıştırma durumunun her zaman olacağını sanmıyorum. Ama kopyala yapıştır olma durumunda, karşılığına sıra nolar otomatik gelse galiba iyi olur diye düşünüyorum. Yeter ki dosya kilitlenmesin, donmasın.

İsimleri sağ alt köşe tutamacından sürükleyip veri doldurma yazma işinin olma ihtimali hiç yok.



...........




Şimdi gelelim örnek dosyaya, biraz da örnek dosyadan bahsedeyim.

Örnek dosyada, B'ye yazılan son sıra numarası, C1'den alınıyor.
İşte iki farklı kod talep ettiğimde şunu düşünmüştüm. (İkisini de deneyecektim)

Birinci talebimde, Eğer örnek dosya gibi yapılacak ise, C1'den değil de D1'den alsın. Çünkü C1'de TextBox vardır.

İkinci talebimde ise, C1 (velev ki D1) özelliği kaldırılsın, son sıra noyu B'ye yazılan en büyük sayıdan alsın.

İşte ikisini de deneyip, denemeler yapıp, karar verecektim.

Ama size hangisi kolay geliyorsa, hangisi daha iyi olur derseniz, o kodu kullanmaya devam ederim.
Anlaşılmayan bir şey olursa, yine memnuniyetle izah ederim.
 
Son seçenek için de cevabımı yazayım da eksik bir şey kalmasın.
B sütununda, A sütununda yapılan silme (toplu silme dahil) dolayısıyla eksilen sayılar kullanılmak gerektiğinde
(toplu yazma dahil) şu kod işinizi görür.

Site yazılımımızla ilgili bir sorun diye düşünüyorum.
Kod metnindeki If Application.Count([B:B], XD) kısmındaki Count ibaresini .CountIf olarak değiştirin.
Aşağıya eklediğimde mesaj gönderilemiyor.

VBA:
Görüntülemek için giriş yapmalısınız.
(12 satır)
 
Ömer hocam şöyle küçük bir sorun çıktı;
Hani yukarıda satır silme kodum var diye bahsetmiştim ya,

İşte silinen isimlerin satırlarını (mecburen silmeliyim ve sıralamalıyım) kodla da manuel de silince;
İki kodda da hata veriyor ve son sütuna kadar sayılarla doluyor.

Bu sorun çözülebilir mi acaba
 
Sorun kodda değil silme yönteminde.
Toplu yazma/silme işlemi de olacağından silme işleminin elle yapılması sorun yaratıyordur.
Silme işlemini şu kodla yaparsanız sorun kalmaz.

-- Birinci kodla A sütununda boş olan hücrelerin SATIRları silinir.
-- İkinci kodla sıralama yapılır (kodda B sütununa göre sıralama var, kriter olarak A sütunu da kullanılabilir.

VBA:
Görüntülemek için giriş yapmalısınız.
(8 satır)

VBA:
Görüntülemek için giriş yapmalısınız.
(6 satır)
 
Ömer hocam merhaba

Son verdiğiniz iki kod ile oldu.

Fakat şunları sormalıyım izninizle.

--- SUB Boş Olanları Sil kodunu

- B sütununa göre değiştirmek için,
A2:A ifadesini B2:B yapmak yeterli midir? Başka bir yeri de değiştirmek gerekiyor mu?

- Boş satır olmayıp da düğmeye basınca hata veriyor, en üste ON ERROR satırını eklemek uygun mudur? (Size sormadan eklemek istemedim)

................

--- SUB Sırala kodunu

- A sütununa göre değiştirmek için, sondaki B1'i , A1 yapmak yeterli midir? Başka bir yeri de değiştirmek gerekiyor mu?


Teşekkürler.
 
BOŞ satırları silme işlemi:
Bir satırda;
-- A sütunu hücresi boşsa, B sütunu hücresi de boş,
-- A sütunu hücresi doluysa, B sütunu hücresi de dolu
durumda oluyor (çünkü B sütununa numara verme ve numara silme işlemi zaten makroyla yapılıyor ve o kodda sorun yok) .
Dolayısıyla BOS_OLANLARI_SIL isimli prosedürde sütun adı değişikliği vs söz konusu olmamalıdır.
Bu koddaki eksiklik makroyla satır silme sonrası veya veri girişinin boşluksuz yapılmış olması halinin kontrol edilmiyor olmasıydı.
Yani boş veri satırının olmaması hali. Bunu kontrol etmek için, koda ilave yapılması gerekecek demektir.
Gerekli ilaveyi önceki cevabımda verdiğim kodda yaptım, sayfayı yenileyerek önceki kod cevabımı tekrar kontrol edin.

SIRALAMA işlemi:
SIRALAMA prosedüründe A ve B sütununun birlikte hareket etmesi gerekeceğinden alan adresinde (.....A2:B....)
bir değişiklik yapılmayacak. Sadece sıralama kriteri veya sıralama yöntemi değişebilir.
Sıralamayı A sütununa göre yapacaksanız, verdiğim kodda ilgili satırın sonundaki .Sort [B1] kısmını .Sort [A1] olarak değiştirirsiniz.
ARTAN değil AZALAN sıralama isterseniz, bu kod satırının sonuna , 2 (virgül, boşluk, 2) eklenmeli.
 
Dolayısıyla BOS_OLANLARI_SIL isimli prosedürde sütun adı değişikliği vs söz konusu olmamalıdır.
Ömer hocam şöyle ki;

B sütununda boş satır silen kod sorusunu
Arşivimde dursun amacıyla sormuştum.
Hatta önceki mesajımdaki “boş satırları silen kodum var” mesjımdaki kodla ilgili bir soruyu bile; bu konu bittikten sonra açacaktım.

Aynı işi yapan kodlar, arşivde aynı yerde muhafaza edilince, bulması kolay oluyor.

Ömer hocam sayfayı yenileyip verdiğiniz kodu değiştirdim. Biraz denemeler yapayım.
Daha sonra konu açacağım.
Teşekkür ederim, emeklerinize sağlık
 
Son düzenleme:
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Konuyu başlatan
Site Üyesi
Katılım
Konu Bilgi
Durum
Çözüldü 
Forum
Excel Makro Soruları
Başlangıç tarihi
Son yanıt tarihi
Cevaplar
12
Geri
Üst