Приравнивая набор range1 to range2 - PullRequest
0 голосов
/ 09 февраля 2019

Приравнивание диапазона1 к диапазону2

Попытка задать значения диапазона2 = значения диапазона1 Значения диапазона1, определенные, например, для: A1 = 2, A2 = 3, A3 = 8

Sub Test()

Set Rng1 = Range("A1:A3")

Set Rng2 = Range("B1:B3")

        Do Until Rng2.Value = Rng1.Value
            Rng2.Value = "=RANDBETWEEN(1,10)"
        Loop

End Sub

Rng2 сохранитгенерирование случайного числа и цикла до тех пор, пока B1 = 2, B2 = 3, B3 = 8

А пока продолжайте получать ошибку времени выполнения 13. Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Может быть, OP хочет сделать что-то подобное

Sub Test()

Dim Rng1 As Range, Rng2 As Range, sngCell As Range
Dim eq As Long, i As Long


    Application.ScreenUpdating = False

    Set Rng1 = Range("A1:A3")
    Set Rng2 = Range("B1:B3")
    Rng2.Value = "=RANDBETWEEN(1,10)"

    eq = 0
    Do
        eq = 0
        Rng2.Calculate
        For Each sngCell In Rng1
            If sngCell.Value = sngCell.Offset(0, 1).Value Then
                eq = eq + 1
            End If
        Next
        i = i + 1
        If i > 10000 Then Exit Do  ' Just to avoid an endless loop
    Loop Until eq = 3

    Debug.Print "Loops: " & i

End Sub

Просто поместите вручную несколько целых чисел от 1 до 9 в A1: A3, а код поместит несколько случайных чисел в B1: B3.Затем код повторяет помещение случайных целых чисел в B1: B3 до тех пор, пока мы не получим те же числа, что и в A1: A3.Я понятия не имею, для чего это хорошо :-) Возможно, OP хочет протестировать некоторые вероятностные функции, такие как случайная величина или ожидаемое значение (извините, я не знаю правильных английских терминов для этого).

Здесьверсия с использованием массивов

Sub TestArray()
Dim v1(1 To 3) As Byte
Dim v2(1 To 3) As Byte

Dim eq As Byte
Dim i As Long, k As Long

    v1(1) = 6
    v1(2) = 4
    v1(3) = 2

    Do
        eq = 0
        For k = 1 To 3
            v2(k) = WorksheetFunction.RandBetween(1, 10)
        Next k
        For k = 1 To 3
            If v1(k) = v2(k) Then
                eq = eq + 1
            End If
        Next k
        i = i + 1
        If i > 10000 Then Exit Do
    Loop Until eq = 3
    Debug.Print "Loops: " & i

End Sub
0 голосов
/ 09 февраля 2019

Вы можете просто установить диапазоны, равные друг другу напрямую (RangeX.Value = RangeY.Value), и все будет готово.Также интересно, если есть какой-то другой контекст, который не был распространен, хотя.Подход, который вы пытались использовать, заставляет меня думать, что это не полный охват вашего проекта

Sub (Test)

With ThisWorkbook.Sheets("Sheet1")
    .Range("B1:B3").Value = .Range("A1:A3").Value
End With

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