• DİKKAT

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

Ardışık Olmayan ve Tekrar Etmeyen Sayı Üretme

Katılım
17 Aralık 2018
Mesajlar
22
Excel Vers. ve Dili
2010 TR
Merhaba,

Ardışık olmayan ve tekrar etmeyen 1 ile 999.999 aralığında rastgele 8.000 adet sayı nasıl üretebilirim. A1+2 veya 3... olmadan rastgele
 

volki_112

Altın Üye
Katılım
29 Eylül 2023
Mesajlar
834
Excel Vers. ve Dili
2019 Türkçe
Altın Üyelik Bitiş Tarihi
13-12-2029
Merhaba,

Ardışık olmayan ve tekrar etmeyen 1 ile 999.999 aralığında rastgele 8.000 adet sayı nasıl üretebilirim. A1+2 veya 3... olmadan rastgele
istediğin işlemi yapacak vba kodu. açık sayfada A1 den itibaren listeler.
Kod:
Sub GenerateRandomNumbers()
    Dim numList() As Long
    Dim i As Long
    Dim n As Long
    Dim temp As Long
    Dim randIndex As Long
    Dim numCount As Long
    Dim ws As Worksheet

    ' Sayıların sınırı
    n = 999999
    numCount = 8000

    ' Aktif çalışma sayfasını belirle
    Set ws = ActiveSheet
    
    ' 1 ile 999999 arasında ardışık sayıları listele
    ReDim numList(1 To n)
    For i = 1 To n
        numList(i) = i
    Next i

    ' Sayıları karıştırmak (Fisher-Yates algoritması)
    For i = n To 2 Step -1
        randIndex = Int((i - 1 + 1) * Rnd + 1) ' Rastgele indeks
        temp = numList(i)
        numList(i) = numList(randIndex)
        numList(randIndex) = temp
    Next i

    ' İlk 8000 sayıyı aktif sayfaya A1'den başlayarak yaz
    For i = 1 To numCount
        ws.Cells(i, 1).Value = numList(i)
    Next i

    MsgBox numCount & " random numbers generated successfully on the active sheet."
End Sub
 
Katılım
26 Aralık 2008
Mesajlar
1,145
Excel Vers. ve Dili
EXCEL 2016 TÜRKÇE
Altın Üyelik Bitiş Tarihi
23-02-2025
bir de küçükten büyüğe doğru sıralama yapsın
 

volki_112

Altın Üye
Katılım
29 Eylül 2023
Mesajlar
834
Excel Vers. ve Dili
2019 Türkçe
Altın Üyelik Bitiş Tarihi
13-12-2029
bir de küçükten büyüğe doğru sıralama yapsın
Küçükten büyüğe siralama dahil edilmis kod
Kod:
Sub GenerateRandomNumbers()

    Dim numList() As Long

    Dim i As Long

    Dim n As Long

    Dim temp As Long

    Dim randIndex As Long

    Dim numCount As Long

    Dim ws As Worksheet

    ' Sayıların sınırı

    n = 999999

    numCount = 8000

    ' Aktif çalışma sayfasını belirle

    Set ws = ActiveSheet

    

    ' 1 ile 999999 arasında ardışık sayıları listele

    ReDim numList(1 To n)

    For i = 1 To n

        numList(i) = i

    Next i

    ' Sayıları karıştırmak (Fisher-Yates algoritması)

    For i = n To 2 Step -1

        randIndex = Int((i - 1 + 1) * Rnd + 1) ' Rastgele indeks

        temp = numList(i)

        numList(i) = numList(randIndex)

        numList(randIndex) = temp

    Next i

    ' İlk 8000 sayıyı aktif sayfaya A1'den başlayarak yaz

    For i = 1 To numCount

        ws.Cells(i, 1).Value = numList(i)

    Next i

    ' Sıralama işlemi

    With ws.Sort

        .SortFields.Clear

        .SortFields.Add Key:=ws.Range("A1:A" & numCount), Order:=xlAscending

        .SetRange ws.Range("A1:A" & numCount)

        .Header = xlNo

        .MatchCase = False

        .Orientation = xlTopToBottom

        .SortMethod = xlPinYin

        .Apply

    End With

    MsgBox numCount & " random numbers generated and sorted successfully on the active sheet."

End Sub
 

volki_112

Altın Üye
Katılım
29 Eylül 2023
Mesajlar
834
Excel Vers. ve Dili
2019 Türkçe
Altın Üyelik Bitiş Tarihi
13-12-2029
@polis-53 küçükten büyüğe sıralama için daha hızlı kod

Kod:
Sub GenerateRandomNumbers()
    Dim i As Long
    Dim numCount As Long
    Dim ws As Worksheet
    Dim dataArray() As Long
    Dim usedNumbers As Object
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
    numCount = 8000
    Set ws = ActiveSheet
    
    ' Dictionary oluştur
    Set usedNumbers = CreateObject("Scripting.Dictionary")
    
    ' Tek seferde yazılacak dizi için boyut belirleme
    ReDim dataArray(1 To numCount, 1 To 1)
    
    ' Rastgele benzersiz sayıları üret
    Randomize
    i = 1
    Do While i <= numCount
        Dim randNum As Long
        randNum = Int((999999) * Rnd + 1)
        
        ' Eğer sayı daha önce kullanılmadıysa
        If Not usedNumbers.Exists(randNum) Then
            usedNumbers.Add randNum, 1
            dataArray(i, 1) = randNum
            i = i + 1
        End If
    Loop
    
    ' Tüm veriyi tek seferde yaz
    ws.Range("A1:A" & numCount).Value = dataArray
    
    ' Sıralama işlemi
    ws.Range("A1:A" & numCount).Sort Key1:=ws.Range("A1"), Order1:=xlAscending
    
    ' Temizlik
    Set usedNumbers = Nothing
    
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    
    MsgBox numCount & " random numbers generated and sorted successfully."
End Sub
 

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,405
Excel Vers. ve Dili
2007 Türkçe
Merhaba,
Acizane küçük bir ilave:
Ardışık olmayan şartının sağlanması için sayın volki_112'nin paylaştığı son koda aşağıdaki kırmızı kısım eklenebilir.
Rich (BB code):
        If Not usedNumbers.Exists(randNum) And Not usedNumbers.Exists(randNum + 1) Then
            usedNumbers.Add randNum, 1
            usedNumbers.Add randNum + 1, 1
            dataArray(i, 1) = randNum
            i = i + 1
        End If
İyi çalışmalar...
 
Üst