Как зациклить функцию VBA по нескольким строкам, а не по ячейкам жесткого кода? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть 3 функции:

  • Один преобразует высоту в футах и ​​дюймах в метры.
  • Человек переводит вес в камнях и килограммах в килограммы.
  • Каждый рассчитывает ИМТ путем деления веса на квадрат роста.

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

Смотрите этот скриншот:

BMI Calculator Data

Это мой код:

Option Explicit

Const KgRate As Double = 0.45359237     'number of kg in one pound
Const PoundsInStone As Integer = 14     'number of pounds in one stone

Const InchesInFeet As Integer = 12      'number of inches in one foot
Const CmsInInch As Double = 2.54        'number of centimetres in an inch

Public weightInKilograms As Double

Public finalHeight As Double

**' FUNCTION 1**
Public Function heightInMetres()

Dim numberOfFeet As Integer
Dim numberOfInches As Integer
Dim heightInInches As Integer
Dim heightInCms As Integer

numberOfFeet = Range("C4").Value
numberOfInches = Range("C5").Value

heightInInches = (numberOfFeet * InchesInFeet) + (numberOfInches)
heightInCms = heightInInches * CmsInInch
finalHeight = heightInCms / 100

Range("C7") = finalHeight

End Function

**' FUNCTION 2**
Public Function weightInKilos()

Dim stonesEntered As Integer
Dim poundsEntered As Double
Dim stonesToPounds As Double

stonesEntered = Range("C10").Value
poundsEntered = Range("D10").Value

stonesToPounds = stonesEntered * PoundsInStone

weightInKilograms = ((stonesToPounds + poundsEntered) * KgRate)

Range("E10") = weightInKilograms

End Function

**' FUNCTION 3**
Public Function calculateBMI()

Dim BMI As Double

BMI = weightInKilograms / (finalHeight ^ 2)

Range("F10") = BMI

End Function

**' MAIN PROCEDURE**
Public Sub BMICalculator()

heightInMetres
weightInKilos
calculateBMI

End Sub

1) Какой самый простой способ повторить вычисления веса и ИМТ для 3 строк ниже недели 1 (которая является строкой 10 в Excel)?

2)Можно ли (просто) выполнять код непрерывно, например, как только я обновлю ячейки роста и веса, вычисления будут переделаны?

3) Если есть какие-либо (простые) улучшения кода, которые вы можетепредложить, пожалуйста, сделайте.: -)

Заранее спасибо,

Пит

1 Ответ

0 голосов
/ 09 октября 2018

Я изменил одну из ваших функций здесь, если вы можете следовать ей, у вас не должно возникнуть проблем с преобразованием остальных:

Public Function heightInMetres(numberOfFeet As Integer, numberOfInches As Integer)

 Dim heightInInches As Integer
 Dim heightInCms As Integer

 heightInInches = (numberOfFeet * InchesInFeet) + (numberOfInches)
 heightInCms = heightInInches * CmsInInch
 finalHeight = heightInCms / 100

 heightInMetres = finalHeight

End Function

Итак, просто введите следующее в ячейку, например.C7:

=heightinmetres(C4,C5)

Где количество футов в C4 и дюймов в C5 (в вашем примере)

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