Диапазон не меняет несколько ячеек - PullRequest
0 голосов
/ 30 ноября 2018
Sub ButtonLower()

Range("b2", "b7").Value = Range("b2", "b7").Value - 2

End Sub
Sub ButtonHigher()

Range("b2", "b7").Value = Range("b2", "b7").Value + 2

End Sub

Конечным результатом является то, что изменяется только значение B2, а не весь диапазон.Может ли кто-нибудь помочь мне с этим?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Если у вас есть значение для добавления или вычитания в A1, вы можете скопировать A1 и добавить его в ячейки Range.

Или вы можете использовать цикл.

Sub AddVal()
    Range("A1").Copy
    Range("B2:B7").PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd, SkipBlanks:= _
                                False, Transpose:=False
    Application.CutCopyMode = False
End Sub
Sub SubVal()
    Range("A1").Copy
    Range("B2:B7").PasteSpecial Paste:=xlPasteAll, Operation:=xlSubtract, SkipBlanks:= _
                                False, Transpose:=False
    Application.CutCopyMode = False
End Sub

Sub LoopIt()
    For Each cell In Range("B2:B7")
        cell.Value = cell.Value + 2
    Next
End Sub
0 голосов
/ 30 ноября 2018

Вы не можете выполнить математическую операцию непосредственно над массивом в целом.Используйте Evaluate:

With ActiveSheet.Range("B2:B7")
    .Value = ActiveSheet.Evaluate(.Address & " - 2")
End With

И

With ActiveSheet.Range("B2:B7")
    .Value = ActiveSheet.Evaluate(.Address & " + 2")
End With

Или вы можете загрузить целое в вариантный массив и зациклить массив:

Sub ButtonLower()
    Dim arr() As Variant
    arr = ActiveSheet.Range("b2:b7").Value

    Dim i As Long
    For i = LBound(arr, 1) To UBound(arr, 1)
        Dim j As Long
        For j = LBound(arr, 2) To UBound(arr, 2)
            arr(i, j) = arr(i, j) - 2
        Next j
    Next i

    ActiveSheet.Range("b2:b7").Value = arr
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...