永发信息网

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

答案:2  悬赏:20  手机版
解决时间 2021-11-30 23:49
VBA 循环给一个数组赋值的问题
最佳答案
有两个办法:
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
全部回答
墨尔本-北京-墨尔本
北京-香港
你要把每一行这样的数据分割成数组 想要把第一个元素赋值给单元格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追问也谢谢您,可惜在同一个提问里不能给两个不同的人分不然我也会给您分的。。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
定义一种新运算$,其规则为a$b=a/1+b/
单选题在19世纪的亚洲革命风暴中,民族解放运
单选题同种元素的原子一定相同的是A.相对原子
汽油机抽水泵汽油漏到缸铜里怎么办
小厚叶紫红色茎的多肉植物叫什么?
学游泳不会换气怎么办,初学游泳换气技巧
羊肚菌炒素怎么做
[点击“开始扫描”]这个开始扫描在哪里点?
如果你去竞选主持人,别人问你为什么要当支持
贾姓中有以 德为本,丙仁承先辈分,下面还有什
自制酸甜萝卜的老汤可继续用吗
谢谢你。今天到底是属金还是属火
为什么我QQ邮箱收到的中文邮件变成英文版了
哪些谎话让你觉得是在侮辱你的智商
建筑设计院资质标准?
推荐资讯
华为x21手机价位多少
二次元中的特殊能力,至少十个,每多五个提高
GDP万亿有余,湖北武汉的经济为什么发展的这
灯笼笼灯个个孔明诸葛亮下联是什么
菲菜可以和莴笋叶一起吃吗
金榜高中什么意思
英语音标问题,想问一下英标后面还有一个中括
在兵地融合发展上有什么经验还存在什么矛盾和
这是什么耳机求告知 有个B♀符号
回平江到社港下车
人民币的三字代码是什么
洁净室暖通设计工作前景怎么样,工资待遇怎么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?