首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将Excel加载范围转换为数组,并将其转换为原始范围。

将Excel加载范围转换为数组,并将其转换为原始范围。
EN

Stack Overflow用户
提问于 2022-02-17 12:12:25
回答 1查看 42关注 0票数 0

我正在将一个范围读取到一个数组中,循环遍历这个数组来确定一些公式的值,然后将数组返回到工作表。如果我将数组返回到一个与原始范围不同的范围,那么它看起来工作正常,但是如果我将它返回到原来的范围,我只得到第一个公式行,而不是整个范围。我遗漏了什么?

代码语言:javascript
运行
复制
Sub Test2()
Dim vInArrayF As Variant
Dim vInArrayV as Variant
vInArrayF = Range("B13:M55").Formula
vInArrayV = Range("B13:M55").Value
Dim OutRange As Range
Dim R As Long
Dim C As Long
For R = 1 To UBound(vInArrayF, 1) ' First array dimension is rows.
    For C = 1 To UBound(vInArrayF, 2) ' Second array dimension is columns.
        If Left(vInArrayF(R, C), 3) = "=+S" Then
            vInArrayF(R, C) = vInArrayV(R, C)
        End If
    Next C
Next R
'Set OutRange = Range("AB13:AM55")
Set OutRange = Range("B13:M55")
OutRange.ClearContents
OutRange = vInArrayF

结束子对象

EN

回答 1

Stack Overflow用户

发布于 2022-02-17 13:59:07

使用Range.Formula2

  • Range.Formula将第一个公式应用于整个column.
  • Range.Formula2,为数组中的每个元素应用每个公式。

代码语言:javascript
运行
复制
Sub ReplaceSomeFormulas()
    Dim vInArrayF As Variant
    Dim vInArrayV As Variant

    With Range("B13:M55")
        vInArrayF = .Formula2
        vInArrayV = .Value
        Dim R As Long
        Dim C As Long
        For R = 1 To UBound(vInArrayF, 1)
            For C = 1 To UBound(vInArrayF, 2)
                If Left(vInArrayF(R, C), 3) = "=+S" Then
                    vInArrayF(R, C) = vInArrayV(R, C)
                End If
            Next C
        Next R
        .Formula2 = vInArrayF
    End With
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71157939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档