VBA中无循环将数组批量写入多个不连续单元格时仅显示首个元素的问题
解决VBA中不连续单元格批量赋值数组的问题
嘿,我懂你遇到的这个坑——直接把一维数组丢给由多个独立单元格组成的区域时,Excel只会死磕数组的第一个元素,把它填到所有单元格里,完全不管你数组后面的内容。这其实是因为不连续区域的结构和一维数组的默认匹配逻辑不搭导致的。
为什么原来的代码不行?
你用的Range(Rng).Value = OnOff,这里的一维数组默认是水平方向的(1行10列)。但你的目标区域是10个分散的单个单元格,Excel处理这种不连续区域时,会把每个单元格都当作需要接收“一行数据”的容器,结果每个单元格都只取了这行的第一个元素,也就是"ON"。
不用循环的解决方案
我们只需要把一维数组转成垂直方向的二维数组(10行1列),这样Excel就能把数组的每个元素对应到每个独立单元格了。用Application.Transpose就能轻松完成这个转换,完全不用写循环:
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 = Application.Transpose(OnOff)
这样运行后,第3到第5个单元格就会显示"OFF",其余的显示"ON",完全符合你的预期,而且处理大量元素时效率也很高,不会有循环带来的性能问题。
内容的提问来源于stack exchange,提问作者Netz
相关产品推荐
相关产品推荐

