データの範囲を取り、ユーザーが提供した列から 2 つの数値の比率を計算する関数を作成しようとしています。この比率を行の最後に出力したいのですが、何らかの理由で、セル関数を使用して行の最後のセルを参照できません。代わりに、Cells 関数は、セル アドレスではなく、そのセルの値を提供し続けます。セル関数もアドレスを提供すると思いました。これが間違っているのか、それとも私のコードが間違っているのか、誰かに教えてもらえますか?
ここにコードがあります
Function calculateRatio(table As Range, numerator As Integer, denominator As Integer, Optional nameOfRatio As String)
On Error GoTo ExpectedError
Dim num As Double
Dim denom As Double
Dim ratio As Double
If table.Columns.Count < 2 Then
MsgBox ("Not enough data. Requires at least two or more rows.")
Exit Function
End If
If numerator < 1 Or numerator > table.Columns.Count Then
MsgBox ("Not an acceptable Numerator. Must be greater than zero and less than " & table.Columns.Count)
Exit Function
End If
If denominator < 1 Or denominator > table.Columns.Count Then
MsgBox ("Not an acceptable Denominator. Must be greater than zero and less than " & table.Columns.Count)
Exit Function
End If
For Counter = 1 To table.Rows.Count
num = table.cells(Counter, numerator)
denom = table.cells(Counter, denominator)
ratio = num / denom
temp = table.cells(counter, table.columns.count)
temp.Offset(0, 1).Value = ratio
Next Counter
Exit Function
ExpectedError:
Call MsgBox("Something went wrong. Make sure you are referencing columns with numbers and not text." & Err.Number & " : " & Err.Description)
End
End Function
アップデート
更新されたコードは次のとおりです。
Function calculateRatio(table As Range, numerator As Integer, denominator As Integer, Optional nameOfRatio As String)
Dim num As Double
Dim denom As Double
Dim ratio As Double
Dim temp As Range
Dim counter As Integer
If table.Columns.Count < 2 Then
MsgBox ("Not enough data. Requires at least two or more rows.")
Exit Function
End If
If numerator < 1 Or numerator > table.Columns.Count Then
MsgBox ("Not an acceptable Numerator. Must be greater than zero and less than " & table.Columns.Count)
Exit Function
End If
If denominator < 1 Or denominator > table.Columns.Count Then
MsgBox ("Not an acceptable Denominator. Must be greater than zero and less than " & table.Columns.Count)
Exit Function
End If
For counter = 1 To table.Rows.Count
num = table.cells(counter, numerator)
denom = table.cells(counter, denominator)
ratio = num / denom
Set temp = table.cells(counter, table.Columns.Count)
temp.Offset(0, 1).Value = ratio
Next counter
End Function