как выбрать случайное значение из диапазона по условию VBA - PullRequest
0 голосов
/ 06 января 2019


Привет всем.

У меня есть ряд продуктов, которые я хочу выбирать из 10 рандомных каждый день по условию.

если продукт был выбран за последние 30 дней, то код выберет другой продукт, который не был выбран за последние 30 дней.

Я долго пытаюсь думать о коде, и у меня ничего нет!

Пожалуйста, помогите мне!

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Спасибо за помощь.

Я нашел решение, которое отлично работает:

Sub Action_1()
Dim DATA_1, DATA_2 As Range
Set DATA_1 = Sheets("Data").Range("b4:b53")
Set DATA_2 = Sheets("Data").Range("b54:b253")

Sheets("count").Select
irow = 2
' loop for the catagory that need to count one a month
For irow = 2 To 5
' checking if the product was count this month and removing duplicate
    Do Until Cells(irow, 7) = 0 And Cells(irow, 8) = 0
        Cells(irow, 1).Value = Evaluate("=INDEX(DATA_1,RANDBETWEEN(1,rows(DATA_1)),1)")
    Loop
Next
irow = 6
' loop for the catagory that need to count one a qurter
For irow = 6 To 11
' checking if the product was count this qurter and removing duplicate
    Do Until Cells(irow, 7) = 0 And Cells(irow, 8) = 0
        Cells(irow, 1).Value = Evaluate("=INDEX(DATA_2,RANDBETWEEN(1,rows(DATA_2)),1)")
    Loop
Next
End Sub

Для работы с этим кодом требуется отдельный лист:

https://i.stack.imgur.com/tGzln.jpg

0 голосов
/ 07 января 2019

я пытался ответить на ваш вопрос ... я написал этот код, который работает ... в этом коде я использовал два листа

1 лист "продукт", где продукты в столбце A

2 лист "productUsed", где есть все продукты, использованные с датой.

Держите меня в курсе

На этом изображении (лист продукта) у нас есть продукты (я использовал 100 продуктов для теста)

enter image description here

на этом изображении (лист productUsed) мы имеем результат

enter image description here

код следования:

Sub test()

'i use this variable to get the difference between the dates(number of the days).
Dim d As String

Dim item As Boolean
Dim productChoosed As String
Dim numProduct, i, c, numChoosedProduct As Long
Dim wsProductUsed As Worksheet

Set wsProductUsed = Worksheets("productUsed")

'count the product's number into sheet product
numProduct = Cells(rows.count, 1).End(xlUp).Row - 1

For i = 1 To 10
    item = False ' use this variable to understand if the item choosed random is present or no into list of the product used
    productChoosed = WorksheetFunction.RandBetween(2, numProduct) 'choose product from 2 to max num product into productsheet
    With wsProductUsed
        'count the product's number coosed into sheet productUsed
        numChoosedProduct = .Cells(.rows.count, 1).End(xlUp).Row

        For c = 1 To numChoosedProduct
            If (Cells(productChoosed, 1) = .Cells(c, 1)) Then
                d = CDate(Date) - CDate(.Cells(c, 2))
                item = True

                If d < 30 Then
                    i = i - 1
                    c = numChoosedProduct ' exit for with c index
                Else
                    .Cells(c, 2) = Date
                    c = numChoosedProduct ' exit for with c index
                End If
            End If
        Next c
        'if new item never choosed i add it into list of items choosed
        If item = False Then
           .Cells(numChoosedProduct + 1, 1) = Cells(productChoosed, 1)
           .Cells(numChoosedProduct + 1, 2) = Date
        End If
    End With
Next i

'auto fit the columns
Sheets("productUsed").Columns.AutoFit


End Sub

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...