Kullanılmayan sayıları ListBox'ta Listelemek

Katılım
20 Eylül 2005
Mesajlar
216
Excel Vers. ve Dili
Excel 2003 Türkçe
A1:A1500 Eriminde Öğrenci Numaraları var.
Yeni gelen bir öğrenciye Numara vermem gerekiyor.
1 ile 2000 arasında ve başka öğrenci tarafından kullanılmayan bir numarayı listboxta görüp TextBox'a yazmak istiyorum.
Bu amaçla,
Bir butonu tıkladığımda Kullanılmayan numaralar ListBox'ta Listelensin.
 

Kemal Demir

Özel Üye
Katılım
29 Temmuz 2004
Mesajlar
2,108
Sn.orrhankaya

kanımca elinizdeki verilerle bir örnek dosya yollamıs olsaydınız sıze onerılecek cevaplar daha kullanıslı ve daha sağlıklı olacaktır.
Anladıgım kadarı ile küçük bir örnek dosya yolluyorum.Umarım size fikir verebilir.
 
Katılım
20 Eylül 2005
Mesajlar
216
Excel Vers. ve Dili
Excel 2003 Türkçe
Aynı Şekilde,
İkici bir butonu tıkladığımda Mükerrer numaraları da Listbox'ta listeleyebilr miyim?
 
Katılım
20 Eylül 2005
Mesajlar
216
Excel Vers. ve Dili
Excel 2003 Türkçe
Sayın Kemaldemir Teşekkür ederim.
Hatalı sonuçlar listeliyor. Örneğin 5 ve 6 Numaralar A Sütunun da var ama onu da listelemiş
 
Katılım
20 Eylül 2005
Mesajlar
216
Excel Vers. ve Dili
Excel 2003 Türkçe
Kemaldemir'in yolladığı son örnekten bahsediyorum.
Kullanılan sayıları da ListBox'ta listeliyor.
 

Kemal Demir

Özel Üye
Katılım
29 Temmuz 2004
Mesajlar
2,108
sn.orrhankaya

Biraz beklettim ama sonunda oldu.Gerçi kod daha profosyonelce yazılabilirdi.

Umarım bu sefer yaptıgım calısma işinize yarar.

NOT:"veysel ßey'in daha önceki calısmasından bir kaç kod satırını kullandım"

İyi Çalışmalar.
 
Son düzenleme:
Katılım
20 Eylül 2005
Mesajlar
216
Excel Vers. ve Dili
Excel 2003 Türkçe
Ben daha önce aşağıdaki kodu kullanıyordum. Ama en az bir kaç dakika sürüyordu. Başka bir sayfa işgal etmeden ve daha hızlı bir kod arıyordum. Gönderdiğinz kod yeteri kadar hızlı. İşimi görür. Teşekkür ederim. Ancak başka bir sayfa işgal etmeden doğrudan listbox'a aktar sa iyi olurdu ama neyse buna şükür.

Private Sub CommandButton2_Click()
Columns("A:A").ClearContents
Dim i As Integer
Dim k As Integer
For i = 2 To 2000
k = k + 1
Sheets("NumaraTest").Range("B1") = k + 1
If Sheets("NumaraTest").Range("D1") > 0 Then
Sheets("NumaraTest").Range("D1").Copy
Cells(i, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues
End If
Next i
Application.CutCopyMode = False
Range("A2:A2000").Sort Key1:=Range("A2") 'Sıralar

End Sub
 

Kemal Demir

Özel Üye
Katılım
29 Temmuz 2004
Mesajlar
2,108
sn.orrhan kaya

Elimden geleni yapmaya calıstım.

Zannedersem sizin elinizden gelen daha cok sey var.

Başarılar.
 

Kemal Demir

Özel Üye
Katılım
29 Temmuz 2004
Mesajlar
2,108
Ben daha önce aşağıdaki kodu kullanıyordum. Ama en az bir kaç dakika sürüyordu. Başka bir sayfa işgal etmeden ve daha hızlı bir kod arıyordum. Gönderdiğinz kod yeteri kadar hızlı. İşimi görür. Teşekkür ederim. Ancak başka bir sayfa işgal etmeden doğrudan listbox'a aktar sa iyi olurdu ama neyse buna şükür.
Örnek içerisinde ki kodda mevcut

Listbox1.additem "okutulacakyer"
 

Ali

Uzman
Katılım
21 Temmuz 2005
Mesajlar
7,895
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
Levent Bey'in daha önce hazırlamış olduğu bir dosyadır.Size fikir verecektir güzel düşünülmüş bir çalışma kendisinin ellerine sağlık.
 
Katılım
6 Şubat 2005
Mesajlar
1,467
Dün soruyu görmüş, ilgimi çekmiş ama uğraşamamıştım. Aşağıdaki kod işininizi hızlandırır.
ActiveWorkbook.Sheets.Add Before:=Worksheets(Worksheets.Count)
Sheets("Sayfa1").Range("A1").CurrentRegion.Copy
Sheets(Worksheets.Count - 1).Range("A1").PasteSpecial
Application.CutCopyMode = False
Sheets(Worksheets.Count - 1).Activate
Sheets(Worksheets.Count - 1).Range("A1").Select
Sheets(Worksheets.Count - 1).Range("A1").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
say = Sheets(Worksheets.Count - 1).Range("A1").CurrentRegion.Rows.Count
If Range("A1") > 1 Then
For k = 1 To Range("A1") - 1
ComboBox1.AddItem k
Next
End If
For i = 2 To say
fark = Range("A" & i) - Range("A" & i - 1)
If fark > 1 Then
For e = Range("A" & i - 1) + 1 To Range("A" & i) - 1
ComboBox1.AddItem e
Next
End If
Next
If Range("a" & say) < 2000 Then
For t = Range("a" & say) + 1 To 2000
ComboBox1.AddItem t
Next
End If

Sheets("Sayfa1").Activate
Application.DisplayAlerts = False
Worksheets(Worksheets.Count - 1).Delete
Application.DisplayAlerts = True
 
Katılım
6 Şubat 2005
Mesajlar
1,467
Dizi kullanılarak daha kısa bir kodla da halledilebilinir.
say = Sheets("Sayfa1").Range("a1").CurrentRegion.Rows.Count
ReDim a(1 To 2000)
For i = 1 To say

a(Range("a" & i)) = Range("a" & i)
Next
For f = 1 To 2000
If a(f) = "" Then
ComboBox1.AddItem f
End If
Next
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,534
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Selamlar,

Örnek olarak eklemiş olduğunuz dosya üzerinde gerekli düzenlemeyi yaptım incelermisiniz. Umarım işinize yarar.
 
Katılım
20 Eylül 2005
Mesajlar
216
Excel Vers. ve Dili
Excel 2003 Türkçe
Sayın COST_CONTROL'ün gönderdiği kod kısa basit anlaşılır. Başka bir sayfaya yada sütuna aktarma ihtiyacı duyulmaz. Çok hızlı değil, bekletiyor.

Sayın omerceri'nin gönderdiği kod, kısa, basit ve çok hızlı. Ancak canı istediğinde çalışıyor, canı istemezse çalışmıyor. Üzerinde 4 saat uğraştım. For i döngüsü için Dim i As Integer ekledim. Hücreleri biçimlendirdim. Daha bir çok yol denedim. Dizi kullanılarak yazılan kod'ta A Sütununa başlık satırı yazıldığında çalışmıyor, bunu iki satırlık kod ekleyerek çözdüm. Ama yine de kullanamadım.

Tüm emeği geçenlere en içten teşekkürlerimi sunuyorum.
 
Katılım
6 Şubat 2005
Mesajlar
1,467
Biraz geciktim.
Ekte düzeltilmiş örneği gönderiyorum.
"Ancak canı istediğinde çalışıyor, canı istemezse çalışmıyor."
Demişsisiniz, bu konuda biraz açıklama yaparsanız
 
Üst