小型大型公式转换为访问VBA计算字段查询

时间:2014-04-29 17:39:23

标签: vba ms-access access-vba expression

我正在尝试将以下excel公式转换为Access中的计算字段。使用表达式或用户定义表达式与VBA代码的组合。任何帮助赞赏!并欣赏有关数据规范化的任何想法,但这不是问题。 THX

IF(SMALL(T319:V319,2)>6,SMALL(T319:V319,1),IF(SMALL(T319:V319,2)=0,LARGE(T319:V319,1),SMALL(T319:V319,2)

单元格T319-V319是由生成的数据查询生成的每个记录中的字段。为此目的称他们为A,B,C。

1 个答案:

答案 0 :(得分:0)

假设我预先输出数据,以便从最大到最小,这三个值由字母I,J和K表示。这意味着J是SMALL(T319:V319,2),K是SMALL(T319:V319,1),我是LARGE(T319:V319,1)

UPDATE:修复了函数的伪代码和最后一部分。我误读了Excel公式的嵌套IF:P

伪代码将是:

If J > 6 Then
    return K
ElseIf J = 0 Then
    return I
Else
    return J

你确定这是你想要的吗?

如果是这样,您可以按如下方式创建VBA功能:

Public Function GetVal(A As Variant, B As Variant, C As Variant)
    Dim I As Variant
    Dim J As Variant
    Dim K As Variant

    'Sort the three values so A, B, C becomes sorted largest to smallest as I, J, K
    If A > B Then
        If A > C Then
            I = A
            If B > C Then
                J = B
                K = C
            Else 'C > B
                J = C
                K = B
            End If
        Else 'C > A
            I = C
            J = A
            K = B
        End If
    Else 'B > A
        If B > C Then
            I = B
            If A > C Then
                J = A
                K = C
            Else 'C > A
                J = C
                K = A
            End If
        Else 'C > B
            I = C
            J = B
            K = A
        End If
    End If

    'Use I, J, K to find the result
    If J > 6 Then
        GetVal = K
    ElseIf J = 0 Then
        GetVal = I
    Else
        GetVal = J
    End If
End Function