Есть ли краткий способ сделать Range ("A1: A10"). Value = Range ("A1: A10"). Value + 1 в vba - PullRequest
0 голосов
/ 02 октября 2019

У меня небольшая проблема при работе с переменной диапазона. например, я могу напрямую выполнять присваивание в диапазоне ячеек, например:

Range("B1:B10").Value = Range("A1:A10").Value

Однако, есть ли краткий способ сделать приращение диапазона значений, а затем присваивание, вот что я имею в виду, но привело кошибка несоответствия типов

Range("A1:A10").Value = Range("A1:A10").Value + 1 

Редактировать: В конечном итоге, я хочу реализовать scroll_button, при нажатии _UP все ячейки в диапазоне увеличиваются на 1, при нажатии _Down все ячейки взначение уменьшения диапазона на 1. Какой самый эффективный способ сделать это?

Ответы [ 3 ]

1 голос
/ 02 октября 2019

Вот что я бы сделал, если у вас большой кусок данных:

Option Explicit
Sub Increase_Decrease(UpOrDown As Long)

    Dim LastRow As Long, i As Long
    Dim arr As Variant

    With ThisWorkbook.Sheets("MySheet") 'Change MySheet for your sheet
        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        arr = .Range("A1", .Cells(LastRow, 1)).Value
        For i = 1 To UBound(arr)
            arr(i, 1) = arr(i, 1) + UpOrDown
        Next i
        .Range("A1", .Cells(LastRow, 1)).Value = arr
    End With

End Sub
Sub Increase()

    Increase_Decrease 1

End Sub
Sub Decrease()

    Increase_Decrease -1

End Sub

Затем вы связываете кнопку прокрутки вверх с процедурой увеличения, а кнопку прокрутки вниз - с кнопкой уменьшения.

0 голосов
/ 02 октября 2019

Вы можете сделать это и без VBA.

Настройка демонстрации будет

Вставить элемент управления формы из Developer >> Insert >> Form Controls >> Scroll Bar.

Параметры будут иметь минимальное значение = 1 максимумЗначение = 100 Инкрементное изменение = 1 Изменение страницы = 10 Ссылка на ячейку = $B$1

И затем вставьте следующую формулу в ячейку A1: =ROW()-$B$1

Скопируйте вниз.

0 голосов
/ 02 октября 2019

Не уверен, что это действительно лаконично, но вместо копирования значений в массив добавьте цикл 1, а затем запишите его, вы можете попробовать следующий код

Sub Test()

    Dim rg1 As Range, rg2 As Range
    Dim addVal As Long

    addVal = 1
    Set rg1 = Range("A1:A10")

    Set rg2 = rg1.Offset(, 1)
    rg2.Formula = "=RC[-1]+" & addVal

    rg1.Value = rg2.Value
    rg2.Clear

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