フォームのExcel VBAで数式を作成しています
myformula(cell1, cell2, range)
範囲は、次の最初の 7 列のようになります。
V1 D2 V2 D3 V3 D4 V4 RESULT
0.5 2 0.7
最初の列には常に値があり、0 から 1 までの値になります。後続の列はすべて空である可能性がありますが、D2 に値がある場合は V2 にも値があり、以下同様です。
私の式は RESULT 列に入り、V 列の数値を合計しますが、前の D 列が満たされている場合のみです。つまり、この場合、V1 + V2 を計算しますが、V3 と V4 は無視します。
私が使用しているVBは動作します
if IsEmpty(D2)
適切な値を選択すると、ほとんどの場合、これでうまくいきます。
ただし、V 値と D 値を式で計算する場合にも、この式を適用できるようにしたいと考えています。数式は条件付きで、数値または "" (のようなものIF(A2="","",3)
) を出力するため、セル範囲は同じように見えますが、VB では真に空であるとは見なされなくなります。
これを回避する方法を探しています。数式の結果が真に空になることはありませんが、セルの内容を VB が空として理解できるように「十分に空」にする方法はありますか? または、空のセルを取得するために使用できる別の条件がありますが、ゼロ値と空のセルを区別できる必要があります。
ETA: Stepan1010 のソリューションの実装に苦労しています。これは私がやっていることです - それは間違っているかもしれません:
Public Function YEARAV(sdate As Date, edate As Date, yearrange As Range) As Variant
Dim v1 As Variant
Dim v2 As Variant
Dim v3 As Variant
Dim v4 As Variant
Dim b As Date
Dim c As Date
Dim d As Date
v1 = yearrange.Cells(1, 1)
v2 = yearrange.Cells(1, 3)
v3 = yearrange.Cells(1, 5)
v4 = yearrange.Cells(1, 7)
b = yearrange.Cells(1, 2)
c = yearrange.Cells(1, 4)
d = yearrange.Cells(1, 6)
total_days = edate - sdate
a = sdate
e = edate
If Range(yearrange.Cells(1, 6)).Value = vbNullString Then
d = edate
If Range(yearrange.Cells(1, 4)).Value = vbNullString Then
c = edate
If Range(yearrange.Cells(1, 2)).Value = vbNullString Then
b = edate
End If
End If
End If
YEARAV = ((b - a) * v1 + (c - b) * v2 + (d - c) * v3 + (e - d) * v4) / total_days
End Function
私もちょうどIf b = vbNullString
etc を使ってみました。