Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5287|回复: 2

[已解决]动态数组 上限 如何取

[复制链接]
发表于 2013-11-3 17:43 | 显示全部楼层 |阅读模式
如何定义动态数组?

例子如下:在第一行单元格中有如下8个数

1
0
2
0
3
9
0
0

我想找有多少个不是0的数,然后组成数组,请问该怎么办?

dim arr(1  to 8)
j=1
for i=1 to 8
if cells(1,i)<>0 then
arr(j)=cells(1,i)
j=j+1
end if
next i

dim arr1(1 to j)
for m=1 to j
if arr(m)="" then
exit for
arr1(m)=arr(m)
next m


如上的代码,最终得到arr1,

我感觉上面的代码有点繁琐,肯定不是好程序,所以应该怎么编写呢?


最佳答案
2013-11-3 18:15
Dim arr()
For i = 1 To 8
If Cells(1, i) <> 0 Then
j = j + 1
ReDim Preserve arr(j)
arr(j - 1) = Cells(1, i)
End If
Next i
ReDim Preserve arr(UBound(arr) - 1)
数组arr就是你想要的结果
发表于 2013-11-3 17:49 | 显示全部楼层
本帖最后由 我心飞翔410 于 2013-11-3 17:53 编辑

lbound(arr, 第几维)  上界   ubound(arr, ) 下届
Sub rere()
Dim arr(1 To 8)
j = 1
For i = 1 To 8
    If Cells(1, i) <> 0 Then
        arr(j) = Cells(1, i)
        j = j + 1
    End If
Next i
Range("b1").Resize(1, UBound(arr)) = arr  '输出结果以b1 开始的一行

End Sub
回复

使用道具 举报

发表于 2013-11-3 18:15 | 显示全部楼层    本楼为最佳答案   
Dim arr()
For i = 1 To 8
If Cells(1, i) <> 0 Then
j = j + 1
ReDim Preserve arr(j)
arr(j - 1) = Cells(1, i)
End If
Next i
ReDim Preserve arr(UBound(arr) - 1)
数组arr就是你想要的结果
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-23 19:36 , Processed in 0.168840 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表