• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

textboxlara en büyük sayıdan başlayarak en büyük 10 sayıyı aldırmak

ismailozkan4224

Altın Üye
Katılım
22 Kasım 2011
Mesajlar
175
Excel Vers. ve Dili
2007 türkçe
değerli arkadaşlar aşağıdaki kodla combobox değişimi ile 10 adet textboxa F2:F200 arasındaki en büyük 10 sayıyı textboxa almak istiyorum. yardımlarınızı beklerim inşallah.

Private Sub ComboBox1_Change()
On Error Resume Next
ComboBox1.List = Application.Transpose(RANGE("f1:ce1"))
Set s1 = Sheets("1")

TextBox1.Value = WorksheetFunction.Max(RANGE("F2:F200"))
TextBox2.Value = WorksheetFunction.Max(RANGE("F2:F200;2"))
TextBox3.Value = WorksheetFunction.Max(RANGE("F2:F200;3"))
TextBox4.Value = WorksheetFunction.Max(RANGE("F2:F200;4"))
TextBox5.Value = WorksheetFunction.Max(RANGE("F2:F200;5"))
TextBox6.Value = WorksheetFunction.Max(RANGE("F2:F200;6"))
TextBox7.Value = WorksheetFunction.Max(RANGE("F2:F200;7"))
TextBox8.Value = WorksheetFunction.Max(RANGE("F2:F200;8"))
TextBox9.Value = WorksheetFunction.Max(RANGE("F2:F200;9"))
TextBox10.Value = WorksheetFunction.Max(RANGE("F2:F200;10"))
Exit Sub
End Sub
 
Merhaba,

TextBox1.Value = WorksheetFunction.Large(Range("F2:F200"), 1)


TextBox1.Value = Application.Large(Range("F2:F200"), 1)

Yazım hataları yapmışsınız. Ayrıca mak formülü yerine büyük fonksiyonunu kullanmanız gerekir. Yukarıdaki 2 örnekten biri gibi yazıp kullanabilirsiniz.

Verileriniz sistematik ilerlediği için aşağıdaki gibi kodları kısaltabilirsiniz.
Kod:
Private Sub ComboBox1_Change()

    Dim S1 As Worksheet, i As Byte

    ComboBox1.List = Application.Transpose(Range("f1:ce1"))
    
    Set S1 = Sheets("1")
    
    For i = 1 To 10
        Controls("TextBox" & i) = Application.Large(Range("F2:F200"), i)
    Next i
    
End Sub

.
 
hayırlı akşamlar ömer bey çok teşekkür ederim yardımlarınız için.
kodu aşağıdaki gibi düzenledim. gayet güzel çalışıyor.ancak formda bu mevcut 8 adet textboxun karşısında bir 8 textbox daha var yani 9-16 numaralı textboxlar.
9 nolu textbox 1 nolu textboxın değer aldığı satırın E sütunu ve aynı satırından değer alacak. tabiki diğer 9-16 arası textboxlar da aynı şekilde. yardım edebilir misiniz?

Private Sub ComboBox1_Change()

Dim S1 As Worksheet, i As Byte

ComboBox1.List = Application.Transpose(RANGE("f1:ce1"))

Set S1 = Sheets("1")

For i = 1 To 8
Controls("TextBox" & i) = Application.Large(RANGE("F2:F200"), i)
Next i
TextBox1.Value = WorksheetFunction.Large(RANGE("F2:F200"), 1) 'F SÜTUNU 12. SATIR
TextBox2.Value = WorksheetFunction.Large(RANGE("F2:F200"), 2) 'F SÜTUNU 11. SATIR
TextBox3.Value = WorksheetFunction.Large(RANGE("F2:F200"), 3) 'F SÜTUNU 10. SATIR
TextBox4.Value = WorksheetFunction.Large(RANGE("F2:F200"), 4) 'F SÜTUNU 9. SATIR
TextBox5.Value = WorksheetFunction.Large(RANGE("F2:F200"), 5) 'F SÜTUNU 8. SATIR
TextBox6.Value = WorksheetFunction.Large(RANGE("F2:F200"), 6) 'F SÜTUNU 7. SATIR
TextBox7.Value = WorksheetFunction.Large(RANGE("F2:F200"), 7) 'F SÜTUNU 6. SATIR
TextBox8.Value = WorksheetFunction.Large(RANGE("F2:F200"), 8) 'F SÜTUNU 5. SATIR


End Sub
 
Veri alırken kod tekrarı yapmışsınız. Döngü yeterliydi.

Eski kodların yerine aşağıdakileri deneyin. Hem birinci hemde ikinci istediğinizi yapacaktır.

Kod:
Private Sub ComboBox1_Change()

    Dim S1 As Worksheet, i As Byte, a As Double, b As Integer
    
    Set S1 = Sheets("1")
    
    ComboBox1.List = Application.Transpose(Range("F1:CE1"))
    
    For i = 1 To 8
    
        a = Application.Large(Range("F2:F200"), i)
        Controls("TextBox" & i) = a
        
        b = WorksheetFunction.Match(a, Range("F2:F200"), 0) + 1
        Controls("TextBox" & i + 8) = Cells(b, "E")
        
    Next i

End Sub

.
 
selamün aleyküm ömer bey
önce özür diliyorum. bilgiyi ben eksik verdim.
textbox 11-20 veri alışını hallettim gibi.
ama combobox f1-ce1 arasından verileri (sütun başlıklarını) alıyor.
textbox 1-10 f2-f200 arasındaki verileri getiriyor. sonra comboboxtan g1 sütunundaki veri seçilince aynı işlemi texbox 1-10 arası g2-g200 arasından verileri alması lazım.ama malesef beceremedim döngüyü...


Private Sub ComboBox1_Change()

Dim S1 As Worksheet, i As Byte

ComboBox1.List = Application.Transpose(RANGE("f1:ce1"))

Set S1 = Sheets("1")

For i = 1 To 10
Controls("TextBox" & i) = Application.Large(RANGE("F2:F200"), i)
Next i
TextBox1.Value = WorksheetFunction.Large(RANGE("F2:F200"), 1) & " - " & Cells(i, 3) 'F SÜTUNU 12. SATIR
TextBox2.Value = WorksheetFunction.Large(RANGE("F2:F200"), 2) 'F SÜTUNU 11. SATIR
TextBox3.Value = WorksheetFunction.Large(RANGE("F2:F200"), 3) 'F SÜTUNU 10. SATIR
TextBox4.Value = WorksheetFunction.Large(RANGE("F2:F200"), 4) 'F SÜTUNU 9. SATIR
TextBox5.Value = WorksheetFunction.Large(RANGE("F2:F200"), 5) 'F SÜTUNU 8. SATIR
TextBox6.Value = WorksheetFunction.Large(RANGE("F2:F200"), 6) 'F SÜTUNU 7. SATIR
TextBox7.Value = WorksheetFunction.Large(RANGE("F2:F200"), 7) 'F SÜTUNU 6. SATIR
TextBox8.Value = WorksheetFunction.Large(RANGE("F2:F200"), 8) 'F SÜTUNU 5. SATIR
TextBox9.Value = WorksheetFunction.Large(RANGE("F2:F200"), 9)
TextBox10.Value = WorksheetFunction.Large(RANGE("F2:F200"), 10)

TextBox11.Value = Cells(i + 1, 5)
TextBox12.Value = Cells(i, 5)
TextBox13.Value = Cells(i - 1, 5)
TextBox14.Value = Cells(i - 2, 5)
TextBox15.Value = Cells(i - 3, 5)
TextBox16.Value = Cells(i - 4, 5)
TextBox17.Value = Cells(i - 5, 5)
TextBox18.Value = Cells(i - 6, 5)
TextBox19.Value = Cells(i - 7, 5)
TextBox20.Value = Cells(i - 8, 5)

End Sub
 
aşağıdaki kodu denedim ama olmadı.
Private Sub ComboBox1_Change()

Dim S1 As Worksheet, i As Byte

ComboBox1.List = Application.Transpose(RANGE("f1:ce1"))

Set S1 = Sheets("1")

For k = 6 To 76 'F1 SÜTUNU - CE1 SÜTUNU ARASI İÇİN
For i = 1 To 10
Controls("TextBox" & i) = Application.Large(RANGE("k & 2:k & 200"), i)
Next i
TextBox1.Value = WorksheetFunction.Large(RANGE("k & 2:k & 200"), 1) & " - " & Cells(i, 3) 'F SÜTUNU 12. SATIR
TextBox2.Value = WorksheetFunction.Large(RANGE("k & 2:k & 200"), 2) 'F SÜTUNU 11. SATIR
TextBox3.Value = WorksheetFunction.Large(RANGE("k & 2:k & 200"), 3) 'F SÜTUNU 10. SATIR
TextBox4.Value = WorksheetFunction.Large(RANGE("k & 2:k & 200"), 4) 'F SÜTUNU 9. SATIR
TextBox5.Value = WorksheetFunction.Large(RANGE("k & 2:k & 200"), 5) 'F SÜTUNU 8. SATIR
TextBox6.Value = WorksheetFunction.Large(RANGE("k & 2:k & 200"), 6) 'F SÜTUNU 7. SATIR
TextBox7.Value = WorksheetFunction.Large(RANGE("k & 2:k & 200"), 7) 'F SÜTUNU 6. SATIR
TextBox8.Value = WorksheetFunction.Large(RANGE("k & 2:k & 200"), 8) 'F SÜTUNU 5. SATIR
TextBox9.Value = WorksheetFunction.Large(RANGE("k & 2:k & 200"), 9) 'F SÜTUNU 4. SATIR
TextBox10.Value = WorksheetFunction.Large(RANGE("k & 2:k & 200"), 10) 'F SÜTUNU 3. SATIR

TextBox11.Value = Cells(i + 1, 5)
TextBox12.Value = Cells(i, 5)
TextBox13.Value = Cells(i - 1, 5)
TextBox14.Value = Cells(i - 2, 5)
TextBox15.Value = Cells(i - 3, 5)
TextBox16.Value = Cells(i - 4, 5)
TextBox17.Value = Cells(i - 5, 5)
TextBox18.Value = Cells(i - 6, 5)
TextBox19.Value = Cells(i - 7, 5)
TextBox20.Value = Cells(i - 8, 5)
End Sub
 
sizin kodun uyarlanmış halidir. ama dediğim gibi sütun değişince değerlerin güncellenmesi gerekiyor. ancak yapamadım. sütunlarımız f1-ce1 arası yani 76 adet sütun var.

Private Sub ComboBox1_Change()

Dim S1 As Worksheet, i As Byte, a As Double, b As Integer

Set S1 = Sheets("1")

ComboBox1.List = Application.Transpose(RANGE("F1:CE1"))

For i = 1 To 10

a = Application.Large(RANGE("F2:F200"), i)
Controls("TextBox" & i) = a

b = WorksheetFunction.Match(a, RANGE("F2:F200"), 0) + 1
Controls("TextBox" & i + 10) = Cells(b, "E")

Next i

TextBox11.Value = Cells(i + 1, 5)
TextBox12.Value = Cells(i, 5)
TextBox13.Value = Cells(i - 1, 5)
TextBox14.Value = Cells(i - 2, 5)
TextBox15.Value = Cells(i - 3, 5)
TextBox16.Value = Cells(i - 4, 5)
TextBox17.Value = Cells(i - 5, 5)
TextBox18.Value = Cells(i - 6, 5)
TextBox19.Value = Cells(i - 7, 5)
TextBox20.Value = Cells(i - 8, 5)
End Sub
 
Sorularınızı örnek dosya ile destekleyip detaylı açıklamanızı rica ederim, bu şekilde daha kısa ve net cevaplar alırsınız.

Öncelikle combobox1'e veri alırken kullandığınız kodları change altına değil Initialize altına yazmanızda fayda var. Aşağıdaki örnekte kırmızı satırı eski kod satırından silin ve aşağıdaki kod bloğunu userforma ekleyin.

Kod:
Private Sub UserForm_Initialize()
    [COLOR="Red"]ComboBox1.List = Application.Transpose(Range("F1:CE1"))[/COLOR]
End Sub

Diğer isteğiniz olan seçilen sütuna göre işlem yapmayla ilgili bir örnek ekliyorum. Örnek üzerinden diğer mesajlardaki örnek kodlarda aynı mantıkla ilerleyebilirsiniz.

s değişleniyle sütun indisini bulduktan sonra RANGE("F2:F200") yerlerine Range(Cells(2, s), Cells(200, s)) yazmanız yeterli olur. Aşağıdaki örnek gibi.

Kod:
Private Sub ComboBox1_Change()

 Dim S1 As Worksheet, i As Byte, a As Double, b As Integer, s As Integer
    
 Set S1 = Sheets("1")

[COLOR="Blue"] s = ComboBox1.ListIndex + 6 'seçilen değerin hangi sütunda olduğunu bulur
    
 TextBox1.Value = WorksheetFunction.Large(Range(Cells(2, s), Cells(200, s)), 1)[/COLOR]

End Sub

.
 
okul ligi dosyası

selamün aleyküm ömer bey dosyayı ekledim yardım edebilirseniz sevinirim. şimdiden teşekkürler.
dosyayı ekleyemedim ama linkini atıyorum. uğraşım okul öğrencileri içindir.

http://s6.dosya.tc/server8/lyir9d/Okul-Ligi.rar.html

Verilerim 1-2-3 ve 4 . sayfalardadır. Sistem bütün sayfalarda aynı olup aynı şekilde çalışacaktır.
Her sayfa içindeki veriler 2-501 arasındadır.
Bu 4 sayfanın sütun başlıkları (F1:CE1) arasındadır. Combobox1 verileri buradan almaktadır.
Combobox1 ile bir veri seçildiğinde
Textbox1-5 arası sabah grubunu temsil etmektedir.
Textbox1=(2-51) arasındaki en büyük sayıyı
Textbox2=(52-101) arasındaki en büyük sayıyı
Textbox3=(102-151) arasındaki en büyük sayıyı
Textbox4=(152-201) arasındaki en büyük sayıyı
Textbox5=(202-251) arasındaki en büyük sayıyı ifade edecektir.
Textbox1-5 arasında en büyük olan sayı kırmızı olacaktır. (1. Lik için)

Textbox6-10 arası öğlen grubunu temsil etmektedir.
Textbox6=(252-301) arasındaki en büyük sayıyı
Textbox7=(302-351) arasındaki en büyük sayıyı
Textbox8=(352-401) arasındaki en büyük sayıyı
Textbox9=(402-451) arasındaki en büyük sayıyı
Textbox10=(452-501) arasındaki en büyük sayıyı ifade edecektir.
Textbox6-10 arasında en büyük olan sayı kırmızı olacaktır. (1. Lik için)

Text1-5 hangi satırdan veri alıyorsa
textbox11-15 aynı satırın “E” sütunundan veri alacak.
Textbox21-25 aynı satırın “C” sütunundan veri alacak.
Textbox31-35 aynı satırın “B” sütunundan veri alacak.

Text6-10 hangi satırdan veri alıyorsa
textbox16-20 aynı satırın “E” sütunundan veri alacak.
Textbox26-30 aynı satırın “C” sütunundan veri alacak.
Textbox36-40 aynı satırın “B” sütunundan veri alacak.

Temizlikformu tıklandığında
Temizlik formu açılacak. Öğrenci formu butonu tıklandığında o form açılıp temizlik formu kapanacak. Öğrenci formundan temizlik formuna geçebildim ama diğerini yapamadım.
 
Son düzenleme:
user form initialize ve combobox1 kodlarım aşağıdadır.

Private Sub UserForm_Initialize()
ComboBox1.List = Application.Transpose(RANGE("F1:CE1"))
Do
'CommandButton5
Label1.Caption = "TARİH :" & Format(Now, "dd.mm.yyyy") & vbLf & "SAAT :" & Format(Now, "hh:mm:ss") & vbLf
Label2.Caption = " İSMAİL ÖZKAN " & vbLf & " SIRAÇ AYDINTAŞBAŞ İLKOKULU "
Label3.Caption = " SIRAÇ'TA BAHAR "
DoEvents
Loop
End Sub

Private Sub ComboBox1_Change()
Dim S1 As Worksheet, i As Byte, a As Double, b As Integer, s As Integer
Set S1 = Sheets("1")
s = ComboBox1.ListIndex + 6 'seçilen değerin hangi sütunda olduğunu bulur
TextBox1.Value = WorksheetFunction.Large(RANGE(Cells(2, s), Cells(200, s)), 1)
TextBox2.Value = WorksheetFunction.Large(RANGE(Cells(2, s), Cells(200, s)), 2)
TextBox3.Value = WorksheetFunction.Large(RANGE(Cells(2, s), Cells(200, s)), 3)
TextBox4.Value = WorksheetFunction.Large(RANGE(Cells(2, s), Cells(200, s)), 4)
TextBox5.Value = WorksheetFunction.Large(RANGE(Cells(2, s), Cells(200, s)), 5)

t = ComboBox1.ListIndex + 6 'seçilen değerin hangi sütunda olduğunu bulur
TextBox6.Value = WorksheetFunction.Large(RANGE(Cells(201, t), Cells(400, t)), 1)
TextBox7.Value = WorksheetFunction.Large(RANGE(Cells(201, t), Cells(400, t)), 2)
TextBox8.Value = WorksheetFunction.Large(RANGE(Cells(201, t), Cells(400, t)), 3)
TextBox9.Value = WorksheetFunction.Large(RANGE(Cells(201, t), Cells(400, t)), 4)
TextBox10.Value = WorksheetFunction.Large(RANGE(Cells(201, t), Cells(400, t)), 5)

Set S2 = Sheets("PUANLAR")
TextBox41.Value = S2.Cells(3, 2).Value
TextBox42.Value = S2.Cells(3, 3).Value
TextBox43.Value = S2.Cells(3, 4).Value
TextBox44.Value = S2.Cells(3, 5).Value
TextBox45.Value = S2.Cells(3, 6).Value

End Sub
 
iyi akşamlar ömer bey isteğim çok mu fazla? hakkınızı helal edin ama buna ihtiyacım var.
 
Her sayfa içindeki veriler 2-501 arasındadır.

Textbox1=(2-51) arasındaki en büyük sayıyı
Textbox2=(52-101) arasındaki en büyük sayıyı
Textbox3=(102-151) arasındaki en büyük sayıyı
Textbox4=(152-201) arasındaki en büyük sayıyı
Textbox5=(202-251) arasındaki en büyük sayıyı ifade edecektir.

Bütün textboxlara ilgili aralıktaki en büyük sayı gelsin diye yazmışsınız. Fakat userformda bu alanlara başlık olarak;
Etkinlik 1. Si
Etkinlik 2. Si
Etkinlik 3. Si
Etkinlik 4. Si
Etkinlik 5. Si

olarak yazmışsınız. Bu durumda soru yanlış mı yoksa formdaki başlıklar mı yanlış.

Ayrıca "Her sayfa içindeki veriler 2-501 arasındadır." yazmışsınız fakat gördüğüm kadarıyla 1 nolu sayafada tablo 590. satıra kadar ilerliyor.

İşleme başladıktan sonra tekrardan silip başa dönmemek için, sorunuzu tekrar gözden geçirip yukarıdaki tutarsızlıklarla ilgili bilgi vermenizi rica ederim.

.
 
form üzerindeki başlıklar düzenlenmedi.
ümit katık olursa elbet karın doyar...
bir çözüm önerisi bekliyorum arkadaşlar.
 
İsmail bey,

#12 mesajdaki sorular hakkında bir dönüş yapmadınız.?
Kendi adıma; konu tarafımdan anlaşılmamışken nasıl ilerleyebiliriz.

.
 
İsmail bey,

#12 mesajdaki sorular hakkında bir dönüş yapmadınız.?
Kendi adıma; konu tarafımdan anlaşılmamışken nasıl ilerleyebiliriz.

.

ömer bey yeni bilgisayarı açtım. ve mesajınızı yeni gördüm. ilginiz için teşekkürler. etkinlik birincisi doğru ama sonrakileri ben düzenleyeceğim. ama benim söylediğim kriterlere göre sıralayacak ve diğer textboxlara o verinin olduğu satırın diğer sütunundaki verileri getirecek. şu kodu denedim ama bu kod textbox1 içindeki rakamı satır numarası olarak görüyor. yani işlem yanlış gidiyor.
TextBox11.Value = Cells(WorksheetFunction.Large(RANGE(Cells(2, s), Cells(200, s)), 1), 5)
 
Son düzenleme:
Textbox 1,2,3,4 ve 5 lere belirttiğiniz aralıklardaki en büyük değerler mi gelecek?
 
1. sayafada 2-200 satırları arasında 5 adet 1. sınıf var ve sabahçı onların birincileri ayrı olacak.
yine 1 .sayfada 200-400 satırları arasında da 5 adet 1. sınıf var fakat öğlen grubu. bunları ayrı ayrı değerlendireceğiz. yani her grubun 1. si ayrı ayrı olacak.
 
Textbox 1,2,3,4 ve 5 lere belirttiğiniz aralıklardaki en büyük değerler mi gelecek?

evet. doğrudur. ayrıca sayfadaki satır sayısını dikkate almayın. 2-200 ve 201-400 arası olsun. bir değişiklik olursa ben uyarlayabilirim inşallah.
 
Son düzenleme:
Bu şekilde deneyin.
Puanlar kısmına dokunmadım, bu bölümle ilgili sizin yazdığınız kodlar en altta.

Kod:
Private Sub ComboBox1_Change()

    Dim i As Byte, a As Double, b As Integer, sut As Integer
    Dim Wf As WorksheetFunction, alan As Range, S2 As Worksheet
    
    Set Wf = WorksheetFunction
    sut = ComboBox1.ListIndex + 6
    
    sat = 1
    For i = 1 To 10

        Set alan = Range(Cells(sat + 1, sut), Cells(sat + 50, sut))
 
        a = Wf.Max(alan)
        Controls("TextBox" & i) = a
        
        If Wf.CountIf(alan, a) > 0 Then
            b = Wf.Match(a, alan, 0) + sat
            Controls("TextBox" & i + 10) = Cells(b, "E")
            Controls("TextBox" & i + 20) = Cells(b, "C")
            Controls("TextBox" & i + 30) = Cells(b, "B")
        End If
        
        sat = i * 50 + 1
        
    Next i
        
    Set S2 = Sheets("PUANLAR")
    TextBox41.Value = S2.Cells(3, 2).Value
    TextBox42.Value = S2.Cells(3, 3).Value
    TextBox43.Value = S2.Cells(3, 4).Value
    TextBox44.Value = S2.Cells(3, 5).Value
    TextBox45.Value = S2.Cells(3, 6).Value

End Sub


.
 
Geri
Üst