【问题标题】:Math operators on 2-dimensional arrays in VBAVBA中二维数组的数学运算符
【发布时间】:2014-01-20 23:39:51
【问题描述】:

我想要对代码执行的操作是在 VBA 中像矩阵一样导入 Range.Value,然后将其每个元素的比率设为 100,最后将新矩阵放入我的电子表格中。

这是我的试验,但“类型不匹配”是错误:

Private Sub CommandButton1_Click()

    Dim matrix()
    Dim tmp()
    Dim nrow As Integer
    Dim ncol As Integer

    nrow = Range("F2:I142").Rows.Count
    ncol = Range("F2:I142").Columns.Count

    ReDim matrix(nrow, ncol)
    ReDim tmp(nrow, ncol)

    matrix = Range("F2:I142").Value

    For i = 0 To 142
        For j = 0 To 3
            tmp(i, j) = matrix(i, j) / 100
        Next
    Next

End Sub

数组索引可能有错误吗?

【问题讨论】:

  • 编辑:编辑变量声明。

标签: arrays excel vba for-loop


【解决方案1】:

错误是因为你使用了错误的数组边界:

ReDim matrix(1 To nrow, 1 To ncol)
ReDim tmp(1 To nrow, 1 To ncol)    

'your code

For i = 1 To 141
    For j = 1 To 4
        tmp(i, j) = matrix(i, j) / 100
    Next
Next

【讨论】:

  • 谢谢,也许用nrowncol 替换1414 应该也可以。只是一个问题:将tmp 放入我的电子表格中,例如Range("K2:N142") 可以在矩阵周围创建一个空白行和一个空白列。为什么会这样,我该如何避免?
  • 矩阵数组有维度(1到nrow,1到ncol),tmp数组有维度(0到nrow,0到ncol)。所以问题是你没有指定 tmp(0,j) 和 tmp(i,0) 的值。我已经更新了我的答案,代码现在应该可以正常工作了
猜你喜欢
  • 2019-08-25
  • 2019-12-08
  • 2017-10-30
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
  • 2018-08-31
  • 1970-01-01
相关资源
最近更新 更多