【问题标题】:Copy Array to Multiple Range将数组复制到多个范围
【发布时间】:2021-12-30 07:39:34
【问题描述】:

我第一次在这里发帖。我正在尝试将具有 10 个元素的数组复制到 10 个单独的范围。问题是所有单元格只有数组中的第一个元素。在下面的示例中,我只得到 ON。我没有在第 3 到第 5 范围内获得 OFF。 编辑我试图在不使用循环的情况下执行此操作,因为我可能有很多元素并且在复制过程中速度变慢。

Dim Rng As String
Dim OnOff() As Variant
    
Rng = "F7,G4,H3,I9,J8,K2,L10,M1,N6,O5"
OnOff = Array("ON", "ON", "OFF", "OFF", "OFF", "ON", "ON", "ON", "ON", "ON")
    
Range(Rng).Value = OnOff

这就是我得到的:

这是我希望得到的:

【问题讨论】:

    标签: arrays excel vba copy


    【解决方案1】:

    写入非连续范围

    • 尝试创建两个单独的单元格地址字符串。
    Const rgOnAddress As String = "F7,G4,L10,M1,N6,O5"
    Const rgOffAddress As String = "H3,I9,J8"
    
    Range(rgOnAddress).Value = "ON"
    Range(rgOffAddress).Value = "OFF"
    

    【讨论】:

    • 好主意!从来没想过。我的项目有 4 个可能的结果。这也有效。
    【解决方案2】:

    根据您发布的图像,您只想同时循环遍历RngOnOff

    Dim Rng As String
    Dim OnOff() As Variant
    
    Rng = "F7,G4,H3,I9,J8,K2,L10,M1,N6,O5"
    OnOff = Array("ON", "ON", "OFF", "OFF", "OFF", "ON", "ON", "ON", "ON", "ON")
    
    Dim i As Long
    Dim v As Variant
    v = Split(Rng, ",")
    For i = LBound(OnOff) To UBound(OnOff)
        Range(v(i)) = OnOff(i)
    Next i
    

    由于似乎需要写入非连续范围,因此可以使用link 中的代码来加快速度。

    【讨论】:

    • 有没有办法不用循环?
    • 所提议的解决方案是否能给您想要的结果?
    • 是的,谢谢。但我最初的意图是加快复制数据的时间,因为我已经复制了数百个数据。我也试过 Application.Calculation = xlCalculationManual 和 Application.ScreenUpdating = False 但它仍然很慢。
    • 但是你需要写入一个非连续的范围,对吧?
    • 是的。范围必须是非连续的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多