希望这是一个简单的问题,但我非常喜欢这个技术答案!
有什么区别:
i = 4
Run Code Online (Sandbox Code Playgroud)
和
Set i = 4
Run Code Online (Sandbox Code Playgroud)
在VBA?我知道后者会抛出错误,但我不完全理解为什么.
我有一个有趣的挑战 - 我需要在Excel中检查以下数据:
| A - B - C - D |
|------|------|------|------|
| 36 | 0 | 0 | x |
| 0 | 600 | 700 | x |
|___________________________|
Run Code Online (Sandbox Code Playgroud)
你必须原谅我糟糕的ASCII艺术.所以我需要D列(x)对相邻的单元格进行检查,然后在必要时转换值.这是标准:
如果B栏大于0,一切都很好,我可以喝咖啡.如果它不符合该要求,那么我需要根据表格转换A1 - 例如,32 = 1420并放入D.不幸的是,A和它需要转换的内容之间没有任何关系,因此创建计算是不可能的.
在这种情况下,case或switch语句是完美的,但我不认为它是Excel中的本机函数.我也认为把一堆=IF()陈述连在一起会有点疯狂,在做出决定这是一个坏主意(我的生活故事)之前,我做了大约四次.
我想在VBA for Excel中实现"Stack"类.我想使用Last In First Out结构.以前有人遇到过这个问题吗?你知道外部库处理结构,如Stack,Hastable,Vector ......(除了原始的Excel Collection等...)
谢谢
编辑:解决方案- 请参阅下面的原始问题
在将 {1,2,3} 这样的数组传递给 UDF 时,我发现需要考虑两件事:
区域设置 - 请参阅答案 1。德国系统上的列表分隔符(通常)是“;” 因此我需要使用 {1 ; 2 ; 3}。
传递的数组在函数中显示为二维数组。因此,它的第 n 个元素必须定位为 myArray(n, 1 )。忽略这给了我#VALUE!错误。
因此,一个简短的“选择案例”-UDF 可能如下所示:
Function SelCase(a1, a2, a3)
For i = 1 To UBound(a2)
If a2(i, 1) = a1 Then SelCase = a3(i, 1)
Next
End Function
Run Code Online (Sandbox Code Playgroud)
称为(德语语言环境!):
=SelCase(A1;{1;2;3};{"a";"b";"c"})
Run Code Online (Sandbox Code Playgroud)
根据 A1 给出结果“a”、“b”或“c”,结果为 1、2 或 3。
更详细的“选择案例”-UDF 可以在这里找到。
原问题:
我想将像 {1,2,3,4} 这样的数组传递给 Excel 2002 中的用户定义函数 - 但没有设法找到执行此操作的方法。
我使用的是德语版本,所以“,”是我的小数分隔符,也分隔水平(1D-)数组中的值- 编辑:这是错误的 -,而“;” 据我所知,将公式中调用的函数中的参数与工作表分开,并且还分隔垂直(一维)数组中的值。
我尝试过类似的东西
Function test(myArray)
Function …Run Code Online (Sandbox Code Playgroud) 数学相关函数中错误处理的好习惯是什么?我正在建立一个专门的函数库(模块),我的主要目的是让调用这些函数的代码更容易调试 - 而不是制作一个闪亮的用户友好的错误处理工具.
下面是VBA中的一个简单示例,但我也有兴趣听取其他语言的说法.我不太确定我应该在哪里返回错误消息/状态/标志.作为额外的论点?
Function AddArrays(arr1, arr2)
Dim i As Long
Dim result As Variant
' Some error trapping code here, e.g.
' - Are input arrays of same size?
' - Are input arrays numeric? (can't add strings, objects...)
' - Etc.
' If no errors found, do the actual work...
ReDim result(LBound(arr1) To UBound(arr1))
For i = LBound(arr1) To UBound(arr1)
result(i) = arr1(i) + arr2(i)
Next i
AddArrays = result
End Function
Run Code Online (Sandbox Code Playgroud)
或类似以下内容.该函数返回一个布尔"成功"标志(如下例所示,如果输入数组不是数字等,则返回False),或者某个其他类型的错误号/消息.
Function AddArrays(arr1, arr2, result) As …Run Code Online (Sandbox Code Playgroud)