VBA 循环给一个数组赋值的问题

循环给数组赋值,每循环一次数组的UBOUND不一致,请问如何解决?
EXCEL文件请到网盘下载,谢谢!
链接: http://pan.baidu.com/s/1gdgQY0V 密码: lj52

有两个办法:
1、将比较语句做一个循环:For j = 0 To UBound(arr)
2、如果不会变换使用上述方法,增加一个数组过渡,现在的arr为固定数组:dim arr(4),假定过渡数组为:arr1 = Split(Range("a" & i), "-"),将arr1循环赋值给arr,就用你现有代码即可。
但最想说的是,你的代码太繁杂,你应该把判断条件说出来,感觉你的代码可大大简化。追问

其实条件很复杂,以后需要慢慢加,目前我是想先搞懂怎么做才不出错。。

追答

Public Sub 航程判断()
Dim arr, arr1, i%
For i = 2 To [a1000000].End(xlUp).Row
arr = Array("", "", "", "", "")
arr1 = Split(Range("a" & i), "-")
For j = 0 To UBound(arr1)
arr(j) = arr1(j)
Next
If arr(0) "北京" And (arr(2) = arr(0) Or arr(2) = "") Then
Cells(i, 2) = arr(1)
ElseIf arr(0) "北京" And arr(1) = "北京" And (arr(4) = arr(0) Or arr(3) = "") Then
Cells(i, 2) = arr(2)
ElseIf arr(0) = "北京" And (arr(2) = "北京" Or arr(2) = "上海" Or arr(2) = "") Then
Cells(i, 2) = arr(1)
ElseIf arr(0) = "北京" And (arr(4) = "北京" Or arr(3) = "") Then
Cells(i, 2) = arr(2) & "(转)"
ElseIf arr(0) = "北京" Then
Cells(i, 2) = arr(1)
ElseIf arr(1) = "北京" Then
Cells(i, 2) = arr(2)
End If
Next i
End Sub

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-04
墨尔本-北京-墨尔本
北京-香港
你要把每一行这样的数据分割成数组 想要把第一个元素赋值给单元格2 还是最后一个数组元素呢?或者其他
看你代码好像取数组中间元素多一点,可如果数组是偶数个数呢?追问

其实就是先处理A2,将判断出来的值赋值给B2
然后再处理A3,将判断出来的值赋值给B3
对A列中每一个单元格的处理都是单独的,不涉及其他单元格,处理完一个,再循环至下一个处理。

我是要把每一行这样的数据分割成数组 但不是单纯的把数组中第一个元素赋值给单元格2,而是有一定判断条件,可能是这个数组中第一个元素赋值给单元格2,也可能是第二个元素,也可能是第三个元素。。这个是需要根据条件来判断的

追答

根据什么条件呢~看你有的起飞不能在北京,有的可以~·考验你功力了 言简意赅的总结规则
因为数组元素大小的不同 我还是建议你先用
if ubound(数组)=1 then

elseif ubound(数组)=2 then
类推

end if
先用数组大小来过滤~再进行条件判断 这样就不会因超过数组范围而报错

追问

1、如果第一个城市不是北京,第三个城市为空或者等于第一个城市,则B列赋值为第二个城市
2、如果第一个城市是北京,第三个城市是北京,则B列对应的行赋值为第二个城市
其他的判断条件我就不写了 因为写多了也浪费您的时间来做 就麻烦您按上面两个条件给我举个例子吧,非常感谢!

追答

if ubound(数组)=1 then
’if 你的条件
elseif ubound(数组)=2 then
’if 你的条件
end if

追问

if ubound(数组)=1 then
if 条件1 then
elseif 条件2 then
elseif 条件3 then
elseif ubound(数组)=2 then
’if 你的条件
end if

是这样吗?

追答是的 不过你 ubound(数组)=1 不需要那么多判断吧 就2个元素而已
根据数组元素的个数 写对应的判断

if ubound(arr)=1 then
    if arr(0) = "北京" Then
         Cells(i, 2) = arr(1)
    end if
elseif ubound(arr)=2 then 
     If arr(0) <> "北京" And (arr(2) = arr(0) Or arr(2) = "") Then
         Cells(i, 2) = arr(1)
     ElseIf arr(0) = "北京" And (arr(2) = "北京" Or arr(2) = "上海" Or arr(2) = "") Then
        Cells(i, 2) = arr(1)
    end if
end if

追问

也谢谢您,可惜在同一个提问里不能给两个不同的人分不然我也会给您分的。。