Как применить формулу к 2d-диапазону Excel

#excel #excel-formula #excel-2016

#excel #excel-формула #excel-2016

Вопрос:

Вероятно, это не такая уж сложная проблема, но я, похоже, не мог ее решить.

Существует диапазон Excel, например:

введите описание изображения здесь

Теперь цель состоит в том, чтобы использовать формулу =(Значение ячейки / 2) * 50 для каждой ячейки в диапазоне. Результат выглядит следующим образом:

введите описание изображения здесь

Конечно, это можно сделать строка за строкой или столбец за столбцом. Но есть ли какой-нибудь более простой способ сделать это, учитывая, что может быть больше предметов и даже большое количество учащихся?

Вот мой код, и я использую excel 2016:

 int lastRow = wsht.Cells.Find("*", Type.Missing,Type.Missing, Type.Missing, XlSearchOrder.xlByRows, XlSearchDirection.xlPrevious, false, Type.Missing, Type.Missing).Row;
int lastCol = wsht.Cells.Find("*", Type.Missing, Type.Missing, Type.Missing, XlSearchOrder.xlByColumns, XlSearchDirection.xlPrevious, false, Type.Missing, Type.Missing).Column;

            int i=2;
            for(i=2;i<=lastCol;i  )
            {
                string colName = getColumnName(i);
                wsht.Cells[2, (lastCol 1)].Formula = "=("   colName   "2/2)*50";
                wsht.Cells[2, (lastCol 1)].AutoFill(wsht.Range[wsht.Cells[2, (lastCol 1)], wsht.Cells[lastRow, (lastCol 1)]], XlAutoFillType.xlFillValues);

                wsht.Range[wsht.Cells[2, (lastCol 1)], wsht.Cells[lastRow, (lastCol 1)]].Copy();
                wsht.Range[wsht.Cells[2, i], wsht.Cells[lastRow, i]].PasteSpecial(XlPasteType.xlPasteValues, XlPasteSpecialOperation.xlPasteSpecialOperationNone, Type.Missing, Type.Missing);
            }
 

При большем количестве строк и столбцов приведенный выше код займет время. Специальными параметрами для вставки являются сложение, вычитание, умножение и деление. Как применить немного более сложную формулу в этом случае?

Любая помощь приветствуется!!

Комментарии:

1. Почему вы делите на 2, а затем умножаете на 50? Имеет смысл просто умножить на 25.

2. Это только для примера, который не является простым сложением или вычитанием. Это может быть любая математическая формула. Ну, я не мог придумать ничего лучшего!

3. а) Выберите область того же размера, что и ваш источник, например F2:H6 ; б) введите формулу =(B2:D6/2)*50 и в) нажмите Control Shift Enter, чтобы подтвердить формулу массива.

Ответ №1:

Вы можете сделать это с помощью формулы. Попробуйте приведенную ниже формулу.

 =(INDEX($B$2:$D$6,ROW($A1),COLUMN(A$1))/2)*50
 

введите описание изображения здесь

Если вы хотите сделать это с помощью VBA кодов, попробуйте ниже-

 Sub Multiply50()
Dim sh As Worksheet
Dim lRow As Long, lCol As Long
Dim rng As Range

Set sh = ThisWorkbook.Worksheets("Sheet1")

lRow = sh.Cells(sh.Rows.Count, 1).End(xlUp).Row
lCol = sh.Cells(1, sh.Columns.Count).End(xlToLeft).Column

    For Each rng In sh.Range("B2:" amp; Cells(lRow, lCol).Address)
        rng = (rng / 2) * 50
    Next

Set sh = Nothing
End Sub