tek butonla sütunlarda rastgele sayı üretmek

Muhammet Okumuş

Destek Ekibi
Destek Ekibi
Katılım
28 Eylül 2007
Mesajlar
3,974
Excel Vers. ve Dili
2013 Türkçe
yapılması gereken yedi butunu tek butona bağlamak
 

Muhammet Okumuş

Destek Ekibi
Destek Ekibi
Katılım
28 Eylül 2007
Mesajlar
3,974
Excel Vers. ve Dili
2013 Türkçe
ama ben sütunlarda tek tek istiyorum.bir kez bastığımızda önce b, sonra bastığımda c, d .e bu şekilde olacak
 

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,470
Excel Vers. ve Dili
Office 2010 & 2013 tr
Kodları A20 hücresi şartına bağladım. Hücre boşsa 1. makro, 1'se 2. makro, 2'yse 3. makra çalışıyor. Bu şekilde sona kadar gidiyor. İstediğin gibi her tıklamada ayrı bir kod çalışıyor.
 

Ekli dosyalar

Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
sn mutlu okumuş benim anladığı
sütunlara gelecek sayıların birbirine eşit olabileceği ve rastgele sıralı olacağı yönünde. buna göre kodlar aşağıdaki fonksiyondan yararlanarak düzenlenebilir.

Kod:
Function RastgeleRakamlar(KacAdetSayi As Long, EnKucukSayi As Long, EnBuyukSayi As Long) As Variant
'Benzersiz Rastgele Sayılar Üretir.
'// KacAdetSayi   : KaçAdet Sayı Üretilecek
'// EnKüçükSayi   : Alt Sınırımız var ise kaç
'// EnBüyükSayi   : Üst Sınırımız var ise kaç
'// Data = BenzersizRakamlar(5, 20, 100)    ' 20 ila 100 arasında 5 adet sayı üret.

Dim RandColl As Collection, varTemp() As Long
Dim k&, i&, j&
RastgeleRakamlar = False
  
If KacAdetSayi < 1 Then Exit Function
If EnKucukSayi > EnBuyukSayi Then Exit Function
If KacAdetSayi > (EnBuyukSayi - EnKucukSayi + 1) Then Exit Function

Set RandColl = New Collection
Randomize
Do
  i = CLng(Rnd * (EnBuyukSayi - EnKucukSayi) + EnKucukSayi)
  RandColl.Add i
Loop Until RandColl.Count = KacAdetSayi

ReDim varTemp(1 To KacAdetSayi)
For i = 1 To KacAdetSayi
  varTemp(i) = RandColl(i)
Next i
Set RandColl = Nothing
RastgeleRakamlar = varTemp
Erase varTemp
k = 0: i = 0: j = 0
'*****www.excel.wTr***********
End Function
Kod:
Sub Test()
Data = RastgeleRakamlar(5, 20, 100)
For i = 1 To 5
  msj = msj & Data(i) & vbNewLine
Next i
MsgBox msj
End Sub
 

Muhammet Okumuş

Destek Ekibi
Destek Ekibi
Katılım
28 Eylül 2007
Mesajlar
3,974
Excel Vers. ve Dili
2013 Türkçe
iki tane kod yazmışsın.bunları nasıl kullanacağım.nereye yapıştıracağım.neden iki tane ayrı ayrı yazdınız.makro hakkında biraz bilgi verebilirmisiniz
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,614
Excel Vers. ve Dili
Pro Plus 2021
Kod:
Sub sayiUretim()
    Dim a() As Integer
    For x = 2 To 8
        If Cells(1, x) = "" Then sut = x: Exit For
    Next x

    If sut = "" Then
        MsgBox "Bütün Sütunlar Dolduğu İçin Temizleme Butonuna Basın Yeniden Deneyin"
        Exit Sub
    End If

    Columns(sut).ClearContents

    ReDim a(1 To [a1]) As Integer
    For x = 1 To [a1]: a(x) = x: Next x
    Randomize Timer

    For tekrar = 1 To 3 'Dizi elemanları arasında 3 kez yer değiştirme yapılıyor.
        For x = 1 To [a1]
            y = Int([a1].Value * Rnd + 1)
            tmp = a(x)
            a(x) = a(y)
            a(y) = tmp
        Next x
    Next tekrar

    For x = 1 To [a2]
        Cells(x, sut) = a(x)
    Next x
    Erase a
    MsgBox "İstediğiniz Yerleştirme İşlemi [" & Chr(sut + 64) & "] Sütununa Yapıldı."
End Sub
 

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,470
Excel Vers. ve Dili
Office 2010 & 2013 tr
Syn. muokumuş,
7 nolu msjdaki dosyayı deneyin. İstediğiniz gibi her tıklamada bir sütun doluyor.
 

Muhammet Okumuş

Destek Ekibi
Destek Ekibi
Katılım
28 Eylül 2007
Mesajlar
3,974
Excel Vers. ve Dili
2013 Türkçe
leumrruk şimdi olmuş.veyselemernin kodalrı debug diye uyarı veriyor
 

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,470
Excel Vers. ve Dili
Office 2010 & 2013 tr
leumrruk şimdi olmuş.veyselemernin kodalrı debug diye uyarı veriyor
Syn. muokumuş,
Aşağıda Veysel Bey'in kodlarının bulunduğu dosya var. Gayet güzel çalışıyor. Kopyalarken bir hata yapmış olmalısınız.
Bunu kullanmanızı tavsiye ederim. Bütün işi tek kodda halletmiş.
 

Ekli dosyalar

Son düzenleme:

Muhammet Okumuş

Destek Ekibi
Destek Ekibi
Katılım
28 Eylül 2007
Mesajlar
3,974
Excel Vers. ve Dili
2013 Türkçe
Evet bu kez olmuş.teşekkür ederim.ama uyarı olmasaydı daha güzel olurdu
 

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,470
Excel Vers. ve Dili
Office 2010 & 2013 tr
Evet bu kez olmuş.teşekkür ederim.ama uyarı olmasaydı daha güzel olurdu
Dosyadaki mesajı kaldırdım, dosyayı tekrar indirip yeniden deneyebilirsiniz.
Bu benim içinde güzel bir kaynak oldu.
Syn. Veyselemre'ye paylaşımından dolayı teşekkür ederim.
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Kod:
Sub SayıÜret()
Dim CSf As Worksheet:                         Set CSf = ThisWorkbook.Sheets("Sayfa1")
Dim data As Variant, KaçAdet As Long, EnKüçük As Long, EnBüyük As Long
Dim İlkSütun, SonSütun, BoşSütun
Dim sütunNo As Integer

With CSf
  If .Cells(6, "B") = "" Then .Cells(6, "B") = .Cells(4, "B")
  KaçAdet = .Cells(1, "B")
  EnKüçük = .Cells(2, "B")
  EnBüyük = .Cells(3, "B")

    
  
  If .Cells(4, "B") >= .Cells(6, "B") Or .Cells(6, "B") <= .Cells(5, "B") Then
    data = RastgeleRakamlar(KaçAdet, EnKüçük, EnBüyük)
    [COLOR=Red][B]If VarType(data) = vbBoolean Then Exit Sub[/B][/COLOR]
    For i = 1 To KaçAdet
      .Cells(i, .Cells(6, "B")) = data(i)
    Next i
    Erase data
    .Cells(6, "B") = .Cells(6, "B") + 1
  Else
    MsgBox "En fazla " & .Cells(5, "B") & " Sütuna kadar değer atanabilir. Son sütun noyu değiştiriniz"
  End If
End With
Set CSf = Nothing
End Sub
Sub Temizle()
Dim CSf As Worksheet:                         Set CSf = ThisWorkbook.Sheets("Sayfa1")
With CSf
   .Range(.Cells(1, 3), .Cells(52, .Cells(2, 256).End(xlToLeft).Column)) = Empty
   .Cells(6, "B") = Empty
End With
Set CSf = Nothing
End Sub


Function RastgeleRakamlar(KacAdetSayi As Long, EnKucukSayi As Long, EnBuyukSayi As Long) As Variant
'Benzersiz Rastgele Sayılar Üretir.
'// KacAdetSayi   : KaçAdet Sayı Üretilecek
'// EnKüçükSayi   : Alt Sınırımız var ise kaç
'// EnBüyükSayi   : Üst Sınırımız var ise kaç
'// Data = BenzersizRakamlar(5, 20, 100)    ' 20 ila 100 arasında 5 adet sayı üret.

Dim RandColl As Collection, varTemp() As Long
Dim k&, i&, j&
RastgeleRakamlar = False
  
If KacAdetSayi < 1 Then Exit Function
If EnKucukSayi > EnBuyukSayi Then Exit Function

Set RandColl = New Collection
Randomize
Do
  i = CLng(Rnd * (EnBuyukSayi - EnKucukSayi) + EnKucukSayi)
  RandColl.Add i
Loop Until RandColl.Count = KacAdetSayi

ReDim varTemp(1 To KacAdetSayi)
For i = 1 To KacAdetSayi
  varTemp(i) = RandColl(i)
Next i
Set RandColl = Nothing
RastgeleRakamlar = varTemp
Erase varTemp
k = 0: i = 0: j = 0
'*****www.excel.wTr***********
End Function
en büyük sayı en küçük sayıdan küçük girilince debug hatası almamak için kod eklendi.
 

Ekli dosyalar

Son düzenleme:
Üst