• DİKKAT

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

tek butonla sütunlarda rastgele sayı üretmek

ama ben sütunlarda tek tek istiyorum.bir kez bastığımızda önce b, sonra bastığımda c, d .e bu şekilde olacak
 
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

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
 
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
 
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
 
Syn. muokumuş,
7 nolu msjdaki dosyayı deneyin. İstediğiniz gibi her tıklamada bir sütun doluyor.
 
leumrruk şimdi olmuş.veyselemernin kodalrı debug diye uyarı veriyor
 
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:
Evet bu kez olmuş.teşekkür ederim.ama uyarı olmasaydı daha güzel olurdu
 
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.
 
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:
Geri
Üst