excel 在Double类型数组中存储一个值范围

inkz8wg9  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(83)

我有两列感兴趣的医疗副作用表,副作用的名称和他们的严重程度从0. 10 - 25. 00作为一个十进制数。使用字符串数组和转置,我存储第一列文本没有问题,但试图以同样的方式填充双数组失败,并出现Type Mismatch错误。为什么会这样呢?我可以通过使用变量数组来绕过这个问题,但是当我填充变量数组时,所有的索引都是Double类型的。我试过使用CDbl和#来强制问题,但这也不起作用。该范围仅覆盖数据,而不覆盖标头。

Function DiagnoseSideEffect(ByRef rngSide As Range) As String
    Dim sSideFx() As Variant
    Dim dSeverity() As Double
    Dim vSeverity() As Variant
    ' ... Other declarations

    sSideFx = WorksheetFunction.Transpose(rngSide.Columns(2).Value)
    dSeverity = WorksheetFunction.Transpose(rngSide.Columns(4).Value) ' ERROR: Type Mismatch
    vSeverity = WorksheetFunction.Transpose(rngSide.Columns(4).Value) ' Works fine
    ' Rest of function...
End Function

字符串

eqqqjvef

eqqqjvef1#

不需要使用Worksheet函数,转置即可得到结果。

类型不匹配错误的原因来自转置方法。转置将仅转置作为该方法的结果的原则上可以粘贴在一行中的列中的单元格的量。你把它赋给一个变量并不重要。

Dim myarr as Variant
myarr = Columns(7).Value

字符串
给出了一个二维数组myarr(x,y),索引从1开始。
项目可以与

myarr(item,1)


一般来说,为了不获取不必要的数据,获取范围的最后一项是值得的
用这个可以得到一个Double类型的一维数组

lastRow = Cells(Rows.Count, 7).End(xlUp).Row
ReDim arr(lastRow - 1) As Double
For i = 0 To lastRow - 1
arr(i) = Cells(i + 1, 7)
Next i


在你的代码里

ReDim dSeverity(rngSide.Rows.Count) As Double
For i = 0 To rngSide.Rows.Count - 1
dSeverity(i) = rngSide(i + 1, 4)
Next i

相关问题