如何将两个VBA函数合并为自定义Account函数?
合并VBA函数为Account自定义函数
以下是合并后的Account自定义函数,直接使用=Account(A1)即可得到与原公式相同的结果:
Public Function Account(inputVal As Variant) As String Dim c1 As String Dim inputLen As Integer Dim ripResult As String Dim cleRIP As String ' 原CCPA函数逻辑 inputLen = Len(inputVal) Select Case inputLen Case 0 To 1 c1 = "00799999000000000" Case 2 c1 = "0079999900000000" Case 3 c1 = "007999990000000" Case 4 c1 = "00799999000000" Case 5 c1 = "0079999900000" Case 6 c1 = "007999990000" Case 7 c1 = "00799999000" Case 8 c1 = "0079999900" Case 9 c1 = "007999990" Case 10 c1 = "00799999" End Select ' 原RIP函数逻辑 cleRIP = Right(inputVal, 10) If cleRIP = "" Then cleRIP = "0" End If ripResult = CDbl(cleRIP) * 100 ripResult = ripResult - 97 * Int(ripResult / 97) ripResult = ripResult + 85 If ripResult < 97 Then ripResult = ripResult + 97 End If ripResult = ripResult - 97 ripResult = 97 - ripResult If ripResult < 10 Then ripResult = "0" & CStr(ripResult) Else ripResult = CStr(ripResult) End If ' 拼接结果,对应原公式的MAJUSCULE(VBA中用UCase实现大写) Account = c1 & UCase(CStr(inputVal) & UCase(ripResult)) End Function
说明
- 整合了原
CCPA和RIP函数的全部逻辑,无需再调用多个函数 - 原公式中的
MAJUSCULE是Excel法语版的大写函数,对应VBA中的UCase函数,已替换实现相同效果 - 优化了原
CCPA的Case判断,将0和1长度的输入合并为同一分支,逻辑不变但更简洁 - 明确声明变量类型,提升代码稳定性
内容的提问来源于stack exchange,提问作者snollygoster
相关产品推荐
相关产品推荐

