Привет всем (первый пост, потерпите меня), я написал макрос, который делает именно то, что мне нужно, ЗА ИСКЛЮЧЕНИЕМ Я не могу понять, как запустить макрос в Листе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 ответ1

0

Использовать этот


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, как вы и планировали)

Лист1 Sheet2

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .