Страницы: 1
RSS
На основании заполненных ячеек автоматически заполнять три столбца
 
Ребята, всем привет ))
Очень хочется упростить себе работу ручками при подготовке рекламных материалов.

Сделала вот такую табличку, теперь ломаю голову, как автоматически заполнить три последних столбика )
Столбики с D:D по K:K заполняются руками в процессе работы. Одинаковых ID в разных столбиках, а так же разных ID в одном столбике не бывает.

Далее заполняются ячейки M2 и N2. В M2 мы указываем нужный нам ID, в N2 необходимое количество дополнительных ключевых слов (КС).
На основании указанных значений нужно, что бы автоматически заполнились столбики: P:P, R:R, T:T.
P:P
Список НЕ использованных КС из столбика C:C для конкретного ID. ID может быть в любом из столбцов с D:D по K:K.
R:R
Список дополнительных КС из столбика A:A в рандомном порядке. Количество КС берем в зависимости от значения в ячейке N2. Выборка должна быть произвольной.
T:T
Объединенный список, состоящий из списков из столбцов P:P и R:R, перемешанный в произвольном порядке.

Сделала три примера для наглядности.
Буду рада вашей помощи ))



 
не понятное что-то получилось)
Код
Sub mrshkei()
Dim arr, arr2, i As Long, n As Long, lr As Long, lr2 As Long, x1 As Long, x2 As Long
Dim col As New Collection, col2 As New Collection, col3 As New Collection, j1 As Long, j2 As Long, r As Long
    x1 = Range("M2"): x2 = Range("N2")
    lr = Cells(Rows.Count, 3).End(xlUp).Row: lr2 = Cells(Rows.Count, 1).End(xlUp).Row
    j1 = 2: j2 = 2
    For i = 2 To lr
        x = Application.WorksheetFunction.CountIf(Range(Cells(i, 4), Cells(i, 11)), x1)
        If x = 0 Then
            Cells(j1, 16) = Cells(i, 3): j1 = j1 + 1
            On Error Resume Next
            col2.Add Cells(i, 3), CStr(Cells(i, 3))
        End If
    Next i
        For i = 1 To 99999
        r = WorksheetFunction.RandBetween(2, lr2)
            On Error Resume Next
            col2.Add Cells(r, 1), CStr(Cells(r, 1))
            col.Add Cells(r, 1), CStr(Cells(r, 1))
            If col.Count = x2 Then
                For n = 1 To col.Count
                    Cells(j2, 18) = col(n): j2 = j2 + 1
                Next n
            Exit For
            End If
        Next i
        
        For i = 1 To 99999
        r = WorksheetFunction.RandBetween(1, col2.Count)
            On Error Resume Next
            col3.Add r, CStr(r)
            If col3.Count = col2.Count Then
                For n = 1 To col3.Count
                    Cells(n + 1, 20) = col2(col3(n))
                Next n
                Exit Sub
            End If
        Next i
End Sub
Изменено: Mershik - 17.05.2021 15:49:28
Не бойтесь совершенства. Вам его не достичь.
Страницы: 1
Наверх