arrays - 使用带有 vba 的变体数据类型时出现问题
问题描述
我正在尝试学习使用变体数据类型但面临问题。
Public Function z_score(sections As Range, marks As Range) As Variant
Dim n As Integer
Dim score() As Variant 'marks range has a few empty cells and error cells as well
'hence using variant data type
n = UBound(sections.Value)
ReDim score(1 To n, 1 To 2)
score = marks.Value 'assigning marks range values to first column of score
For i = 1 To n 'adding second column with integer index for calling later
score(i, 2) = i
Next i
z_score = score
End Function
我得到值错误而不是 nx2 矩阵作为输出。你能帮忙解决这个错误吗?非常感谢任何帮助,谢谢..
解决方案
恐怕有几个方面可能导致此代码失败:
- 如果传入的范围只有 1 个单元格,则对数组的赋值将引发错误。
- VBA 没有复制或克隆数组的方法,因此您的代码
score = marks.Value
没有按照您的评论所说的那样做, - 该
sections
参数似乎没有做任何事情。您正在根据它调整数组的大小,然后迭代marks
数组以分配值。 - 我不确定你想用这个函数做什么,但如果它是从工作表调用的 UDF,它需要是一个公式数组。
您可以按如下方式调整您的代码,使其更加健壮:
Public Function z_score(marks As Range) As Variant
Dim scoreArray() As Variant, marksArray() As Variant
Dim i As Long
marksArray = RangeValueToArray(marks)
ReDim scoreArray(1 To UBound(marksArray, 1), 1 To 2)
For i = 1 To UBound(marksArray, 1)
scoreArray(i, 1) = i
scoreArray(i, 2) = marksArray(i, 1)
Next
z_score = scoreArray
End Function
Private Function RangeValueToArray(rng As Range) As Variant
Dim v() As Variant
If rng.Cells.Count = 1 Then
ReDim v(1 To 1, 1 To 1)
v(1, 1) = rng.Value2
RangeValueToArray = v
Exit Function
End If
v = rng.Value2
RangeValueToArray = v
End Function
推荐阅读
- node.js - corp 代理后面的 create-react-app 代理 api 请求
- r - 使用具有 var 名称和其他条件的另一个数据框对数据框进行子集化
- r - 使用 gsub 从名称列中提取中间名
- php - PHP获取字符串之间的字符串
- c++ - Qt - 在工作线程崩溃中将 cv::Mat 转换为 QImage
- python - 将单标签分类器转换为多标签分类器
- laravel - 使用 Passport 登录 API 后重定向到查看
- tcl - TCL exec 输出延迟
- asp.net - 表单身份验证和用户超时
- javascript - 我如何发送此表单并将 JSON 存储为 var