Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 大小公式转换为Acess VBA计算字段查询_Ms Access_Vba_Expression - Fatal编程技术网

Ms access 大小公式转换为Acess VBA计算字段查询

Ms access 大小公式转换为Acess VBA计算字段查询,ms-access,vba,expression,Ms Access,Vba,Expression,我正在尝试将以下excel公式转换为Access中的计算字段。使用表达式或用户定义表达式与VBA代码的组合。感谢您的帮助!并感谢您对数据规范化的任何想法,但这不是问题所在。Thx IF(小(T319:V319,2)>6、小(T319:V319,1)、IF(小(T319:V319,2)=0、大(T319:V319,1)、小(T319:V319,2) 单元格T319-V319是由生成的数据查询生成的每个记录中的字段。为此,将它们称为a、B、C。假设我对数据进行预排序,以便从大到小,三个值由字母I、J

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

IF(小(T319:V319,2)>6、小(T319:V319,1)、IF(小(T319:V319,2)=0、大(T319:V319,1)、小(T319:V319,2)


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

假设我对数据进行预排序,以便从大到小,三个值由字母I、J和K表示。这意味着J
小(T319:V319,2)
,K
小(T319:V319,1)
而我是
大的(T319:V319,1)

更新:修复了伪代码和函数的最后一部分。我误读了Excel公式的嵌套IFs: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

一、 J,K可能并不总是预先排序,以使I最大,J第二小,K最小。根据您提出的解决方案,不确定如何继续,但感谢您的见解。@user3574211 Excel“SMALL”函数的工作方式是数组ARR和整数K,
SMALL(ARR,K)
返回数组ARR的第k个最小值。如果有一个包含三个元素的数组
SMALL(ARR,2)
将始终返回三个元素中的中间元素,“LARGE”以相反的方式工作,因此
LARGE(ARR,1)
将始终返回最大值,而
SMALL(ARR,1)
将始终返回最小值。因此,将A、B、C排序为从大到小的列表…@user3574211,正如您所知,我意识到您输入到函数中的数据没有排序。这就是为什么我将排序作为函数的前半部分。A、B、C是您的输入,然后我对它们进行排序,以使我是其中最大的一个三个,J是中间的,K是三个中最小的。这样我就可以匹配我答案顶部提到的比较功能。@user3574211如果你真的愿意,我可以提供函数
SMALL
和函数
LARGE
的访问实现,但这需要排序算法。如果你想要一个函数,它的功能与你的Excel公式完全相同,就是这样。它如此大的原因是Access本身没有一个大的或小的函数。我要说的是,当我对列进行排序时,它有+4K记录,a-C并不总是按照这个顺序转换为I,J,K。因此这将是一个混乱的输出。因此,我喜欢您的第三个回答。您是否在VBA代码中实现了这一点?