Я хочу сложить каждое число в столбце A с каждым в столбце в соответствии со следующим правилом, чтобы получить число в столбце C.

Правило:

  • Первое число в A плюс последнее число в столбце B, чтобы получить первый номер в столбце C

  • Второе число в A плюс второе последнее число в B, чтобы получить второе число в C

  • И так далее

Может ли кто-нибудь помочь мне написать функцию, чтобы сделать это?

Что я могу сделать, это вручную написать функцию для каждой суммы, например, A1 + B5, A2 + B4, ...

Однако это не то, что я хочу. Я хочу что-то, что может подать заявку на всех.

Спасибо.

3 ответа3

2

Давайте разделим это на две проблемы. Один делает математику, которую вы описываете. Другой автоматизирует параметры. Делать математику легко, если указать количество и расположение строк. Это усложняется, если вам нужна общая формула, которая включает определение этих параметров.

Итак, давайте предположим, что ваш массив начинается в A1. Мы добавим количество строк, 5 в данном случае, в D1. И чтобы было проще, давайте не будем обращать внимания на обработку пробелов и другие сложности. Предположим, у вас есть правильно подготовленный блок данных, и вы вручную копируете формулу в столбце C именно там, где вам это нужно.

Вы можете использовать эту формулу в C1, а затем скопировать ее в другие ячейки:

=A1+INDIRECT("B"&$D$1+1-ROW())

Функция INDIRECT создает ссылку на ячейку из текста и математики.

Другим методом будет использование функции INDEX:

=A1+INDEX(B$1:B$5,$D$1+1-ROW(),1)

Это жестко кодирует диапазон данных в формулу, что может быть нежелательно. INDEX возвращает значение из указанного диапазона с учетом строки и столбца относительно диапазона.

1

Я не знаю, хотите ли вы также сделать это с макросами, но вот пример с макросом.

Sub Macro1()

    Range("B1").Select
    Selection.End(xlDown).Select

    Dim num1 As Integer, num2 As Integer, counter As Integer, amountOfRows As Integer
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")

    amountOfRows = ws.Range("B1", ws.Range("B1").End(xlDown)).Rows.Count

    num1 = Range("A1").Value
    num2 = ActiveCell.Value

       For counter = 1 To amountOfRows

          Cells(counter, 3) = num1 + num2

            If counter = 5 Then
            Exit Sub
            End If

          num1 = Range("A1").Offset(0 + counter, 0).Value
          num2 = ActiveCell.Offset(-counter, 0).Value


        Next

End Sub
1

Начало в VBA Editor, чтобы написать макрос

В зависимости от того, какая версия VBA используется, вы можете использовать эту ссылку, чтобы узнать, как добавить макрос VBA в Excel.

Кроме того, вы можете использовать комбинацию клавиш ALT+F11, чтобы открыть редактор VBA - щелкните правой кнопкой мыши Лист 1(Лист1) и выберите Insert Module


Макрос по вашему требованию - перекрестное добавление

Вы можете использовать следующий макрос, чтобы сделать свое перекрестное добавление, как показано на рисунке.

Sub cross_addition()
' find out the last cell in a series
a = Range("A" & Cells(Rows.Count, "A").End(xlUp).Row)
For i = 1 To a
    For j = a To 1 Step -1
        k = Cells(i, 1).Value + Cells(j, 2).Value
        Cells(i, 3) = k
        i = i + 1
    Next j
Next i
End Sub  

Макрос предполагает, что данные, которые вы хотите добавить, находятся в столбцах A и B, а столбец C будет выходным столбцом. Поэтому, пожалуйста, измените код в соответствии с вашими требованиями.

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