Ms access 大小公式转换为Acess VBA计算字段查询
我正在尝试将以下excel公式转换为Access中的计算字段。使用表达式或用户定义表达式与VBA代码的组合。感谢您的帮助!并感谢您对数据规范化的任何想法,但这不是问题所在。ThxMs 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
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代码中实现了这一点?