Как я могу сделать расчет в Microsoft Excel VBA? - PullRequest
0 голосов
/ 05 марта 2019

Мне 15 лет, я прохожу стажировку в качестве разработчика, и у меня есть довольно тяжелое упражнение.

У меня есть таблица с 3 столбцами, A - это «Число», B - «процент», а «C» - «Значение». Столбец «значение» пуст, и мне нужно вычислить значение с помощью кнопки макроса. Я пробовал это, но это было неправильно, потому что я не рассчитал это в VBA:

Public Sub PushButton ()
    Range("C2:C11").Formula = "=A2*B2/100"
    Range("C2:C11").Value = Range("C1:C6).Value
End Sub

Как мне решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 05 марта 2019

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

Option Explicit
Sub PushButton()

    Dim i As Long, LastRow As Long

    With ThisWorkbook.ActiveSheet
        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row 'first you need to find the last row on the active sheet

        For i = 2 To LastRow 'then iterate through all the rows starting from 2, if row 1 has headers
            .Cells(i, 3) = .Cells(i, 1) * .Cells(i, 2) / 100
        Next i
    End With


End Sub

Если вам нужна помощь в понимании этого кода, дайте мне знать.

Редактировать:Пояснение

Ну, первое, что вы должны сделать, это Измерение всех ваших переменных и помочь вам использовать Option Explicit прямо над всем вашим кодом.

Я измерил 1 переменную для цикла и еще одну, чтобы найти последнюю строку с текстом.

Чтобы найти последнюю строку, то, что вы на самом деле собираетесь сделать лучше, выберите последнюю строку (1048576) и столбец, в котором будет текст, в данном случае 1 или столбец «А», а затем нажмите Ctrl.+ Up Excel и VBA приведет вас к последней ячейке с текстом.

Для этого вы используете Cells(Row, column) вместо ручной вставки строки 1048576, вы можете просто использовать rows.count, и она будет такой же.

Как только вы получите последнюю строку, которую вы просто итерируете сзначение цикла For i Для переменной с именем i, которая равна 2 (For i = 2) To LastRow (до последней рассчитанной строки) VBA будет повторять код между For И Next, добавляя 1 числов i каждый раз, когда цикл перезапускается.

В этом случае просто добавьте число к строкам в Cells(i, 3), чтобы вы могли изменить эту ячейку в зависимости от ее значения i.

0 голосов
/ 05 марта 2019

Я думаю, что вам нужно спросить, почему Excel должен рассчитывать по требованию, а не автоматически, как обычно.В случае отсутствия нескольких опций

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

Option Explicit
Dim xlCalcMethod As XlCalculation
Private Sub Workbook_Open()
    With Application
        ' Store users current method for when closing the workbook
        xlCalcMethod = .Calculation
        .Calculation = xlCalculationManual
    End With
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ' Reset calculation
    Application.Calculation = xlCalcMethod
End Sub

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

Option Explicit
Public Sub Button_Click()
    Application.Calculate
End Sub

Другой вариант сделать это без зацикливания:

Sub CalculateRange()
    Dim rng As Range

    ' Update for your Range
    With ActiveSheet
        Set rng = .Range("C2:C" & .Cells(.Rows.Count, "A").End(xlUp).Row)
    End With

    rng.Value2 = Evaluate(rng.Offset(0, -2).Address & "*" & rng.Offset(0, -1).Address & "/100")
End Sub

Наконец, способ, который вы придумали, вполне приемлем как VBA

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