Привет всем (первый пост, потерпите меня, лол), я написал макрос, который делает именно то, что мне нужно, ЗА ИСКЛЮЧЕНИЕМ того, что я не могу понять, как заставить макрос запускаться в Листе 1 в другой ячейке. В настоящее время он публикует нужную мне информацию в ячейке B3, но я бы хотел, чтобы он начинался в ячейке B10. Какие мысли?
Sub Button1_Click()
Sheets("Sheet1").Range("B2:B600").ClearContents
For i = 1 To 30
generate:
RowNum = Application.RoundUp(Rnd() * 88, 0)
If Application.CountIf(Sheets("Sheet1").[B:B], _
Sheets("Sheet2").Cells(RowNum, "A")) = 0 Then
Sheets("Sheet1").Range("B" & Rows.Count).End(xlUp).Offset(2).Value = _
Sheets("Sheet2").Cells(RowNum, "A").Value
Else
GoTo generate
End If
Next i
End Sub
решение1
Использовать это
Option Explicit
Public Sub Button1_Click()
Const RNG = "B2:B600" '<--- Range on Sheet1 --------------------
Const OFFSET_ROW = 2
Const START_ROW = 10 '<--- Start row --------------------------
Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Worksheets("Sheet1")
Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Worksheets("Sheet2")
Dim r As Long, ws2val As String
ws1.Range(RNG).ClearContents
For r = START_ROW To 30 * OFFSET_ROW + START_ROW - 1 Step OFFSET_ROW
ws2val = ws2.Cells(Application.RoundUp(Rnd() * 88, 0), "A").Value
If Application.CountIf(ws1.Range(RNG), ws2val) = 0 Then
ws1.Range("B" & r).Value = ws2val
Else
r = r - OFFSET_ROW
End If
Next
End Sub
Тестовые данные вЛист2, и Результат наЛист1
(Вывод начинается со строки 10, как вы и предполагали)