0

フォームの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 = vbNullStringetc を使ってみました。

4

3 に答える 3

1

ゼロの場合は、次のことを確認できますRange("D2").Value = 0

数式が空白を返すかどうかを確認するには、次の場合に使用できますRange("D2").Value = vbNullString

また、通常は回避することもできますRange("D2").Value = ""(ただし、一部の熱心な vba の人々は、おそらく代わりに vbNullString を推奨するでしょう)。

于 2013-09-19T13:50:03.777 に答える
1

カスタム関数を作成できます。以下の関数を使用すると、次のように呼び出すことができます。

Debug.Print IsCellFormulaEmpty(Range("D2"))

関数は次のとおりです。

Function IsCellFormulaEmpty(c As Range) As Boolean

Dim myVal As String
myVal = Trim(c.Value)

Select Case myVal
    Case Empty
        IsCellFormulaEmpty = True
    Case Else
        IsCellFormulaEmpty = False
End Select

End Function

6これを の定数値、式=IF(D24=C24,C23,"")(null 文字列を返した)、および の定数値でテストしました0。結果はFalse, True, False予想通りです。

于 2013-09-19T13:57:33.887 に答える
0

一般的に言えば、可能な場合は VBA を避けるようにしてください。その場合、次のようなデータ設定が与えられます。

ここに画像の説明を入力

セル H2 の式を下にコピーすると、次のようになります。

=A2+SUMPRODUCT(--(B2:F2<>""),--(ISNUMBER(SEARCH("d",$B$1:$F$1))),C2:G2)
于 2013-09-19T14:43:03.457 に答える