excel中vba代码的问题,请教一个思路即可
我这只是整个工程中的其中一个步骤,所以只限于VBA宏代码了。不需要具体代码,只提供我一个思路方法即可,我可以慢慢去学。。。。。。。如图,A、B列是基础数据。A列以;号把数...
我这只是整个工程中的其中一个步骤,所以只限于VBA宏代码了。不需要具体代码,只提供我一个思路方法即可,我可以慢慢去学。。。。。。。如图,A、B列是基础数据。A列以;号把数据分成2--4段不等。B列是ABC之一,分别代表一种对应的计算方式,是对A列数据各段进行相应的数学运算。D列就是根据B列的ABC类型,对A列采取相应的计算方式的结果。我的思路是用for循环每一行,先在EFGH列分别拆分出A列中;号的各段数字。然后用select case根据B列的ABC选用相应的数学计算方式,在D列输出结果。但是这4000多行数据,运行一次需要1分钟的样子。每行需要计算EFGH四格,还需要case三种类型之一,好慢。想请教一下,有没有其他好一些的思路来得到D列结果。刚刚接触vba,所以只能想到用for循环。我这只是整个工程中的其中一个步骤,所以希望只能限于VBA宏代码。不需要具体代码,只提供我一个思路方法即可,我可以慢慢去学。
展开
2个回答
展开全部
我说几点:
1、数据分列后的结果,不用单元格存放,除非你有这个需求。这个是挺占用时间的。
2、尽量用数组,原始数据用一个数组,在需要的输出列用一个数组,区域和数组之间传数据相对就快。
3、分列的数据 ,建议 先 & “;;”后再分列,这样,程序处理图例第四行与第二行是同一个程序了。而不用增加分支判断。
4、 数据多了,是挺占用时间的,要耐心。
1、数据分列后的结果,不用单元格存放,除非你有这个需求。这个是挺占用时间的。
2、尽量用数组,原始数据用一个数组,在需要的输出列用一个数组,区域和数组之间传数据相对就快。
3、分列的数据 ,建议 先 & “;;”后再分列,这样,程序处理图例第四行与第二行是同一个程序了。而不用增加分支判断。
4、 数据多了,是挺占用时间的,要耐心。
更多追问追答
追问
大神,你的1、2条,是说,先for用arr(i,j)来保存分列数据,然后还是case根据ABC对arr中的进行相应计算,是这个意思?第3条,先 & “;;”后再分列,可否也继续说下,还没接触到这。我百度什么字词能搜索到这个思路。
追答
Sub 分类处理数据()
Dim Arr, Brr(), Crr, i&, j&, jg#
'原始数据
Arr = Range(Cells(2, 2), Cells(Rows.Count, 1).End(xlUp))
'存放结果的数据开适当大小的空间
ReDim Brr(1 To UBound(Arr), 1 To 1)
' 循环计算
For i = 1 To UBound(Arr)
Crr = Split(Arr(i, 1) & ";;", ";") '注意分号是中文的还是英文的,要全部一致才行。
jg = Empty
Select Case Arr(i, 2)
Case "A":
jg = Val(Crr(0)) * Val(Crr(1)) + Val(Crr(2))
Case "B":
Case "C":
End Select
Brr(i, 1) = jg
Next i
'结果输出到D列。
[d2].Resize(UBound(Brr), 1) = Brr
End Sub
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询